프로그래머스 _ 같은 숫자는 싫어
programmers.co.kr/learn/courses/30/lessons/12906
같은 실수를 반복하지 않기 위해 의식의 흐름을 적는다.
가장 먼저 든 생각 → 중복 제거? Python set을 이용하자!
하지만 10초만에 문제점이 떠올랐다.
1. set은 중복을 몽땅 제거해버린다! 우리가 원하는 건 연속된 숫자만 제거하는 것.
2. set은 dic 형태를 return 한다! 우리가 원하는 건 list 형태.
따라서 두번째 시도 → for문을 돌려 remove() 메서드를 이용하자!
뭐 이런 식으로...
arr의 i번째와 i+1번째가 같으면 i번째를 없애면 되지 않을까?
→ 당연히 안된다!
이렇게 하면 신나는 out of range 에러와 만날 수 있다.
왜? 맨 마지막 i를 돌릴 때 i+1는 arr에 존재하지 않으니까!
따라서... 기존 list에서 중복을 제외하는 게 아니라, 아예 새로운 list에 추가하면 어떨까?
answer이라는 새로운 list에 arr의 첫 번째 요소만 담아둔 후,
arr의 1번째와 차례로 비교해, 다르면 answer에 넣어주도록!
→ 그대로 코드를 쳐봤다.
여기서 비교를 하는 answer의 index는 arr에서 하나가 추가될 때마다 증가돼야 한다!
(그래야 추가된 다음 번째 요소와 비교가 가능하니까)
따라서 answer_num라는 숫자를 선언한 후 하나씩 증가하게 해 answer[0], answer[1], ... 번째와 비교하게 했다.
4점? 정도를 받았던 걸로 기억한다.
다른 사람의 풀이!
전체적인 흐름은 비슷한데... 슬라이싱과 continue를 사용한 점이 눈에 띈다!
우선 a[-1:]를 통해 list의 맨 마지막 숫자를 구해준다!
list s를 for문으로 돌려 각 인자를 a[-1:]과 비교! 다르면 a에 넣어준다.
그런데 왜 a[-1:]과 [i]를 비교한 것? i랑 비교하면 되지 않을까?
→ a[-1:]는 -1번째부터 끝까지 슬라이싱 한 새로운 list를 반환한다!!
따라서 이 list와 i를 비교하면? 당연히 같지 않다! i는 그냥 문자열이니까.
또한 continue를 사용해 if문이 참일 경우(두 숫자가 같을 경우) a.append를 실행하지 않고 건너뛰었다.
이를 통해 두 숫자가 다를 경우 a에 넣어줄 수 있는 것! 와우!
'source-code > Algorithm' 카테고리의 다른 글
프로그래머스 _ 내적 (0) | 2021.02.19 |
---|---|
프로그래머스 _ 두 개 뽑아서 더하기 (0) | 2021.02.18 |
프로그래머스 _ 실패율 (0) | 2021.02.17 |
프로그래머스 _ 이상한 문자 만들기 (0) | 2021.02.16 |
프로그래머스 _ 하샤드 수 (0) | 2021.02.15 |