- 문제 : 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

+ Recent posts