/ 제출 1 /
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split())
nums = deque([i for i in range(1, n + 1)])
turn = k - 1
yosepus = []
while nums:
if turn > 0:
nums.append(nums.popleft())
turn -= 1
continue
yosepus.append(nums.popleft())
turn = k - 1
print("<" + ", ".join(list(map(str,yosepus))) + ">")
시간 제한이 너무 적어서 혹시 시간 초과나는 풀이일 수 있어 불안해하면서 제출했는데 다행히도 무사히 넘어갔다.
왜냐하면 전체 숫자 배열을 원하는 결과를 얻을 때까지 정말 계속 순회하는 거라 이 문제가 의도한 게 이게 맞나 싶었는데, K와 N의 값이 5000이하이므로 적절하게 넘어간 것 같다.
나에게 나름 신선하고 재밌었던 문제라서 다른 분들의 풀이가 기대된다.
사실 뭔가 다른 문제 풀었을 때 봤던 풀이가 있는데 정답 맞추기였나.. 배열에서 원하는 부분 뽑을 때 % 연산자로 푸는 방식이 있었는데 그 때 덜 이해했었었는지 어떻게 해봐야할 지 감이 안 잡혔다. 이런 식으로 하면 시간 단축을 더 할 수 있지 않을까 싶은데.. 누군가 이런 풀이법으로 풀었다면 좋을텐데.
/ 다른 분들 풀이 /
from collections import deque
n,k=map(int,input().split())
q=deque([i for i in range(1,n+1)])
a=[]
for i in range(n):
q.rotate(-k+1)
a.append(q.popleft())
print('<'+', '.join(map(str,a))+'>')
: rotate() ..? 호오.. 어색하다.
n,k = map(int,input().split())
a = list(range(1,n+1))
b= []
c = 0
for i in range(n):
c+=(k-1)
if c >= len(a):
c %= len(a)
b.append(str(a[c]))
a.remove(a[c])
print("<",', '.join(b),">",sep='')
아까 언급한 %사용한 풀이 찾았다. 확실히 어색한 것이.. 내 사고방식이랑 조금 다르다. 이해하고 소화해보자 그래도.
( 이 분 근데.. 배열이나 변수 이름을 a,b,c로 지으셔서 짧은 코드인데도 헷갈린다. )
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ BOJ / 파이썬 ] 1874 스택 수열 (0) | 2022.08.13 |
---|---|
[ BOJ / 파이썬 ] 10773 제로 (0) | 2022.08.13 |
[ BOJ / 파이썬 ] 1406 에디터 (0) | 2022.08.11 |
[ BOJ / 파이썬 ] 5397 키로거 (0) | 2022.08.11 |
[ BOJ / 파이썬 ] 3273 두 수의 합 (0) | 2022.08.11 |