컴퓨터공학 💻 도서관📚
백준 2840번 행운의 바퀴 본문
내가 놓쳤던 부분들
돌림판이 2, 3, .. N바퀴 돌아간 경우
이미 채워진 문자가 다른 칸에 또 들어가면 안 된다
1) 내가 푼 방식 + % 을 활용한 더 쉬운 출력
N, K = map(int, input().split())
arr = ['?'] * N
check = False
ind = 0
for i in range(K):
S, char = map(str, input().split())
ind = (ind + int(S)) % N // 돌림판이 2, 3, .. N바퀴 돌아간 경우 대비
if arr[ind] == '?':
if char in arr: // 이미 채워진 문자가 다른 칸에 또 들어가면 안 된다
check = True
print('!')
break
arr[ind] = char
elif arr[ind] != char:
check = True
print('!')
break
if not check:
for i in range(N):
print(arr[(ind - i) % N], end='') // %을 활용한 출력 방법
2) 내가 푼 방식
N, K = map(int, input().split())
arr = ['?'] * N
check = False
ind = 0
for i in range(K):
S, char = map(str, input().split())
ind = (ind + int(S)) % N
if arr[ind] == '?':
if char in arr:
check = True
print('!')
break
arr[ind] = char
elif arr[ind] != char:
check = True
print('!')
break
if check == False:
tmp=0
ans = ['?'] * N
for i in range(ind, -1, -1):
ans[tmp] = arr[i]
tmp += 1
for j in range(N - 1, ind, -1):
ans[tmp] = arr[j]
tmp += 1
print(''.join(ans))
3) 다른 사람이 푼 방식 : 파이썬에 특화된 방법
n, k = map(int, input().split())
circle = ['?'] * n
for i in range(k):
spin = input().split()
s = int(spin[0])% n
s_char = str(spin[1])
circle = circle[-s:] + circle[:-s]
if circle[0] == '?':
if s_char in circle:
print('!')
break
circle[0] = s_char
elif circle[0] == s_char:
continue
else:
print('!')
break
else:
print("".join(circle))
자바 버전
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
char[] arr = new char[N];
Arrays.fill(arr, '?');
boolean check = false;
int ind = 0;
for (int i = 0; i < K; i++) {
int S = sc.nextInt();
char ch = sc.next().charAt(0);
ind = (ind + S) % N; // 돌림판이 2, 3, ... N바퀴 돌아간 경우 대비
if (arr[ind] == '?') {
for (char c : arr) { // 이미 다른 칸에 같은 문자가 들어가 있는지 확인
if (c == ch) {
check = true;
System.out.println("!");
break;
}
}
arr[ind] = ch;
} else if (arr[ind] != ch) {
check = true;
System.out.println("!");
break;
}
}
if (!check) {
for (int i = 0; i < N; i++) {
System.out.print(arr[(ind - i + N) % N]); // %을 활용한 출력 방법
}
}
}
}
'💣😝알고리즘 문제(CAM) > 합체' 카테고리의 다른 글
백준 1010번 다리 놓기 (0) | 2025.05.15 |
---|
Comments