https://school.programmers.co.kr/learn/courses/30/lessons/87390
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이다
즉 자리의 인덱스를 구하고 비교해 더 큰 수를 넣는것이 핵심이다.
그럼 자리 인덱스를 어떻게 구하냐.
여기서 많이 고민했었다.
그러다 우연히 나눗셈과 나머지를 구하게 되었고 이를 이용했다.
'알고리즘' 카테고리의 다른 글
프로그래머스)주차 요금 계산-python (0) | 2023.01.24 |
---|---|
프로그래머스) 압축-python (0) | 2023.01.24 |
프로그래머스) k진수에서 소수찾기-python (0) | 2023.01.20 |
프로그래머스)튜플 -python (0) | 2023.01.20 |
프로그래머스) 괄호 회전하기-python (0) | 2023.01.20 |