

이번에도 string을 적절히 이용했어야 했고, vector을 이용해야했다.
C++ STL Vector 사용법 : 네이버 블로그 (naver.com)
그냥 배열인데 삽입/삭제를 할 수 있는 함수들이 추가돼서 이용하기 좀 더 편리한 배열같은 느낌.
처음에는 2차원 배열을 사용해야 하나...? 하다가 든 생각은 이번에도 수학적으로 접근하기. 냅다 그냥 막 풀어버리기
이렇게 푸는게 절대 최선을 아니겠지만.. 생각나는 게 이 방법이니 일단 풀어보자싶었음
제일 아래의 0을 11이라고 가정
'2', '5', '8', '0'인 경우 '1', '4', '7' 과 '3', '6', '9'와의 거리를 따져보면
두 숫자의 차이 = 1이면 무조건 거리가 1이다.
두 숫자의 차이 = 2이면 무조건 거리가 2이다.
두 숫자의 차이 = 3이면 무조건 거리가 1이다.
두 숫자의 차이 = 4이면 무조건 거리가 2이다.
두 숫자의 차이 = 5이면 무조건 거리가 3이다.
두 숫자의 차이 = 6이면 무조건 거리가 2이다.
두 숫자의 차이 = 7이면 무조건 거리가 3이다.
두 숫자의 차이 = 8이면 무조건 거리가 4이다. (3과 0인 경우)
두 숫자의 차이 = 9이면 무조건 거리가 3이다. (2와 0인 경우)
두 숫자의 차이 = 10이면 무조건 거리가 4이다. (1과 0인 경우)
이를 코딩하기 쉽게 배열로 거리에 따라 정리하면
거리 = 1인 경우 : 두 수의 차이 = 1, 3
거리 = 2인 경우 : 두 수의 차이 = 2, 4, 6
거리 = 3인 경우 : 두 수의 차이 = 5, 7, 9
거리 = 4인 경우 : 두 수의 차이 = 8, 10
그걸 함수로 구현해서 테스트를 해보니..

틀렸다. 요놈인데 뭐 때문에 틀렸을까하다가 생각난 이 문제의 첫번째 조건
"왼쪽 손가락은 *, 오른쪽 손가락은 #에서 시작한다."
고래서 왼쪽 손가락과 오른쪽 손가락의 현재 위치를 저장해주는 변수 l, r을 초기화해주는 부분을 아래처럼 10과 12로 바꿔서 적어줬다.

그러고 테스트를 실행해 주니

솔직히 무슨 손가락으로 누를지가 정해졌을때 사용되는
이 두 문장을 함수로 구현하고 싶었는데 실패하고 테스트가 다 통과됨에 신나서 제출해버렸다.
흠.. 그렇다. 그것만 구현해도 코드가 반은 적었을텐데 말이지.
&을 붙여 Call by reference로 구현했다면 가능했을거 같기도하다.

이것은 내가 1학년때 필기해둔 call by reference 내용
그리고 어느 분들의 코드!

이 분들도 수학적으로 접근을 했는데 내가 실패한 방법으로 구현하셨다!!
나는 숫자 차를 이용해서 풀었는데 풀기전 3으로 나누기/나머지 연산을 해서 할 수 있을 것 같아서 끄적이다 실패하고 차를 이용해 냅다 나열해서 푼 것이다.
이 분들도 똑같이 왼쪽 손가락, 오른쪽 손가락의 현재 위치를 나타내는 변수 curr_L과 curr_R을 사용하셨고
numbers[] 를 하나씩 탐색하면서 검사한다.
numbers[i] % 3 == 1이면 "L"이고
numbers[i] % 3 == 0 && numbers[i] % 3 != 0 이면 "R"이다.
여기까지는 정말 비슷한데 가운데 2, 5, 8, 0을 처리하는 부분이 다르다.
만약 numbers[i] == 0 이면 11로 바꿔준다.
현재 왼쪽 손가락의 위치 % 3 == 1라는 것은 현재 왼쪽 손가락의 위치가 1, 4, 7 위에 있는 경우를 뜻한다.
이럴 경우 |현재 숫자 - 현재 위치 - 1| / 3 + 1을 dist_L에 저장해준다.
예를 들어 현재위치는 4, 현재 숫자가 8인 경우 : |4 -8-1| / 3 + 1 = 2
와 그러고 보니 2가 4와 8의 거리네??
이렇게 계산해줄 수 있었던 거구만요. 지니어스. 카카오 입사하슈.
else문에 걸리는 경우는 현재 왼쪽 손가락의 위치가 2, 5, 8, 0 일 때이다.
이 경우 3으로 나눠주기만하면 거리가 나온다. 대박!
'‡ CODING TEST STUDY ‡ > º 프로그래머스' 카테고리의 다른 글
프로그래머스 [Lv1] | 신고 결과 받기 (0) | 2023.07.27 |
---|---|
프로그래머스 [Lv1] | 크레인 인형뽑기 게임 (0) | 2023.07.27 |
코딩 테스트 연습 [Lv1] | 숫자 문자열과 영단어 (0) | 2023.07.27 |
코딩 테스트 연습 [Lv1] | 신규 아이디 추천 (0) | 2023.07.27 |
프로그래머스 [Lv1] | 로또의 최고 순위와 최저 순위 (0) | 2023.07.27 |