티스토리 뷰

이 글에서는 프로그래머스 - 전화번호 목록 문제에 대해 다뤄보겠습니다. 문제 풀이는 C++로 이루어져 있고 함께 들어가 있는 개념들도 간단히 정리 해보는 형식으로 작성되었으므로 오타등의 오류가 있을 수 있습니다. 오류 발견시 댓글로 꼭 말씀해주세요! 시작해볼까요?

 


풀이 1

몇일 전까지 분산 시스템 과제 중 하나였던 udp socket programming에서 remote file access와 관련된 다양한 기능들을 c++로 구현하다보니 string class와 관련된 검색을 한 시간에 못해도 열번은 하지 않았나 싶습니다. 당시에 할 때는 같은 내용을 자꾸 찾고 또 찾고 하다보니 이렇게 기억에 안남을까 답답해 하고는 했는데 그 때 그렇게 찾으면서 했던 노력들이 오늘 이 문제를 풀려고 남아 있었던 것인가 봅니다 키키키 남지 않는 과제는 없으니 열허분 과제 열심히 하자구횻ㅋㅋ

 

for문 내에 첫 번째 if문인 longPhone.length() <= shortPhone.length() 문구가 없다면 정확성 테스트는 통과할 지라도 효율성 테스트는 통과하지 못합니다. 왜냐하면 vector의 양 끝단에서 시작한 i 와 j가 교차가 되는 시점을 지나 중복되게 find를 실행할 수 있게 되기 때문입니다. 즉, 한번은 (하단 그림 참조) shortPhone = "12" 일 때 longPhone = "3456" 이었다가 다른 한 번은 shortPhone  "3456", longPhone = "12"가 되는 순간이 오기 때문입니다. 

채점 결과  : 정확성 테스트(84.6) + 효율성 테스트(15.4) = 100.0


풀이 2

풀이 1 대로 풀어서 아주 무난하게 통과를 한 후 룰루랄라 다른 사람들의 풀이를 들어가봤는데 댐잇~ 제가 문제를 풀며 간과한 사실이

   [1] 문자열이 내부에 있는 것을 묻는 문제가 아니라 접두어 인지를 묻는 문제

   [2] sorting의 alphabetical order는 length 와는 전혀 상관 없다는 것 (즉, sorting을 했을 경우 12 다음 1234가 오는 것이 당연한데 12 - 234 - 345 - 1234 - 3456가 될 것이라고 생각했던 것이죠...ㅎ)

이로써 다시 한 번 문제를 똑바로 제대로 읽어야 하는 이유를 체감하고 있습니다.

채점 결과  : 정확성 테스트(84.6) + 효율성 테스트(15.4) = 100.0

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함