https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제
정수 n이 매개변수로 주어진다.
높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 숫자를 순차적으로 채운다.
이 배열을 1차원 배열로 return하는 solution함수를 완성하라.
2. 문제 풀이 흐름
1. 1부터 n까지 순차적으로 리스트 길이가 늘어나는 matrix를 만든다.
(그림상으로는 n*n이지만 리스트 컴프리헨션으로 [[0],[0, 0],[0, 0, 0]]을 만들 수 있다.)
2. 반복되는 패턴을 찾는다.
3. 중첩 반복문을 이용하여 순차적으로 증가하는 숫자를 적절한 자리에 채워준다.
def solution(n):
matrix = [[0]*i for i in range(1,n+1)] #0으로 채워진 2차원 배열
y,x = -1, 0
num = 1
for i in range(n):
for j in range(i,n):
angle = i % 3 #패턴 반복
if angle == 0: y += 1
elif angle == 1: x += 1
elif angle == 2: y -= 1; x -= 1
matrix[y][x]=num #y가 행 x는 열
num += 1
answer=[i for j in matrix for i in j]
return answer
3. 배워갈 내용
✔️1부터 N까지 순차적으로 길이가 증가하는 배열 만들기
matrix = [[0]*i for i in range(1,n+1)]
#결과 [[0],[0, 0],[0, 0, 0]]
✔️순차적인 순회 감소는 range를 이용하자.
for i in range(n):
for j in range(i,n):
i=0 일때 j는 0부터 순회한다.
i=1 일때 j는 1부터 순회한다.
중첩된 for문 내부를 순회하는 것이 i가 증가함에 따라 순차적으로 줄어든다는 의미다.
✔️2차원 배열을 1차원으로 압축하는 법
1번은 일반적인 for루프로 2차원 배열을 1차원으로 압축하는 법을 보여주고 있다.
2번은 리스트 컴프리헨션을 이용하여 압축하는 법이다.
순회하는 순서는 아래와 같다.
1.외부루프를 먼저 순회한다.
for j in matrix #외부루프
2. j안에 내부루프를 순회한다.
for i in j #내부루프
3. 순회한 결과인 i가 result에 추가된다.
외워두는 것이 좋겠다!
'알고리즘&자료구조 > Algorithm' 카테고리의 다른 글
프로그래머스 12949 - 행렬의 곱셈 (0) | 2024.04.24 |
---|---|
프로그래머스 81302 - 거리두기 확인하기 (1) | 2024.04.19 |
프로그래머스 77485 - 행렬 테두리 회전하기 (1) | 2024.04.18 |
프로그래머스 87377 - 교점에 별 만들기 (0) | 2024.04.18 |
[백준 2563] 색종이 (0) | 2024.02.15 |