파게로그
[백준 2840번] 행운의 바퀴 본문
문제 링크: 2840번 행운의 바퀴
https://www.acmicpc.net/problem/2840
크기가 n인 배열을 선언하고 rot번 돌렸을 때 해당 위치에 문자를 삽입해주며,
%을 이용해서 맨 뒤 칸 다음 맨 앞 칸이 나올 수 있도록 한다.
실제로는 환형이므로 arrow의 초기값은 0이 아니라도 관계없다.
상덕이가 적어놓은 종이에 해당하는 행운의 바퀴가 없는 경우는 다음과 같다.
① 같은 칸에 다른 문자가 등장할 경우 → 비어있지 않은 칸일 경우 체크
② 이미 등장한 문자가 다른 위치에 등장할 경우 → discover[] 배열로 해결
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] nm = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int n = nm[0];
int k = nm[1];
char[] wheel = new char[n]; // 바퀴
Arrays.fill(wheel, '?');
int arrow = 0; // 화살표
boolean[] discover = new boolean['Z'-'A'+1];
boolean possible = true;
for (int i = 0; i < k; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int rot = Integer.parseInt(st.nextToken());
char alpha = st.nextToken().charAt(0);
arrow = (arrow + rot) % n;
if (wheel[arrow] != '?' && wheel[arrow] != alpha || wheel[arrow] != alpha && discover[alpha-'A']) {
possible = false;
break;
}
wheel[arrow] = alpha;
discover[alpha-'A'] = true;
}
if (possible) {
StringBuilder answer = new StringBuilder();
int t = arrow;
for (int i = 0; i < n; i++) {
t = arrow - i;
if (t < 0) t += n;
answer.append(wheel[t]);
}
System.out.print(answer);
} else {
System.out.print('!');
}
}
}
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[백준 20206번] 푸앙이가 길을 건너간 이유 (0) | 2021.04.13 |
---|---|
[백준 2346번] 풍선 터뜨리기 (0) | 2021.04.13 |
[백준 17413번] 단어 뒤집기 2 (0) | 2021.04.08 |
[백준 12015번] LIS(최장 증가 부분 수열) 이분탐색 (0) | 2021.04.07 |
[백준 11053번] LIS(최장 증가 부분 수열) DP (0) | 2021.04.07 |
Comments