C++

[백준 알고리즘] 2204번 : 도비의 난독증 테스트, c++

2022. 3. 21. 18:35

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

 

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

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

www.acmicpc.net

c++로 백준 알고리즘 2204번 문제를 풀어보겠다.

 

 

 

 

 

문제

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

하지만 인성이 좋지 않은 꿍은 사실 그러고 싶지 않았기 때문에 대소문자를 마구 섞어가며 단어들을 제시했다. 예를 들어, apPle은 Bat보다 앞서지만 AnT보다는 뒤에 있는 단어다.

도비에게 희망은 여러분뿐이다! 여러분이 도비에게 자유를 선물해주도록 하자!

입력

각 테스트케이스는 정수 n (2 ≤ n ≤ 1000) 으로 시작하며 주어지는 단어의 개수를 뜻한다.

다음 각 n줄은 길이가 최대 20인 단어가 주어지며 대소문자의 구분을 없앴을 때 똑같은 단어는 주어지지 않는다.

마지막 입력은 0이 주어진다.

출력

각 줄에 각 테스트케이스에서 사전상 가장 앞서는 단어를 출력한다.

예제 입력 1 복사

3
Cat
fat
bAt
4
call
ball
All
Hall
0

예제 출력 1 복사

bAt
All

 

 

 

 

<문제 풀이>

1. while문을 반복한다. 

 

- while 반복문 코드 내용 -

n을 입력받는다.

입력받은 n이 0이라면 반복문을 종료한다.

첫번째 문자열 str을 입력받는다.

for문을 n-1번 반복하며 새로운 문자열 newstr을 입력받아 기존의 문자열 str과 비교해 더 앞에 오는 문자열을 str에 저장한다.

     (만약 j==newstr.length()-1로 중간에 멈추지 않고 마지막 반복문까지 돌고 있고 그 마지막 문자끼리도 서로 같다면,        str과 newstr의 길이를 비교해 더 짧은 문자열을 str로 정해주어야한다.)

     (str과 newstr의 같은 위치에 있는 문자끼리 비교해

      str의 문자의 값이 더 크면 str에 newstr을 저장하고 for문을 중단하고,

      newstr의 문자의 값이 더 크면 그냥 for문을 중단하고,

      문자가 같으면 계속 반복문을 진행하도록 한다.)

최종적으로 계산한 가장 앞에 오는 문자열 str을 출력한다.

다시 while문을 반복한다.

 

 

 

 

이 문제에서 중요한 것 :

j==newstr.length()-1로 마지막 반복문을 돌고 있을 때 조건을 따로 설정해 주어야 했다.

 

 

 

 

코드는 다음과 같다.