두 가지 방법을 생각했다.
1. array를 보고 뇌물 먹인 횟수 계산하기
2. 직접 elements 위치를 바꿔가며 몇 번 뇌물을 먹였는지 세기
첫번째 방법을 하다가 포기했다. 고려할 상황이 너무 많았음
더보기
1. index 와 index에 현재 위치한 값을 비교한다.
2. index == 현재값 은 넘어간다
3. index < 현재값 : 뇌물을 준 사람이다.
3.1. 현재값 - index 가 2보다 크면 : Too chaotic
4. index > 현재값 : 뇌물을 받은 사람이다.
4.1. 4. 인 사람 중에서도 뇌물을 준 사람이 있다. q[i] > q[i+1] 인 경우
두번째 방법은 직접 원소를 옮겨가며 횟수를 카운트했다. 인터넷의 도움을 받았다.
더보기
1. index 와 메모 dic 을 준비한다.
2. index(i) 가 len(q) -2 보다 작을 때까지 반복한다 .
2.1. index == 현재값 은 넘어간다
2.2. q[i] > q[i+1] 일 경우 뇌물을 준 상황이므로 q[i]가 몇 번 이동했는지 메모해둔다.
2.2.1. 메모 횟수가 2번임에도 여전히 순서가 뒤바뀌어있다면 Too chaotic
2.2.2. 메모 테이블에 +1 하고 순서를 바꾼 뒤 index 를 2 앞으로 이동한다.
(이유: 바뀐 값과 바로 앞 값도 비교해야함)
3. 메모에 적은 값을 모두 더해서 반환한다.
직접 옮길 생각을 하다니.... 대단하다.
코드 링크 (link )
'오늘의 공부 > 코딩테스트' 카테고리의 다른 글
[programmers] 자물쇠와 열쇠 (0) | 2020.05.12 |
---|---|
[Hacker Rank] Sherlock and Anagrams (0) | 2020.05.09 |
운영체제 알고리즘 SJF 와 디스크 컨트롤러 (0) | 2020.03.24 |
네트워크 Graph, BFS 알고리즘 (0) | 2020.02.27 |
[프로그래머스] 조이스틱 (0) | 2020.02.26 |