상세 컨텐츠

본문 제목

프로그래머스 코딩테스트 연습 -해시 2(전화번호 목록)

개발관련

by 프로왓칭맨 2020. 9. 17. 12:48

본문

요새 시간때우기로 좋은 코딩테스트 2번째 전화번호 목록!!

 

해당 내용 URL은 다음과 같다 (programmers.co.kr/learn/courses/30/lessons/42577)

 

사실 이런 코딩테스트는 읽어서 이해하는데가 제일 귀찮다.

 

어떤 프로젝트를 가도 해당 경력 우선하는 이유가 이것과 관련이 있다고 볼 수 있는데 어떻게 작성해야 하는지를 알기위해선 뭘 원하는지를 먼저 파악해야 하기때문이다.

 

보통 말로는 이해가 잘 안가도 입력과 출력예제만 몇개주면 쉽게 이해가 가능하다.

 

이번 문제는 여러 전화번호 목록중에 접두사가 같은게 있으면 false, 없으면 true를 리턴해주면 된다.

(보통 같은게 있으면 true라고 생각해서 처음에 별 생각없이 실행눌렀다가 결과가 반대로 나오길래 수정했다)

 

"접두사" 뭔가 어려운 단어지만 그냥 쉽게 시작부분이다.

 

이번 문제도 C#이 없고 게다가 javascript도 없다...

 

애초에 마이크로소프트가 C#을 만들때 자바를 참고했다고 할만큼 비슷하기도 하고 접해본 경험도 있으므로 자바로 선택!

 

역시나 for, if만으로 끝냈기때문에 무슨 언어이냐는 사소한 차이일 뿐이었다.

 

이 문제는 사실 접수어 찾기는 startsWith라는 좋은 기능이(다행히 C#, JAVA에 모두 있다) 있기에 해결하는데 어렵진 않았다.

 

다만, 몇개나 들어올지 모르는(100개 이하라고 제한이 있긴함) 목록을 어떻게 비교할지가 문제였다.

 

항상 이럴때 나오는 N개 중 M개를 뽑는 경우의 수 어쩌고의 공식을 생각하지만 그런건 너무 머리가 아파지므로 그냥 무식하게 생각했다.

 

내 방법은 이렇다.

 

1. 일단 맨 처음놈이랑 나머지를 비교한다. 

2. 그 다음놈이랑 나머지를 비교한다.

 

즉, [12,123,1235,567,88] 이렇게 들어오면 12랑 123,1235,567,88을 비교하고, 123이랑 1235,567,88을 비교하고 1235랑 567,88을 비교하고... 이런식으로 생각하면 이중for문으로 쉽게 구현할 수 있기때문에 이런 방식을 썼다.

 

그리고 통과하고 다른사람의 풀이를 봤는데 비슷한 방식을 썼길래 이게 맞는구나 싶었다.

 

다만 역시나 다른사람은 훨씬 깔끔하고 보기 좋게 풀어냈더라...

 

 

내 풀이는 아래와 같다.

항상 풀고나면 나의 코드가 부끄러워질정도로 다른사람들은 항상 잘 짜는 것 같다.

 

startsWith를 사용할때 사이즈를 비교해서 구문을 한번 더 나눴는데 다른사람껄 보니 사이즈 비교없이 두개를 다 넣어서 했다. 어차피 오류가 없기 때문인것 같다..

관련글 더보기

댓글 영역