🦭
삼각형 회전 - 파이썬(Python), 알고리즘
December 16, 2021
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)
느낀점❗
- 알고리즘 문제는 아예 어떻게 풀어야 할 지 접근 자체를 못해서 못 푸는 경우가 많다. 이 문제도 그랬다. 머리가 유연하게 잘 돌아갔으면 좋겠다.
- 머리로 이해한 걸 글로 풀어 쓰는 게 정말 어렵다.