티스토리 뷰
🚀접근하기
문제 이해하는데 시간이 꽤나 걸렸다.... 예제 입력에서 바퀴를 회전시켰을 때 화살표가 가리키는 글자가 몇 번 바뀌었는지를 나타내는 S와 회전을 멈추었을 때 가리키던 글자가 주어진다고 나와있는데, 이게 무슨 말인지 이해가 잘 안가서 직접 그려봤는데

예제 입력 2를 예로 들면 처음 A에서 회전을 멈추고, A로부터 2번 뒤에 B, B로부터 5번 뒤에 다시 B, B로부터 1번 뒤에 C, C로부터 2번 뒤에 A, A로부터 2번 뒤에 B 이렇게 행운의 바퀴에 넣어준 뒤에 마지막에 시계 방향으로 출력해주면 된다.
코드 작성에서 유의해야 할 점은 여러가지의 조건이 있다는 건데, 먼저 첫번 째 조건은
1. 이미 알파벳이 존재하는 곳에 다른 알파벳을 넣으려고 하면 안된다. (그러나 이미 존재하는 알파벳과 넣으려는 알파벳이 같다면 통과)
2. 바퀴에 같은 글자는 두 번 이상 등장하면 안된다.
이 두 가지의 조건을 고려하여 두 가지의 조건을 모두 만족하는 행운의 바퀴를 출력해주면 된다.
🎉코드
N, K = map(int, (input().split(" ")))
d1 = ['?']*N
num = 0
wheel = True
for i in range(K):
S, alpha = input().split(" ")
S = int(S)
num = (num + S) % N
if d1[num] != '?': # 이미 알파벳이 존재하는 자리에 다시 넣으려고 할 때
if d1[num] != alpha:
check = False
break
else: # 그러나 이미 존재하는 알파벳과 넣을 알파벳이 같다면 통과
d1[num] = alpha
else:
d1[num] = alpha
for i in range(N): #바퀴에 같은 글자는 두 번 이상 등장하지 않는다는 조건
if d1[i] != '?':
for j in range(i+1, N):
if d1[i] == d1[j]:
wheel = False
if wheel: #유효한 행운의 바퀴이면 (같은 글자 두 번 이상 X, 이미 알파벳이 존재하는 곳에 다른 알파벳을 넣으려는 경우 X)
for i in range(N):
print(d1[num % N] , end='')
if(num >= 0):
num -= 1
else:
num += N-1
else:
print('!')
일단 d1 이라는 배열을 만들어주고, num = (num + S) % N 이라는 식을 사용하여 원형 리스트의 역할을 할 수 있도록 했다.
위에서 적은 조건들을 만족할 수 있도록 if, else 문으로 조건식을 작성해주었고, 행운의 바퀴가 만들어지지 못하는 조건 즉 이미 알파벳이 존재하는 자리에 다시 넣으려고 할 때 (이미 존재하는 알파벳과 넣으려는 알파벳이 같은 경우 제외), 바퀴에 같은 글자가 두 번 이상 등장할 때엔 wheel = False 라고 해주어 나중에 wheel 이 True인 경우에만 알파벳들이 출력이 되고, wheel = False일 경우 '!'이 출력되도록 해주었다.
그리고 시계 방향으로 알파벳을 출력해주기 위해선 배열에서 인덱스가 -1씩 감소하며 출력이 되어야 했다.
따라서 num이 0 이상일 때는 num 값을 -1씩 감소시켜주고, 0 보다 작을 때는 N-1을 더한, 즉 배열의 마지막 인덱스를 출력해주도록 조건을 작성해주었다.
💪다짐
'알고리즘' 카테고리의 다른 글
백준 파이썬 1912번 연속합 (2) | 2023.11.14 |
---|---|
백준 파이썬 11656번 접미사배열 (1) | 2023.11.12 |
백준 파이썬 1074 Z (0) | 2023.09.26 |
백준 파이썬 2193 이친수 (1) | 2023.09.19 |
백준 파이썬 2579 계단 오르기 (0) | 2023.09.19 |
- Total
- Today
- Yesterday
- 북마크
- 커뮤니티
- SQL 레벨업
- 지연로딩
- 로깅
- 자바
- 웹MVC
- SQL
- SQLD
- 회원탈퇴
- 웹 MVC
- 백준 파이썬
- 자바 스프링
- JPA
- 로그아웃
- 준영속
- EnumType.ORDINAL
- 백준
- 스프링 북마크
- 프론트엔드
- DP
- 인텔리제이
- elasticsearch
- 스프링
- 비영속
- 스프링 커뮤니티
- 스프링부트
- 다이나믹 프로그래밍
- 파이썬
- 영속
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |