[ 백준 ] 9519 졸려

codesver·2023년 7월 11일
0

Baekjoon

목록 보기
40/72
post-thumbnail

📌 Problem

눈을 깜빡일 때마다 문자열이 변한다. 변하는 방법은 다음과 같다.

1. 문자열이 같은 길이로 나뉜다. (홀수 길이이면 뒤의 문자열이 1 짧다.)
2. 뒤의 문자열이 역순으로 앞의 문자열 사이사이에 추가된다.
Ex) abcdefg → abcd / efg → agbfced

X번 눈을 깜빡일 때 최종 문자열을 출력하면 된다.

📌 Solution

문자열의 변환 방법으로 역순으로 진행하면 된다.

1. 홀수 번째 문자들이 앞으로 압축된다. abcde → ace...
2. 짝수 번째 문자들은 뒤로 압축된다. 이때 순서가 뒤집힌다. abcde → ...db
Ex) abcdefg → acegfdb

문자열을 변환하다가 N번째 변환에서 첫번째 문자열과 같아지면 N을 주기로 문자열 변환이 반복된다는 것이다. 이를 통해 더 빠르게 문제를 해결할 수 있다.

📌 Code

Map<Integer, String> map = new HashMap<>();
int X = Integer.parseInt(reader.readLine());
String string = reader.readLine();
map.put(0, string);
for (int x = 1; x <= X; x++) {
    StringBuilder pre = new StringBuilder();
    for (int i = 0; i < string.length(); i += 2) pre.append(string.charAt(i));
    StringBuilder post = new StringBuilder();
    for (int i = 1; i < string.length(); i += 2) post.append(string.charAt(i));
    string = pre.append(post.reverse()).toString();
    if (map.get(0).equals(string)) {
        string = map.get(X % x);
        break;
    }
    map.put(x, string);
}
result.append(string);
profile
Hello, Devs!

0개의 댓글