6번 틀리고 겨우 맞았다. 좀 바보같이 생각해서 틀렸는데, 우선 예외조건은
1) 다른 위치에 알파벳이 중복해서 들어오면 안됨
2) 같은 위치에 알파벳이 중복해서 들어오면 안됨
이렇게 2가지이다.
예를 들어
1)의 경우 arr[5]=A가 존재한다고 할 때, 룰렛을 돌려 새롭게 들어온 알파벳과 위치가 arr[3]=A에 해당된다면
알파벳 A는 3과 5의 위치에 중복되어 존재하므로 행운의 바퀴가 아니다.
2)의 경우 arr[5]=A가 존재한다고 할 때, 룰렛을 돌려 새롭게 들어온 알파벳과 위치가 arr[5]=B에 해당된다면
arr[5]에는 A와 B가 두개가 존재하므로 행운의 바퀴가 아니다.
이렇게 생각하면 된다.
예외조건은 빨리 알아차렸는데 바보같이 반례로
4 4
4 A
4 A
4 A
4 A
가 입력으로 들어온다고 하면, 같은 위치에 같은 문자가 들어오는 것이므로 A???를 출력해주면 되는데 별 생각없이 1)과 2)를 섞어서 같은 위치+다른 문자=틀렸다 이렇게 생각하고 코드를 잘못 짰다.. 내 시간..
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Arrays;
public class Main{
static int[] alp = new int[26]; // 알파벳이 중복해서 들어오는지 확인하는 용도임
static boolean flag; // 1) 알파벳 중복해서 들어옴 2) 같은 위치에 다른 문자 들어옴
static char[] arr;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine(), " ");
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
arr = new char[n];
Arrays.fill(arr,'?');
Arrays.fill(alp,-1);
// 바퀴 돌림
int idx=0, cnt=0; char temp;
for(int i=0; i<k; i++){
st = new StringTokenizer(br.readLine(), " ");
cnt = Integer.parseInt(st.nextToken());
temp = st.nextToken().charAt(0);
cnt %= n;
if(idx-cnt<0) idx = (idx-cnt)+n;
else idx -= cnt;
// 아직 중복된 알파벳이 없고 해당 위치에 알파벳이 안 들어왔다면
if(alp[temp-'A']==-1 && arr[idx]=='?') {
alp[temp-'A']=idx; // 현재 알파벳은 어떤 위치에 존재하는지 ex) arr[A]=5;
arr[idx] = temp; // 문자 저장
}
// 이미 한번 나왔던 문자가 또 나왔네 -> 같은 위치인지 다른 위치인지 확인하기
// ex) arr[A]=5 인데 cnt=3, temp=A임-> 같은 문자 다른 위치이므로 조건 위반
else if(alp[temp-'A']!=-1){
// 다른 위치다 -> 중복된거니까 틀림
if(alp[temp-'A']!=idx)
flag = true;
}
// 현재 위치에 이미 존재하고 있던 문자 != 새로 들어온 문자 -> 중복된거니까 ?처리
// ex) arr[5]='A' 인데 cnt=5, temp='B'가 들어옴 -> 같은 위치 다른 문자니까 틀림
else if(arr[idx]!=temp){
flag = true;
}
}
StringBuilder sb = new StringBuilder();
if(flag) sb.append('!');
else {
for(int i=0; i<n; i++){
sb.append(arr[(idx+i)%n]);
}
}
System.out.println(sb);
}
}
|
cs |
'백준 1 > 기타' 카테고리의 다른 글
| [백준 1780] 종이의 개수 (C++/Python) (0) | 2023.07.13 |
|---|---|
| [백준 1758] 알바생 강호 (Java) (0) | 2021.01.13 |
| [백준 5397] 키로거 (Java) (0) | 2021.01.11 |
| [백준 3273] 두 수의 합 (Java / Python) (0) | 2021.01.10 |
| [백준 10814] 나이순 정렬 (Java) (0) | 2020.12.17 |