본문 바로가기

알고리즘

프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/87390

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

def solution(n, left, right):
    arr = []
    for i in range(left,right + 1):
        a = i // n # 첫번째 자리수
        b = i % n
        if a >= b:
            arr.append(a + 1)
        else:
            arr.append(b + 1)
    return arr

 

문제는 약 1시간동안 고민했었다.

코드가 너무 쉬운거 같아서 다른 사람들의 코드를 봤었는데 모두 비슷했다.

 

우선 입출력 예(n=2, left = 2, right = 5)로 설명하겠다

 

0,0부터 2,2까지 쭉 나열하자면,

0,0 0,1 0,2

1,0 1,1 1,2

2,0 2,1 2,2

이것을 n만큼 잘라서 나열하자면 

0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2

이를 각 자리수에 들어갈 숫자로 표현하면

0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2

1,2,3,2,2,3,3,3,3

규칙이 보이지 않은가?

예를들어 2,1을 보자.

2와 1중에 큰 수인 2는 3에서 -1이다

또 0,1 둘 중에서 더 큰 1은 2에서 -1이다

즉 자리의 인덱스를 구하고 비교해 더 큰 수를 넣는것이 핵심이다.

 

그럼 자리 인덱스를 어떻게 구하냐.

여기서 많이 고민했었다.

그러다 우연히 나눗셈과 나머지를 구하게 되었고 이를 이용했다.