728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/68645
1차 풀이
def firstStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
x += 1
num += 1
return (num, x - 1, y + 1)
def secondStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
y += 1
num += 1
return (num, x - 1, y- 2)
def thirdStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
x -= 1
y -= 1
num += 1
return (num, x + 2, y + 1)
def solution(n):
triangle = []
for i in range(1, n + 1):
triangle.append([0] * i)
x, y = 0, 0
num = 1
counting = len(triangle)
step = 1
while counting:
if step == 1:
num, x, y = firstStep(triangle, num, x, y, counting)
counting -= 1
step = 2
elif step == 2:
num, x, y = secondStep(triangle, num, x, y, counting)
counting -= 1
step = 3
else:
num, x, y = thirdStep(triangle, num, x, y, counting)
counting -= 1
step = 1
answer = []
for i in triangle:
answer.extend(i)
return answer
👉🏻일단 전체 코드이다! 하나씩 살펴보기 전에 그림으로 이해해보자ㅎ
👉🏻먼저 이중 리스트 triangle을 만든다.
- N이 4라면 0이 1개인 리스트, 2개인 리스트, 3개인 리스트, 4개인 리스트 이런 식으로 총 4개를 만들어 넣는다.
👉🏻이중 리스트를 삼각형이라고 생각하고 숫자를 채우는 과정을 생각해보자.
- counting은 숫자를 채우는 횟수(칸 수)이다. N이 4라면 처음에는 N번만큼 채우고 이후 채우는 횟수가 한 칸씩 줄어든다. (4 → 3 → 2 → 1)
- 처음에는 아래 방향으로 칸을 채우고 두 번째는 오른쪽, 세 번째는 위쪽 방향으로 칸을 채운다. 이 3가지 step이 반복된다.
- triangle리스트를 좌표라고 생각한다면 각 리스트들을 x, 리스트 안의 요소들을 y라고 생각할 수 있다.
- 그렇다면 first step(아래로 칸을 채울 때)때는 y값은 그대로 있고 x값이 1씩 증가하며 이동하면서 값을 채운다.
- second step(오른쪽으로 칸을 채울 때)때는 x값이 그대로 있고 y값이 1씩 증가하며 이동하면서 값을 채운다.
- third step(위로 칸ㅇ르 채울 때)때는 x, y값 둘 다 1씩 줄어들며 이동하면서 값을 채운다.
👉🏻최종적으로 이런 상태가 되도록 만들어보장!
def solution(n):
triangle = []
for i in range(1, n + 1):
triangle.append([0] * i)
x, y = 0, 0
num = 1
counting = len(triangle)
step = 1
while counting:
if step == 1:
num, x, y = firstStep(triangle, num, x, y, counting)
counting -= 1
step = 2
elif step == 2:
num, x, y = secondStep(triangle, num, x, y, counting)
counting -= 1
step = 3
else:
num, x, y = thirdStep(triangle, num, x, y, counting)
counting -= 1
step = 1
answer = []
for i in triangle:
answer.extend(i)
return answer
👉🏻먼저 solution 함수이다.
- triangle함수에 n의 개수만큼 0을 담은 리스트들을 넣어준다.
- x, y는 좌표이고 num은 좌표에 넣어줄 숫자(삼각형을 채울 숫자)이고 counting은 숫자를 채울 횟수(1씩 줄어든다.)이고 step은 현재 진행 단계(단계마다 아래, 오른쪽, 위 방향으로 움직인다)이다.
- counting이 0이 될 때까지 while 문을 돌린다.
- 현재 step에 따라 각각 firstStep, SecondStep, ThirdStep 함수를 실행시킨다.
- counting을 1씩 줄여주고 step을 다음 step으로 설정한다.
- extend를 사용해서 triangle 속의 리스트들의 요소를 answer리스트에 담아 return한다.
def firstStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
x += 1
num += 1
return (num, x - 1, y + 1)
def secondStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
y += 1
num += 1
return (num, x - 1, y- 2)
def thirdStep(list, num, x, y, counting):
for i in range(counting):
list[x][y] = num
x -= 1
y -= 1
num += 1
return (num, x + 2, y + 1)
👉🏻fristStep과 secondStep과 thirdStep 함수이다!
- 각 step에 맞게 num을 채워주고 좌표를 이동시킨다. num은 계속 1씩 증가시켜준다.
- 다음 좌표에 넣을 num과 다음 좌표를 return해준다.
728x90
'그 땐 Algorithm했지 > 그 땐 Programmers했지' 카테고리의 다른 글
[self-study/level 3] SQL | 없어진 기록 찾기 | JOIN (0) | 2022.04.03 |
---|---|
[self-study/level 2] SQL | NULL 처리하기 | IS NULL (0) | 2022.04.02 |
[self-study/level 1] SQL | 이름이 있는 동물의 아이디 | IS NULL (0) | 2022.04.02 |
[TAVE/level 2] Python | 멀쩡한 사각형 (0) | 2022.03.17 |
[self-study/level 1] SQL | 이름이 없는 동물의 아이디 | IS NULL (0) | 2022.03.16 |