https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
주어진 n이라는 숫자를 맨 아래에서 1부터 w까지 오른쪽으로 배열한후 한칸 위로 올라가서 다시 오른쪽으로 w만큼 간다 지그재그로 올라간다. 문제에서 주어진 num숫자를 빼려면 위에서 몇번 빼야 하는가가 문제이다.
맨먼저 무식하게 실째 리스트에 배열해준다 짝수리스트는 reverser해준다. 이건 당연히 시간초과다
def solution(n, w, num):
answer = 0
mylist = [[x+y*w if x+y*w <= n else 0 for x in range(1,w+1) ]for y in range((n-1)//w+1) ]
for i in range(1,n//w+1,2):
mylist[i].reverse()
print(mylist)
row = (num-1)//w
col = (num-1)%w if row%2 == 0 else w - (num-1)%w -1
print(row, col)
answer = 0
for v in range(row,n//w+1):
if mylist[v][col]>0:
answer += 1;
return answer
solution(13,3,6)
이건 리스트를 안만들고 row clum을 이용해 위치를 계산한다. 홀수와 짝수번은 리버스되는걸 생각한다.
num에 해당하는 row와 coulm을 구하고 row colum을 이용해 위치를 계산하는데 홀짝수를 구분해서 계산하고 n보다 작다면 row와 answer를 하나씩 증가해주다.
def solution(n, w, num):
answer = 0
row = (num-1)//w
col = (num-1)%w if row%2 == 0 else w - (num-1)%w -1
while(row<(n+w-1)//w):
aboveBox = col+(row*w) if (row%2==0) else (w-1-col)+(row*w)
if(aboveBox<n):
answer+=1
row +=1
return answer
이게 제일 간결한데 홀짝을 계산안하고 num를 w로 나누고 나머지를 w에서 빼주면 이동할거리가 되고 이걸 2배해주면 위에까지 이동거리가 된다. 이렇게 num을 계산하다가 n이 넘어가면 멈추면 된다.
def solution(n, w, num):
answer = 0
while True:
num += 2 * (w - num % w) + 1 if num % w != 0 else 1
answer += 1
if (num > n): return answer
solution(22,6,8)
'코딩테스트' 카테고리의 다른 글
프로그래머스 석유시추 (0) | 2024.06.26 |
---|---|
프로그래머스 코테 181188 요격 시스템 Lv1 (0) | 2024.06.24 |
프로그래머스 코테 155652 둘만의 암호 Lv1 (0) | 2024.06.24 |
프로그래머스 외계어 사전 (0) | 2024.06.22 |
프로그래머스 코테 연습문제 공원 산책 176963 (0) | 2024.06.21 |