깃허브:
https://programmers.co.kr/learn/courses/30/lessons/87390#
하아..... 구현은 제대로 했는데 테스트 케이스 12와 13에서 막혔었다.
처음에 예제로 나온 것들을 그림으로 그려봤을 때 배열의 숫자는 행과 열 중에서 더 숫자를 가진 것이 된다는걸 깨달았다. left와 right를 lefti, leftj, righti, rightj로 나눠서 (lefti, leftj) ~ (righti, rightj) 이렇게 answer에 append 되도록 설계했다.
첫시도
def solution(n, left, right):
answer = []
lefti = left//n
leftj = left % n
righti = right//n
rightj = right % n
print(lefti, leftj, righti, rightj)
if righti == lefti:
for i in range(leftj, rightj+1):
answer.append(max(leftj, lefti) + 1)
return answer
for j in range(leftj, n):
answer.append(max(lefti, j) + 1)
for i in range(lefti+1, righti):
for j in range(n):
answer.append(max(i, j) + 1)
for j in range(0, rightj+1):
answer.append(max(righti, j) + 1)
return answer
무슨 이유 때문인지는 몰라도 전체 케이스의 60%만 맞고 나머지는 실패했다.
구글링으로 찾았을 때 코드를 자세히는 못봤지만 아주 짧게 짰다는 것을 발견했고 내가 짠 코드를 더 간소화 시킬 수 있는 방법을 찾아냈다.
두번째시도
def solution(n, left, right):
answer = []
for i in range(left, right+1):
answer.append(max(i%n, i//n) + 1)
return answer
어차피 모든 숫자는 i//n이 열이 되고 i%n이 행이 되기 때문에 굳이 lefti, leftj, righti, rightj로 나눌 필요가 없었던 것이다.
.....하지만 90%까지 달성하고 꼭 테스트케이스 12와 13에서 실패했다.
다른 사람들의 풀이를 봤을 때 내가 짠 코드와 다른 점이 없었고 심지어 다른 사람의 코드로 실행을 해봤을 때에도 테스트 케이스 12와 13에서 런타임 에러가 났다.
Python
1
2
3
4
5
|
def solution(n, left, right):
answer = []
for i in range(int(left), int(right+1)):
answer.append(max(i//n, i%n) + 1)
return answer
|
cs |
.....하아.....밀려드는 허무함을 아는가....
left와 right가 long 형태여서 안됐던 것이였다.
left와 right+1을 int로 감싸주었더니 통과됐다.
앞으로 안되면 long타입을 int로 형변환 시켜주는걸 생각해봐야겠다.
'프로그래머스 풀이' 카테고리의 다른 글
프로그래머스 2단계 - 이진 검색 트리 (Python) (0) | 2022.06.26 |
---|---|
프로그래머스 2단계 - [1차] 캐시 (0) | 2022.02.13 |
프로그래머스 2단계 - 모음사전 (Python) (2) | 2022.01.28 |
프로그래머스 2단계 - 후보키 (Python) (0) | 2021.12.01 |
프로그래머스 2단계 - 괄호 회전하기 (Python) (0) | 2021.11.17 |