문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 2713 자바 - 규현이의 사랑을 담은 문자메시지 (boj 2713 java) (0) | 2022.03.29 |
---|---|
백준 14405 자바, 파이썬 - 피카츄 (boj 14405 java, python) (0) | 2022.03.29 |
백준 9342 자바 - 염색체 (boj 9342 java) (0) | 2022.03.28 |
백준 14381 자바 - 숫자세는 양 (Small) (boj 14381 java) (0) | 2022.03.27 |
백준 16955 자바 - 오목, 이길 수 있을까? (boj 16955 java) (0) | 2022.03.26 |
댓글