728x90
문제설명
https://school.programmers.co.kr/learn/courses/30/lessons/181830#
처음 풀이(틀림!)
def solution(arr):
# 행의 수
col = len(arr)
# 열의 수
row = len(arr[0])
# 행과 열 중 큰 수를 num에 저장
num = col if col > row else row
# num이 행의 수보다 크면.. 열의 수가 더 많으므로, 모자란 행(큰 수 - 행 수)을 추가함. 이 때, 추가하는 행의 원소 개수는 큰 수(열의 개수) 만큼임
if num > col:
for i in range(num-col):
arr.append([0] * row)
# num이 열의 수보다 크면.. 행의 수가 더 많으므로, 모자란 열을 추가함
if num > row:
for j in range(num):
arr[j].append(0 * (num-row))
return arr
처음에는 위와 같이 풀었다.
행과 열의 크기를 저장하고,
행과 열 중 큰 수를 num에 저장한 후, 0을 채우는 형식으로 진행하였다.
테스트는 3개 모두 맞았지만...
막상 채점을 해보니 65.5점으로 나왔다ㅠㅠ
그래서 '질문하기'를 통해 반례를 찾아내었다.
반례
입력값 〉 [[1, 1], [1, 1], [1, 1], [1, 1]]
기댓값 〉 [[1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 0, 0]]
반례를 추가해서 테스트해보니 틀린 답을 확인할 수 있었다.
틀린 이유
######### 틀린 부분
# num이 열의 수보다 크면.. 행의 수가 더 많으므로, 모자란 열을 추가함
if num > row:
for j in range(num):
arr[j].append(0 * (num-row))
"""
arr[j].append(0 * (num-row))의 결과
num - row = 2인데,
0 * 2를 하면 0이 됨!
따라서 0을 2번 추가하는 것이 아니라
결국에는 append 매개변수 안의 값이 0이되어
0만 한 번 추가하게 된다.
"""
반례를 확인해보면, 행이 4, 열이 2로 행이 더 커서
각 행에 2개의 열을 0으로 추가해야하는데,
내가 위에 작성한 코드로는 0이 한 개씩만 추가되는 것을 확인할 수 있었다.
arr[j].append(0 * (num-row))의 결과
num - row = 2인데,
0 * 2를 하면 0이 된다.
따라서 0을 2번 추가하는 것이 아니라 결국에는 append 매개변수 안의 값이 0이되어 0만 한 번 추가하게 된다.
테스트 문제에서는 모두 0을 한 번씩만 추가하면 되기 때문에 오류가 없었던 것이였다.
이에 맞춰 코드를 수정하였다.
수정한 내 코드(정답!)
def solution(arr):
# 행의 수
col = len(arr)
# 열의 수
row = len(arr[0])
# 행과 열 중 큰 수를 num에 저장
num = col if col > row else row
# num이 행의 수보다 크면.. 열의 수가 더 많으므로, 모자란 행(큰 수 - 행 수)을 추가함. 이 때, 추가하는 행의 원소 개수는 큰 수(열의 개수) 만큼임
if num > col:
for i in range(num-col):
arr.append([0] * row)
# num이 열의 수보다 크면.. 행의 수가 더 많으므로, 모자란 열을 원소 0으로 추가함
if num > row:
for j in range(num):
# 추가해야하는 열의 개수는 num-row개
for _ in range(num-row):
arr[j].append(0)
return arr
정답-!
다른 사람 풀이
def solution(arr):
n=len(arr)
m=len(arr[0])
if n>m:
for i in range(n):
for j in range(n-m):
arr[i].append(0)
else:
for i in range(m-n):
arr.append([0]*m)
return arr
다른 사람 풀이를 확인해보니, 필수적으로 행과 열 중 큰 수를 저장할 필요는 없어보였다.
참고차 남겨본다.
끄읏-!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 정수를 나선형으로 배치하기 (0) | 2024.02.19 |
---|---|
[프로그래머스][PYTHON] Lv. 0 그림 확대 (0) | 2024.02.18 |
[프로그래머스][PYTHON] Lv. 0 날짜 비교하기 (0) | 2024.02.17 |
[프로그래머스][PYTHON] Lv. 0 특별한 이차원 배열 1 (0) | 2024.02.17 |
[프로그래머스][PYTHON] Lv. 0 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.02.13 |