Part1. 삼각형 회전 (너무어렵다😭😭😭)

  • 아래와 같은 삼각형을 보자 (시계방향을 돌린다고 생각)
   1             5              9              1
  234     ->    762    ->      487     ->     234
 56789         98431          13265          56789
  • 한 번만 시계방향으로 돌린 경우

    • 입력: ['1', '234', '56789'], 출력: ['5', '762', '98431']
  • 어떤 로직을 거쳐 위와 같은 출력이 나올 수 있을까?

    • (0,0) ~ (5,5) 좌표평면으로 나타내서 돌린 다음 각 수의 위치와 이전 수와의 관계성을 찾으면 풀 수 있지 않을까? 고민 해 보았지만 풀지 못했다.
  • 입/출력을 보고 리스트에 한 개씩 값을 변경 해보자 (한 팀원 분이 해결해주셨다🙂)

list_length:3

index: 0('1') -> 2
['1', '', ''] -> ['', '', '1']
#######################################
index:   1('2') -> 1
['', '234', ''] -> ['', '2', '1']

index:  1('3') -> 2
['', '34', ''] -> ['', '2', '31']

index: 1('4') -> 2
['', '4', ''] -> ['', '2', '431']
#######################################
index:     2('5') -> 0
['', '', '56789'] -> ['5', '2', '431']

index:    2('6') -> 1
['', '', '6789'] -> ['5', '62', '431']

index:   2('7') -> 1
['', '', '789'] -> ['5', '762', '431']

index:  2('8') -> 2
['', '', '89'] -> ['5', '762', '8431']

index: 2('9') -> 2
['', '', '9'] -> ['5', '762', '98431']
  • 각 인덱스의 첫번째 문자만 보면 아래와 같은 규칙을 찾을 수 있었다.

    • 첫번째 문자의 이동 위치(index) = length - 1 - (입력 리스트에서 현재 이동하고자 하는 문자의 index)
  • 그런데 그 다음 문자 부터 재밌다. 각 index에서 처음 문자의 다음 2개의 문자는 그 처음문자 index(변경된)+1 로 위치가 변경 된다. 그 다음 2개의 문자는 처음문자 index(변경된)+2

    • ex) 5 (2->0), 67 (2->1), 89 (2->2)
    • 첫번쨰 이후 다음 문자의 이동 위치(index) = length - (입력 리스트에서 현재 이동하고자 하는 문자의 index) - 1 + ((같은 인덱스 문자열 안에서의 현재 이동하고자 하는 문자의 index +1) // 2)
  • 코드로 말해보자

    input = ['1', '234', '56789']
    
    input_size = len(input)
    output_list = ['' for _ in range(input_size)]
    
    for input_index, set_numbers in enumerate(input):
      for char_index_in_current_string, char in enumerate(set_numbers):
          pos = input_size - 1 - input_index + ((char_index_in_current_string+1)//2)
          output_list[pos] = char + output_list[pos]
    print(output_list)

느낀점❗

  • 알고리즘 문제는 아예 어떻게 풀어야 할 지 접근 자체를 못해서 못 푸는 경우가 많다. 이 문제도 그랬다. 머리가 유연하게 잘 돌아갔으면 좋겠다.
  • 머리로 이해한 걸 글로 풀어 쓰는 게 정말 어렵다.