본문 바로가기
PS/BOJ

백준 5698 자바 - Tautogram (boj 5698 java)

by Nahwasa 2022. 3. 28.

문제 : boj5698

 

  원랜 브론즈는 해설을 작성하지 않으려 했으나, 블로그 유입인원 늘릴려면 아무래도 골플 문제보단 브론즈 문제가 더 이득인 것 같다.

 

  문자열을 잘라내는 방법만 안다면 풀 수 있다. 자바의 경우 String에 대한 split함수 또는 StringTokenizer를 사용해서 자를 수 있는데, 결론적으로 후자가 더 빠르다. 이제 자를수만 있다면, 모든 잘라진 토큰에 대해 첫 character만 확인하면 된다. String에 대해 charAt(0)을 하면 첫 번째 character가 나온다. 이 때 소문자 혹은 대문자로 맞춰서 확인하는 것이 좋을 것이다. 그럼 해당 String에 대해 toLowerCase 후에 charAt(0) 으로 보면 바로 소문자가 나온다. 하지만 당연히 더 느리다. 따라서 charAt(0) 후에, 대문자라면 소문자로 변경해주자. 해당 코드는 if (tmp>='A' && tmp <='Z') tmp -= 'Z'-'z'; 와 같다.

 

 

  정리하자면 띄어쓰기를 기준으로 문자열을 자르고, 각 문자열의 첫 번째 Character를 소문자로 바꿔서 비교할 때 한 번이라도 다른 문자가 나왔다면 'N', 모두 동일하다면 'Y'가 된다. 이걸 '*'이 나올 때 까지 해주면 된다.

 

 

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = "";
        StringBuilder sb = new StringBuilder();
        while (!(s = br.readLine()).equals("*")) {
            StringTokenizer st = new StringTokenizer(s);
            char c = st.nextToken().charAt(0);
            if (c>='A' && c <='Z') c -= 'Z'-'z';
            boolean chk = true;
            while (st.hasMoreTokens()) {
                char tmp = st.nextToken().charAt(0);
                if (tmp>='A' && tmp <='Z') tmp -= 'Z'-'z';
                if (tmp != c) {
                    chk = false;
                    break;
                }
            }
            sb.append(chk?'Y':'N').append('\n');
        }
        System.out.print(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글