728x90
300x250
https://www.acmicpc.net/problem/2840
문제 자체는 쉬웠으나 여러 예외처리 조건이 많았던 문제.
글을 대충읽을수록 난관에 부딪힌다..ㅋ
알고리즘은 이렇게 지문이 길수록 쉬운것 같다. 말하는대로만 구현하면 되니깐...
1트에서 글자가 몇번바뀌는지 배열적으로 고려를 안했고,
2트에서 바퀴에 같은 글자가 두번이상 등장하지 않는다는 조건을 무시해서 틀렸었다.
3트만에 성공.ㅋ
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//System.setIn(new FileInputStream("Test.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
char wheel[] = new char[N];
int cur = 0; //현재 바퀴가 가리키고 있는 위치
//바퀴 돌리기
for (int i = 0; i < K; i++) {
st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken());
char ch = st.nextToken().charAt(0);
//배열을 벗어나면 그만큼 빼주기 (0부터 시작)
cur = cur+S >=N ? (cur+S)%N : cur+S;
//행운의 바퀴가 없다면 종료, (이미 그 자리에 다른 알파벳이 있어서 중복된다면)
if(wheel[cur] != 0 && wheel[cur] != ch) {
System.out.println("!");
return;
}
wheel[cur]=ch;
}
//출력
String res = "";
for (int i = cur; i >= 0; i--) {
if(wheel[i] == 0) {
res+="?";
} else if(res.contains(Character.toString(wheel[i]))) { //바퀴에 같은 글자는 두번이상 등장하지 않는다.
System.out.println("!");
return;
}
else {
res+=wheel[i];
}
}
for (int i = N-1; i > cur; i--) {
if(wheel[i] == 0) {
res+="?";
} else if(res.contains(Character.toString(wheel[i]))) { //바퀴에 같은 글자는 두번이상 등장하지 않는다.
System.out.println("!");
return;
}
else {
res+=wheel[i];
}
}
System.out.println(res);
}
}
728x90
'알고리즘 > 그 외' 카테고리의 다른 글
백준 10814번: 나이순 정렬 [정렬] -Java (0) | 2023.07.12 |
---|---|
백준 2817번: ALPS식 투표 - [구현][정렬] (0) | 2023.06.16 |
백준 1730번: 판화 [구현][시뮬레이션]-Java (0) | 2023.06.12 |
백준 10250번: ACM 호텔 [구현][탐색][시뮬레이션] - Java (0) | 2023.05.22 |
[알고리즘] 시간복잡도 logN, N*logN 이해하기 (스크랩) (0) | 2023.04.25 |