본문 바로가기
python

2020.08.21 알고리즘_같은 숫자는 싫어

by 해맑은 코린이 2020. 8. 21.

2020.08.21 같은 숫자는 싫어__알고리즘 정리노트

오늘은 k번째 수와 함께 미뤄왔던 같은 숫자는 싫어... 생각한대로 풀었던 과정 노트.

 

출처 - 프로그래머스

처음 생각한 방법 ( 빨간색은 인덴트가 잘못되었다는 말인데 실행시키고 된다면 딱히 신경 안써도 된다.)

for문으로 돌려서 요소하나와 그 다음요소를 비교해서 같지 않으면 i를 새로운 리스트에다가 넣어주고

같으면 i를 지우자라고 생각했다.

 

 

결과는 참혹.. 그대로 출력이 되어버렸다. 뭐가 잘못된 것일까라고 생각하는 중..

 

 

그래서 i와 i+1을 찍어보았다.

 

 

여기서 멍청함이 또 보인다. 우리는 i번째와 i+1번째를 찍어줘야했는데 말그대로 그냥 i에다가 i+1을 해줬으니 리스트 안 요소인 숫자에다가 +1을 해줬으니 달라질 수 밖에.. 진짜 바보다..

 

그래서 우리는 i번째를 찍어주기 위해, 인덱싱을 사용한다!

 

 

그래서 또 단순하게 생각해서 i 번째랑 바로 옆의 값인 i+1번째 값을 비교해서 같지 않으면 new_list에다가 붙여주었다.

또한 중복되지 않는 수만 리스트에 추가해주면 되니 같으면 지워주라는 else문은 굳이 필요하지 않아 삭제했다.

 

여기서 하나 !

 

range함수와 len 함수 정리

 

왜 여기서 이 두개를 써줬느냐!

 

range

함수는 범위를 지정해주는 함수이다. range(a,b) 는 a이상 b미만의 범위를 가진다!

 

len

len은 리스트 안의 요소갯수를 돌려주는 함수이다! [1,2,3,4]라는 리스트가 있다면, len은 4가 된다.

 

 

그래서 저렇게 왜써줬느냐 우리는 i를 리스트 안의 요소로 인덱싱하게 되면 i 자체가 요소가 되니까,

[4,4,3,3,2,2] 가 있을 때 4가 튀어나오므로 0번째 숫자부터 인덱싱 해주지 않고 4번째숫자부터 튀어 나오게 되기 때문에,

우리는 len함수를 써서 for문을 돌려주는 것이다!

 

 

 

 

보기 쉽게 프린트를 통해 눈으로 한번 봐보는게 쉬울 거 같아 이렇게 치고 프린트하면,

 

 

 

길이가 6개이고, 0번째부터 시작하는 arr 리스트의 숫자들이 나온다.

 

자자 다시 돌아가서 

 

 

 

 

이렇게 해주면 0번째 1번째부터 비교해서 돌아갈까?

 

 

 

결과는!

 

 

 

 

또또 에러... 왜 그런가 생각해보니 우리는 간과한것이있다... 

 

 

 

 

또 프린트 i+1번째를 찍어보자.

 

 

 

 

ㅇㅎ.. 우리 맨 마지막번째인 거에서부터는 1을 더해주면 리스트 밖으로 가기 때문에 지금 에러가 난다...또 멍청함을 깨닫고

 

 

 

 

+에서 -로 바꿔서 해주었다. 파이썬에서는 역순으로 읽는기능에서 -를 사용하기 때문에 이것은 읽힐 것이다!

 

 

 

 

헝.... 첫번째 값이 안나온다.... 또 생각을 굴려보자 

첫번째는 생각해보니 두번째값과 비교를 못하고 -1값 즉 맨끝의 숫자와 비교가 되기 때문에 첫번째만 안된다..

 

그럼 첫번째 값 즉, 0번째인 케이스만 빼면 되는 것이다! 그래서 나는 

 

 

 

이렇게 0번째 값만 따로 빼서 올려주었다. 0번째값은 무조건 올려주고 1번째부터는 그 전번째와 비교하여 같지 않으면 리스트에 추가해주면!

결과 보기전에 잠깐,

 

if문의 구조는 간단하게 맨 위 조건에는 if를 써주고 조건을 추가할 때는 elif를 쓰고(여러 개 쓸 수 있음.) 맨 마지막에는 else(생략 가능) 를 쓰면된다. 

 

자 이제 결과! 

정답 맞추고  포스팅 적으면서 다시 제출해서 점수는 없다 5점받아따 ^^ (tmi)

 

캬캬 성공 후 저번에는 왜 못했냐 싶겠지만... 내가 정리해서 글치 사실상 포스팅보다 프린트를 매ㅐㅐㅐㅐㅐㅐ우 무수ㅜㅜㅜㅜㅜ히 많이 찍어서 하나하나 생각해본 결과다.. 그래서 넘 뿌듯했다 히히히

 

 

 

근데 다른 사람의 코드 풀이를 보다가(프로그래머스에는 제출 후 다른 사람 코드를 볼 수 가 있다.)

enumerate 라는 함수를 발견했다. ( 살짝 풀이에는 틀린 면이 있어서 가져오진 않겠다.)

 

그래서 마지막으로 enumerate 함수만 공부해보자!

 

enumerate

란 열거하다라는 뜻으로 인덱스 값을 포함하는  enumerate객체를 돌려준다. 보통 for문과 같이 쓴다.

뭔 말인지 모르겠으므로 직접 그냥 코드로 쳐보자.

 

 

 

 

 

a라는 리스트가 있고 이것을 for문을 돌려서 b리스트에 추가해주면 

 

 

 

 

이런식으로 몇번째 숫자와 함께 값을 돌려준다! 이렇게 순서를 비교하는 함수를 써서 비교해줄 수도 있었겠구나 생각함.

 

오늘은 진짜 이것으로 끝!

댓글