2021. 1. 10. 22:49ㆍ코딩테스트 준비
프로그래머스의 조이스틱 문제이다
이 문제는 별 거 아니라고 생각했다가 막판에 가서 굉장히 고민하게 만드는 문제이다.
이 문제를 풀 때 다들 조이스틱을 위,아래로 움직이는 것과 왼,오른쪽으로 움직이는 것에 대한
카운트를 분리해내는 것은 생각해낼 수 있을 것이라고 생각한다.
이 때, 위, 아래의 경우는 아스키 코드를 이용한다면 어렵지 않게 풀 수 있다.
하지만, 왼,오른쪽을 구분해내는 것은 결코 만만치 않다.
먼저, loc 배열을 지정해주고 이 배열에는 왼,오른을 구분해내기 위한 배열의 위치를 넣어준다.
이 때, 'A'가 있는 위치는 제외한다 그 이유는 왼, 오른쪽을 구분해낼 떄, A가 있는 위치는 의미가 없으며
A가 있으면 조이스틱을 한 번 더 움직여 넘어가기 때문에 A가 아닌 배열의 위치를 바로 왼쪽과
바로 오른쪽 위치를 비교하여 어디로 갈지를 결정해야 하기 때문이다.
따라서 이를 구현해내기 위한 첫 단계로 enumerate형을 이용하여 해당 인덱스를 loc 배열에 append 해줄 수 있도록 한다. enumerate를 사용한 이유는 .index를 이용한다면 중복이 있는 문자의 경우에는 반환할 수 없기 때문이다.
조이스틱을 위,아래에 해당하는 코드는 간단하다 문자를 아스키코드로 반환해주는 ord를 이용하면 되며, 위와 같이 코드를 짜면 된다.
이 부분이 왼쪽,오른쪽을 구분해내기 위한 코드이다.
먼저, loc배열이 있는지의 여부부터 확인한다. 만약 없다면 바로 break를 통하여 결과값을 출력한다.
그 이후, len(loc)를 이용하여 length변수에 값을 저장해주고, 인덱스는 0부터 시작하고 length값은 인덱스의 최대값보다 1이 더 크기 때문에 이를 조절해주기 위해 -1을 해준다.
그리고 오른쪽, 왼쪽에 대한 비교 조건식은 위와 같이 수행하면 되는데, 머리를 잘 굴리면 위와 같이 어렵지 않게 사용할 수 있다. 핵심 포인트는 파이썬 문법에서 loc[-1]과 같이 수행하게 되면 배열의 마지막을 출력해낼 수 있다는 것이다.
그리고 마지막으로 while 구문의 끝에 반복을 위한 a+=1을 해주면 우리가 원하는 값이 answer 변수에 저장된다.
'코딩테스트 준비' 카테고리의 다른 글
DFS/BFS 탐색 알고리즘 (0) | 2021.01.12 |
---|---|
미로 탈출 문제 (0) | 2021.01.11 |
프로그래머스 (체육복 문제) (0) | 2021.01.10 |
그리디 알고리즘 (백준 2583번) (0) | 2021.01.10 |
그리디 알고리즘 (0) | 2021.01.10 |