요새 시간때우기로 좋은 코딩테스트 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를 사용할때 사이즈를 비교해서 구문을 한번 더 나눴는데 다른사람껄 보니 사이즈 비교없이 두개를 다 넣어서 했다. 어차피 오류가 없기 때문인것 같다..
프로그래머스 코딩테스트 연습 -해시 3(위장) (0) | 2020.09.18 |
---|---|
프로그래머스 코딩테스트 연습 -해시 1(완주하지 못한 선수) (0) | 2020.09.16 |
C# 마지막 커서에 남아있는 문자 지우기 (0) | 2020.07.17 |
C# keybd_event를 이용해 키오스크 키패드 만들기 (0) | 2020.07.16 |
댓글 영역