본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 도비의 난독증 테스트 : 2204번 - Python

728x90
반응형
SMALL

https://www.acmicpc.net/problem/2204

 

2204번: 도비의 난독증 테스트

꿍은 도비에게 영어단어들을 제시한 후 어떤 단어가 대소문자를 구분하지 않고 사전순으로 가장 앞서는지 맞추면 양말을 주어 자유를 얻게해준다고 하였다. 하지만 인성이 좋지 않은 꿍은 사실

www.acmicpc.net

 

 

 

문제를 풀면서 몰랐던 개념

 

[Python] 대소문자 구분 없이 정렬

-> 영문 문자열 리스트를 정렬할 때에는 기본적으로 대소문자를 구분하여 소팅하는데 sort함수에 key=str.lower라는 파라미터를 넣으면, 대소문자 구분없이 자연스럽게 정렬할 수 있음!

arr = ['bbb', 'AAA', 'DDD', 'CCC', 'aaa']

# 대소문자 구분하여 정렬
arr.sort()
print(arr)

>>> ['AAA', 'CCC', 'DDD', 'aaa', 'bbb']	# 출력 결과

# 대소문자 구분 없이 정렬
arr.sort(key=str.lower)
print(arr)

>>> ['AAA', 'aaa', 'bbb', 'CCC', 'DDD']	# 출력 결과

 

 

 

문제의 접근 방법

 

입력 받은 영어 단어들을 대소문자 구분 없이 출력하기

 

 

 

문제 풀이 방법

 

각 테스트 케이스의 개수를 입력받고 그 수에 맞게 영어 단어들을 입력받기 위해서 while문 안에서 구현 -> 테스트 케이스 n번 입력 받기 -> 만약 n이 0이라면 while문 종료 -> n번만큼 반복문을 돌려 단어를 입력받아 미리 선언해 둔 빈 리스트 arr에 추가하기 -> 리스트 arr를 대소문자 구분없이 정렬 -> 사전상 가장 앞서는 단어는 정렬된 리스트 arr의 0번째 인덱스이기 때문에 arr[0] 출력!

 

 

 

소스코드

while True:

    n = int(input())

    if n == 0:
        break

    arr = []

    for _ in range(n):
        word = input()
        arr.append(word)

    arr.sort(key=str.lower)
    print(arr[0])
728x90
반응형
LIST