본문 바로가기
source-code/Algorithm

프로그래머스 _ 같은 숫자는 싫어

by mattew4483 2021. 2. 14.
728x90
반응형

프로그래머스 _ 같은 숫자는 싫어

programmers.co.kr/learn/courses/30/lessons/12906

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr


같은 실수를 반복하지 않기 위해 의식의 흐름을 적는다.

 

가장 먼저 든 생각 → 중복 제거? 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에 넣어줄 수 있는 것! 와우!

 

 

 

728x90
반응형