본문 바로가기
Study or Lecture/항해 99클럽 코딩테스트 스터디

항해 99클럽 코딩테스트 스터디 9일차 TIL (비기너)

by yoondoo 2024. 11. 6.
728x90

 

<오늘의 학습 키워드>

 

<오늘의 문제>

제목 : 백준 / 브론즈1 /  9933번 민균이의 비밀번호

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

<풀이>

정답은 더보기

더보기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {

    private static Map<String,String> stringMap = new HashMap<>();

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        String answer = "";

        for (int i = 0; i < N; i++) {
            String str = br.readLine();

            if (isPalindrome(str)) {
                answer = getMiddleWord(str);

                break;
            } else {
                String reversed = new StringBuilder(str).reverse().toString();
                if (stringMap.containsKey(reversed)) {
                    answer = getMiddleWord(str);
                    break;
                }
                stringMap.put(str, "");
            }
        }

        System.out.println(answer);
    }

    public static boolean isPalindrome (String str) {
        boolean answer = true;

        for (int i = 0, j = str.length() -1; i < str.length()/2; i++, j--) {
            if (str.charAt(i) != str.charAt(j)) {
                answer = false;
                break;
            }
        }

        return answer;
    }

    public static String getMiddleWord(String str) {
        return  str.length()+ " " +str.charAt(str.length()/2);

    }
}

 

- 입력 받는 문자열이 팰린드롬인지 먼저 확인하고 맞다면 정답을 출력

- 입력 받은 문자열이 팰린드롬이 아니면 먼저 뒤집어서 map에 있는지 없는지 확인한다.

- map에 있으면 정답을 출력

- map에 없으면 map에 넣는다.

 

<결론, 주의할점>

왜인지 모르겠으나 입력예제 중에서 팰린드롬이 없는 경우의 입력이 마지막 문자열을 입력받지 못했다.

 

원래 코드는 아래

더보기
for (int i = 0; i < N; i++) {
    StringBuilder str = new StringBuilder(br.readLine());

    if (isPalindrome(str.toString())) {
        answer = getMiddleWord(str.toString());
        matched = true;
        break;
    } else {
        stringMap.put(str, "");
    }
}

바꾼 코드는 아래

더보기
for (int i = 0; i < N; i++) {
    String str = br.readLine();

    if (isPalindrome(str)) {
        answer = getMiddleWord(str);
       
        break;
    } else {
        String reversed = new StringBuilder(str).reverse().toString();
        if (stringMap.containsKey(reversed)) {
            answer = getMiddleWord(str);
            break;
        }
        stringMap.put(str, "");
    }
}

 

 

반응형

댓글