
좀 불친절한 문제이다. 예외를 설명해주지 않았다. 그리고 !가 나오는 조건도 너무 애매하게 적혀있고.. 문제자체는 크게 어렵지 않다.
! 가 출력되는 조건은 아래와 같다.
1. 룰렛이 제대로 생기지 않았을때 -> 0번칸에 A도 들어있고 B도 들어있다 -> 말이 안됨 -> ! 출력
2. 룰렛에 중복된 알파벳이 있을때 -> 0번칸에 A, 1번칸에도 A -> 중복이라서 안됨 -> ! 출력
위 조건만 유의해서 코드를 짜면된다.. !의 조건을 이해하는데 너무 오랜 시간을 썼다;;
행운의 룰렛(HONITAVR)이 아니면 !를 출력해야한다고 적혀있는데, 굳이 그런 조건을 주지 않아도 통과하더라..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ2840 {
public static int checkAlphaValid(char[] charArr, int N){ // 알파벳 중복 체크 함수
int i, j;
for(i=0;i<N;i++){
for(j=i+1;j<N;j++)
if(charArr[i] != '?')
if(charArr[i] == charArr[j])
return 0;
}
return 1;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N, K, S, i, idx = 0, flag = 1;
char tmp;
String str;
StringTokenizer st;
str = br.readLine();
st = new StringTokenizer(str);
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
char[] charArr = new char[N];
for(i=0;i<K;i++){
str = br.readLine();
st = new StringTokenizer(str);
S = Integer.parseInt(st.nextToken());
tmp = st.nextToken().charAt(0);
// 1. 배열 idx 확인, 2. 비었는지 확인
if(idx + S >= N)
idx = (idx + S) % N;
else
idx += S;
if(charArr[idx] == '\u0000') // 해당 자리가 비어있을때
charArr[idx] = tmp;
else if(charArr[idx] != tmp) // 비어있지는 않은데 다른 알파벳일때
flag = 0;
}
// 빈 자리 ? 로 바꾸기
for(i=0;i<N;i++)
if(charArr[i] == '\u0000')
charArr[i] = '?';
// 중복 알파벳 체크
if(flag != 0)
flag = checkAlphaValid(charArr, N);
// 결과 출력
if(flag == 0) // 같은 칸에 다른 알파벳인 경우 or 중복 알파벳 있는 경우
System.out.println("!");
else{ // 행운의 바퀴가 있거나 제대로된 룰렛인 경우
for(i=0;i<N;i++)
if(idx - i >= 0)
System.out.print(charArr[idx - i]);
else
System.out.print(charArr[idx - i + N]);
System.out.println();
}
}
}
출력시에, 마지막 위치부터 시계방향은 배열을 거꾸로 출력해주는 것이다. 반례랑 결과값을 보고 그대로 나오게 조건을 좀 주면 된다..
'코딩가딩가' 카테고리의 다른 글
| [JAVA]BOJ 10814, 나이순 정렬 (0) | 2024.07.24 |
|---|---|
| [JAVA]BOJ 1181, 단어 정렬 (1) | 2024.07.24 |
| [JAVA]BOJ 10250, ACM 호텔 (0) | 2024.07.17 |
| [JAVA]BOJ 3058, 짝수를 찾아라 (0) | 2024.07.17 |
| [JAVA]BOJ 11068, 회문인 수 (0) | 2024.07.17 |