문제 설명
정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
제한사항
- 1 ≤ n ≤ 100
입출력 예nresult
3 | [[1, 0, 0], [0, 1, 0], [0, 0, 1]] |
6 | [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]] |
1 | [[1]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 n의 값은 3으로 다음과 같이 2차원 배열을 채울 수 있습니다.i \ j012
0 1 0 0 1 0 1 0 2 0 0 1
입출력 예 #2
- 예제 2번의 n의 값은 6으로 다음과 같이 2차원 배열을 채울 수 있습니다.i \ j012345
0 1 0 0 0 0 0 1 0 1 0 0 0 0 2 0 0 1 0 0 0 3 0 0 0 1 0 0 4 0 0 0 0 1 0 5 0 0 0 0 0 1
입출력 예 #3
- 예제 1번의 n의 값은 1이고 다음과 같이 2차원 배열을 채울 수 있습니다.i \ j0
0 1
def solution(n):
answer = [[0]*n]*n
for i in range(n):
for j in range(n):
if i == j:
answer[i][j]=1
return answer
안되는 코드
배열 생성 방식 자체가, 이렇게 생성한 리스트는 한 번에 생성한 것이기 때문에 하나의 원소가 바뀌면 모든 행에 있는 같은 인덱스를 가진 원소가 다 바뀐다는 단점이 있음.
answer = [[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
answer[0][1] = 1
print(answer)
위는 그 예시로, 출력되는 것은 아래와 같음
[[0, 1, 0],
[0, 1, 0],
[0, 1, 0]]
따라서 각 행이 독립적인 리스트 객체를 참조하도록 바꿔야 한다는데 무슨 말인진 잘 모르겠지만, 리스트를 만들 때에는 각 하나의 원소로 구분하여 생성하는 것이 좋음.
또한 i와 j가 같은 순간에 answer[i][j]가 1로 바뀌고, [0][0], [0][1], [0][2]가 다 1로 바뀜.
▶파이썬 리스트 참조할 것
n = 3
answer = [[0]*n]
answer = [ [0, 0, 0] ] 이다.
n = 3
answer = [[0]*n]*n
answer = [ [0, 0, 0], [0, 0, 0], [0, 0, 0] ] 이다.
def solution(n):
answer = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
if i == j:
answer[i][j] = 1
return answer
맞는 코드
i=0일때, j=0, j=1, j=2 돌아가면서 둘이 같을 때만 answer[i][j]를 1로 바꿈
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 문자열 겹쳐쓰기 (0) | 2024.07.09 |
---|---|
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 대소문자 바꿔서 출력하기 (0) | 2024.07.09 |
프로그래머스 >코딩테스트 연습 > 코딩 기초 트레이닝 > 간단한 식 계산하기 (0) | 2024.07.09 |
프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 특별한 이차원 배열 2 (0) | 2024.07.09 |