본문 바로가기

온라인 코딩/연관 컨테이너(associate container)

[프로그래머스] 전화번호 목록

 

 

 

 

 

문제

 

소스코드

 

#include <string>
#include <vector>
#include<iostream>
using namespace std;

bool solution(vector<string> phone_book) {
    bool answer = true;
    bool is_stop = false;

    for (auto i = phone_book.begin(); i != phone_book.end(); ++i) {
        if (is_stop)break;
        for (auto j = i + 1; j != phone_book.end(); ++j) {
            std::string toWord = *i;
            std::string fromWord = *j;

            //1. 사이즈 만큼만 2번을 잘라내자
            if (i->size() < j->size()) {
                fromWord = { j->begin(),j->begin() + i->size() };
            }
            else {
                toWord = { i->begin(),i->begin() + j->size() };
            }
            if (fromWord == toWord) {
                answer = false;
                is_stop = true;
            }
        }
    }
    return answer;
}

 

 

후기

문제는 해쉬태그 인대 해쉬를 사용하지 않아도 풀린다.. 

이중 for문을 사용해서 했는데 다른 사람이 푼 문제를 보니 sort를 해서 한 번만 돌 수 있게 푼 것도 있었다 그런 생각 조차 하지 못했다. 좀 최적화해서 올리고 싶었지만 풀었던 그대로를 올리는 게 더 나을 거 같아서 통과한 그대로 올렸다.

 

substr()이라는 좋은 함수가 있는지도 몰랐다. 문자열 처리는 얼마나 많은 string 함수를 알고있냐가 핵심인 거 같다. 

문자열 처리에 약한만큼 풀기에는 좋은문제였다.

 

출처 및 레퍼런스

문제 링크:https://programmers.co.kr/learn/courses/30/lessons/42577