코딩테스트 연습 - n^2 배열 자르기 | 프로그래머스 스쿨 (programmers.co.kr)
나의 풀이
def solution(n, left, right):
arr = [[0] * n for _ in range(n) ]
num=1
for i in range(n):
for j in range(n):
if i==j:
arr[i][j]=num
num+=1
else:
arr[i][j]=num
new_arr=sum(arr, [])
return new_arr[left:right+1]
중간 중간 출력하여 확인하며 문제를 풀었는데 테스트 실패가 떴다. 뒤늦게 입출력 예시를 보니 문제가 내가 이해한 것과 달랐다. 나는 n=3일 때, i행 i열까지 영역 내의 모든 빈 칸을 숫자 i로 채울 때 다음과 같은 2차원 배열을 생각하며 풀어서 실패했다.
1 | 2 | 2 |
2 | 2 | 3 |
3 | 3 | 3 |
모범 답안
열이 1인 행렬로 생각해본다면
이런식으로 볼수 있다.
이는 앞의 index 8번을 본다면, 8 ( 8//3, 8% 3)( 몫, 나머지)로 확인할 수 있다. 그리고 몫과 나머지중 가장 큰값에 따라서 숫자가 들어간다
여기에 +1을 한것이 답이 된다
def solution(n, left, right):
answer = []
for i in range(left,right+1):
a = i//n # 몫
b = i%n #나머지
if a<b: a,b =b,a 큰거 구하기
answer.append(a+1)
return answer
참조
velog
velog.io
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / 행렬의 곱셈 / python (1) | 2024.02.08 |
---|---|
Programmers / 2단계 / H-Index / python (0) | 2024.02.08 |
Programmers / 2단계 / 전화번호 목록 / python (0) | 2024.02.06 |
Programmers / 2단계 / 할인 행사 / python (0) | 2024.02.06 |
★ Programmers / 2단계 / 괄호 회전하기 / python (0) | 2024.02.06 |