- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/68645
Lv2 문제다!
문제 이해
- 삼각형에 맞는 구조로 answer를 설정한다
- 행, 열은 -1, 0으로 설정한다. (행은 처음 시작에 +1 되므로 indexerror를 방지하기 위해 -1이다)
- 각 위치에 해당하는 숫자는 num으로 표신한다
- 방향은 수직 아래, 수평 오른쪽, 대각선 왼쪽으로 진행하므로 3가지 경우로 나누어서 진행한다.
- 첫번째는 열은 고정이고 행을 +1 하면서 입력 숫자도 +1 하는 경우
- 두번째는 행은 고정이고 열을 + 1하면서 입력 숫자도 +1 하는 경우
- 세번째는 열,행을 모두 -1씩 하면서 입력 숫자도 +1 하는 경우
- answer의 각 행의 원소들을 추가해서 반환한다
- 정답 풀이 :
인덱스 먼저 이동한 다음에 값을 바꿔준다
def solution(n):
answer = [[0 for j in range(1, i + 1)] for i in range(1, n + 1)]
x, y = -1, 0 #처음 시작은 아래로 내려가기 때문에 x = -1
num = 1
for i in range(n):
for j in range(i, n):
if i % 3 == 0:
x += 1
elif i % 3 == 1:
y += 1
else:
x -= 1
y -= 1
answer[x][y] = num
num += 1
return sum(answer, [])
- 시도해 본 풀이 :
인덱스 처리가 미흡해서 틀리게 나온 것 같다. 특히 왼쪽 대각선으로 움직이는게 잘 안된다
위의 풀이를 참고해서 인덱스만 따로 바꾸고 행렬 값은 공통으로 바꾸는 쪽으로 한번 생각해 봐야겠다(그게 언제가 될지,,,)
def solution(n):
result = [[-1] * n for _ in range(n)]
temp = n
count, cycle = 0, 0
row, col = 0, 0
number = 0
while True:
if count == n * (n + 1) // 2:
break
if cycle % 3 == 0 :
for i in range(temp):
number += 1
result[row + i][col] = number
count += temp
cycle += 1
temp -= 1
row += temp
if count == n * (n + 1) // 2:
break
col += 1
if cycle % 3 == 1:
for i in range(temp):
number += 1
result[row][col + i] = number
count += temp
cycle += 1
temp -= 1
col += temp
if count == n * (n + 1) // 2:
break
if cycle % 3 == 2:
for i in range(1, temp + 1):
number += 1
result[row - i][col - i] = number
count += temp
cycle += 1
temp -= 1
row -= temp
col -= temp
answer = []
for i in range(n):
for j in range(i + 1):
answer.append(result[i][j])
return answer
'코딩테스트 > 기출' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17683번 : [3차] 방금 그 곡 (0) | 2022.10.20 |
---|---|
[월간 코드 챌린지 1 / 프로그래머스] 68936번 : 쿼드압축 후 개수 (1) | 2022.10.11 |
[연습 문제 / 프로그래머스] 12899번 : 124 나라의 숫자 (1) | 2022.10.10 |
[연습 문제 / 프로그래머스] 131127번 : 할인 행사 (0) | 2022.10.10 |
[월간 코드 챌린지 시즌2 / 프로그래머스] 77885번 : 2개 이하로 다른 비트 (0) | 2022.10.05 |