백준 도비의 난독증 테스트

KIMYEONGJUN·2024년 10월 22일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

각 테스트케이스는 정수 n (2 ≤ n ≤ 1000) 으로 시작하며 주어지는 단어의 개수를 뜻한다.
다음 각 n줄은 길이가 최대 20인 단어가 주어지며 대소문자의 구분을 없앴을 때 똑같은 단어는 주어지지 않는다.
마지막 입력은 0이 주어진다.
각 줄에 각 테스트케이스에서 사전상 가장 앞서는 단어를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader와 StringBuilder를 정의해준다.
StringBuilder를 사용하여 결과를 저장한다.
while(true) 루프를 통해 여러 테스트를 해준다.
0이 입력되면 루프를 종료한다.
Integer.parseInt(br.readLine())를 사용하여 첫 번째 줄에서 단어의 개수 N을 읽어온다.
minWord 변수를 null로 초기화하여 첫 번째 단어를 비교할 준비를 한다.
for 루프를 통해 N개의 단어를 입력받고,
compareToIgnoreCase 메소드를 사용하여 대소문자를 무시하고 비교한다.
이 메소드는 두 문자열을 비교하여 사전순으로 어떤 것이 더 앞서는지를 판단한다.
가장 앞서는 단어가 발견되면 minWord를 추가해준다.
모든 단어를 비교한 후,
StringBuilder에 결과를 넣어준다.
모든 테스트 케이스가 끝난 후,
System.out.print(result)로 한 번에 결과를 출력한다.

코드로 구현

package baekjoon.baekjoon_23;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 2204번 문제
public class Main814 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        while(true) {
            int N = Integer.parseInt(br.readLine());
            if(N == 0) {
                break;
            }
            String minWord = null;

            for(int i = 0; i < N; i++) {
                String word = br.readLine();
                if(minWord == null || word.compareToIgnoreCase(minWord) < 0) {
                    minWord = word;
                }
            }
            sb.append(minWord).append("\n");
        }
        System.out.print(sb);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글