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)

 

https://junstar92.tistory.com/26

 

[파이썬/Python] 파이썬 기본 자료형 1(숫자형, 문자열, bool형, None)

파이썬 기본 자료형에 대해서 알아봅시다. 파이썬의 자료형에는 숫자형, 문자열, 부울(bool), 리스트, 튜플(tuple), 집합(set), 사전(dictionary)이 있습니다. [숫자형] 숫자형에는 int(정수형), float(실수형

junstar92.tistory.com

 

 

https://darkpgmr.tistory.com/79

 

[영상 Geometry #3] 2D 변환 (Transformations)

(3D 비전 geometry 3번째 파트 2D 변환입니다) 3. 2D 변환 (2D Transformations) 변환에 대해서는 2D 변환과 3D 변환을 구분해서 설명하겠습니다. 2D 변환은 detection 또는 tracking 문제에 있어서 아래 그림과 같이

darkpgmr.tistory.com

 

+ Recent posts