BOJ_2840_행운의바퀴_JAVA
문제 : 행운의바퀴
링크 : BOJ_2840_행운의바퀴
접근 방식
원형으로 되어있는 배열에 값을 집어넣는다고 생각하면 이해가 조금 더 쉬울듯 싶다.
배열의 시작을 0으로 하고, 주어진 값만큼 index를 증가시켜가면서 주어진 값을 배열에 넣는다. 다만, 배열의 범위를 벗어나면 다시 0부터 시작하도록 해야한다.
모든 값의 입력이 끝나면, 마지막으로 입력된 배열의 index에서 배열의 크기만큼 index값을 1씩 줄여주면서 배열을 출력하면 된다. 배열의값이 0보다 작아지면 배열의 크기 - 1으로 index를 바꿔준다.
풀이 방법
-
배열의 크기(N)와 바퀴를 돌리는 횟수(K)를 읽어와 각각 변수에 저장한다.
-
타입은 char, N 크기의 1차원 배열을 생성하고, 사용한 알파벳을 체크하기 위한 ArrayList를 하나 생성한다.
-
배열의 초기값을 ‘?’으로 초기화해준다.
-
K만큼 반복하는데, 배열의 시작지점부터, 주어진 값만큼 index를 증가시킨다. 여기에 %N, N으로 나머지연산을 해주어, 배열의 값이 넘어설 경우 다시 0부터 증가하도록 한다.
-
한 자리에 1개의 알파벳만 들어있지 않거나 2개 이상의 자리에 같은 알파벳이 있으면 ‘!’를 출력하고 프로그램을 종료한다.
-
위의 조건에서 종료되지 않았다면, 인덱스 값에 해당하는 배열에 주어진 알파벳을 저장한다.
-
모든 반복이 종료된 후, 배열의 크기만큼 반복하는데, 마지막으로 저장되어있는 index값부터 -1씩 시켜주면서 출력한다. 배열의 범위가 0보다 작아질 경우, index를 N-1로 바꾸어준뒤 다시 -1씩 시켜준다.
소스 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class BOJ_2840_행운의바퀴 {
public static void main(String[] args) throws NumberFormatException, IOException {
// 버퍼드리더로 값 읽어오기
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
char arr[] = new char[N];
ArrayList<Character> alpList = new ArrayList<>();
// 초기값 '?'으로 초기화
for(int i=0;i<N;i++) {
arr[i] = '?';
}
// 값을 증가시켜가면서 집어넣고, 모두 집어넣은 뒤에는 값을 1씩 빼면서 출력하면 될 것 같다.
int start = 0;
for(int i=0;i<K;i++) {
st = new StringTokenizer(in.readLine()," ");
int move = Integer.parseInt(st.nextToken());
start = (start + move )%N;
char alp = st.nextToken().charAt(0);
if(alpList.contains(alp) && arr[start] != alp) {
System.out.println("!");
return;
}
alpList.add(alp);
// System.out.println(start+":"+alp);
if(arr[start] == '?' || arr[start] == alp) {
arr[start] = alp;
}else {
System.out.println('!');
return;
}
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<N;i++) {
sb.append(arr[start]);
start--;
if(start < 0) {
start = N-1;
}
}
System.out.println(sb);
}
}