백준#1158 요세푸스 문제

정은경·2020년 3월 8일
0

알고리즘

목록 보기
51/125

문제

나의 풀이

N, K = map(int, input().split())
data_list = [i for i in range(1, N+1)]

rlt = []
count = 0
where = (K - 1)

for i in range(N):
    if len(data_list) > where:
        rlt.append(data_list.pop(where))
        where += (K - 1)
    else:
        where = where%len(data_list) # 이 부분이 핵심!
        rlt.append(data_list.pop(where))
        where += K-1

print("<", end='')
for i in range(0,(len(rlt)-1)):
    print(rlt[i], end=', ')
print(rlt[-1], end=">")

남의 풀이

#입력
N, K = map(int, input().split())
josephus = [i for i in range(1, N + 1)]
result = []
temp = K - 1


for i in range(N):
    if len(josephus) > temp: #위치가 리스트를 넘지 않은 경우
        result.append(josephus.pop(temp)) #답 추가
        temp += K - 1 #다음 위치로 이동
        
    elif len(josephus) <= temp: #위치가 리스트를 넘은 경우
        temp = temp % len(josephus)
        result.append(josephus.pop(temp))
        temp += K - 1

#출력
print("<", end='')
for i in result:
    if i == result[-1]:
        print(i, end = '')
    else:
        print("%s, " %(i), end='')
print(">")
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글