이번 포스팅에서는 "탑"이라는 문제에 대한 풀이를 진행하도록 하겠다.
우선 문제는 다음과 같다.
<문제>
- 우선 문제 자체가 굉장히 길다.
(딱봐도 읽기 싫게 생겼네...) - 그래도 문제를 안 읽으면 풀 수가 없으니, 천천히 읽어보고 문제를 풀어보았다! ^^ (지난 번처럼 삽질을 안하도록 문제를 꼼꼼하게 읽었다)
- 문제 접근법을 생각해내는 것은 크게 어렵지 않았으므로, 머리 속으로 생각한 내용들을 천천히 코드로 구현해보았다.
<1. 나의 풀이>
- 먼저 신호가 오른쪽에서 왼쪽 방향으로 전해지므로 reversed()를 사용해서 주어진 heights 리스트를 역순으로 바꿔주었다.
- 그 다음, [(idx1, heights1), (idx2, heights2), ...]의 형태로 리스트를 만들어주기 위해 list comprehension을 사용하였다.
- 예를 들면 [(5, 4), (4, 7), (3, 5), (2, 9), (1, 6)] 이런 식으로 만들어주기 위해서!
- 그리고 나서 for문을 사용하여 반복문을 돌려주었는데, "수신 여부"를 의미하는 count를 만들어서 수신을 받았을 경우 1 값을 갖도록 해주었다.
- count 값이 1 인 경우에는 해당 탑의 번호를 result 리스트에 넣어주고 반복문을 종료하게끔 만들어주었다.
- 왜냐하면 count 값이 1 이라는 말은 수신을 받았다는 의미이기 때문이다.
- 만약 탑의 높이를 비교했지만 count 값이 여전히 0 이면, 수신을 받은 탑이 없다는 의미이므로 0 을 result 리스트에 넣어주었다.
- 마지막으로 맨 처음에 reversed를 사용해서 역순으로 작업을 수행해주었으므로, return 값을 반환할 때 다시 reversed()를 사용해서 원래 순서대로 반환해주었다.
<2. 다른 사람의 풀이>
- 위와 같이 range( ) 함수에 -1을 사용하면 reversed를 해줄 필요가 없었다.
- 또한 result를 탑의 개수(len(heights))만큼 0 으로 구성된 리스트라고 설정하고, 탑의 높이를 비교해가며 신호 수신 가능 여부를 확인해서 뒤의 0 값부터 수신 받은 탑의 번호로 변경해준다.
range( ) 함수를 활용해서 역순으로 처리해줄 수 있다는 것은 알고 있었지만, 실제로 문제가 나왔을 때 적용하지 못했다.
머리 속으로만 알고 구현을 하지 못하는 것은 온전한 나의 지식이 아니다.
이렇게 하나하나 배워가며 모든 것이 온전한 나의 지식이 되는 그날까지 파이팅하자!! :)
'Python' 카테고리의 다른 글
[Python Skill Up] 자리 맞춤 메서드 (0) | 2023.06.07 |
---|---|
[KoNLPy 설치] Window10에서 KoNLPy 설치하기 (feat. 이제 삽질은 그만!! ^^) (6) | 2020.11.13 |
[알고리즘_Programmers] 9주차 1번 문제 및 풀이 (0) | 2020.06.16 |
[알고리즘_Programmers] 8주차 3번 문제 및 풀이 (0) | 2020.06.13 |
[알고리즘_Programmers] 8주차 2번 문제 및 풀이 (0) | 2020.06.09 |