일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 다이나믹 프로그래밍
- 알고리즘
- DirectX12
- 렌더링 파이프라인
- 스케줄링
- 멀티쓰레드
- 락
- 프로그래머스
- I/O장치
- 운영체제
- OS
- 그리디 알고리즘
- 타입 객체
- 파일시스템 구현
- 병행성 관련 오류
- codility
- 쓰레드
- 그리디알고리즘
- 다이나믹프로그래밍
- 멀티프로세서
- 자료구조
- 백준
- 디자인패턴
- 동적계획법
- 영속성
- Direct12
- DirectX 12
- 병행성
- 컨디션 변수
- directx
Archives
- Today
- Total
기록공간
전화번호 목록 (프로그래머스) 본문
반응형
접두어가 있는지 없는지만 찾으면 되는 문제였다.
우선 phone_book을 순회를 돌며 모든 원소에 대해 비교를 진행한다. 검사가 끝난 원소는 string를 key값으로, string의 사이즈를 value값으로 하는 unordered_map인 d라는 컨테이너에 들어간다. phone_book의 원소는 이 컨테이너 d 안에 있는 원소들과 비교를 한다. 접두어를 찾는 것이므로, 비교하는 값 둘 중 사이즈가 더 작은 값을 기준으로 부분 문자열 비교를 진행한다. 만약 검사하는 부분이 같으면 false를 리턴한다.
코드는 다음과 같다.
#include <string>
#include <cstring>
#include <vector>
#include <unordered_map>
using namespace std;
bool solution(vector<string> phone_book)
{
bool answer = true;
unordered_map<string, int> d;
for(const auto pb : phone_book)
{
for(const auto i : d)
{
int min = i.second < pb.size() ? i.second : pb.size();
if(!strncmp(pb.c_str(), i.first.c_str(), min))
{
answer = false;
return answer;
}
}
d[pb] = pb.size();
}
return answer;
}
반응형
'Algorithm > 문제' 카테고리의 다른 글
베스트앨범 (프로그래머스) (0) | 2020.05.11 |
---|---|
위장 (프로그래머스) (0) | 2020.05.11 |
완주하지 못한 선수(프로그래머스) (0) | 2020.05.08 |
가장 큰 수(프로그래머스) (0) | 2020.05.05 |
DNA (백준 - 1969번) (0) | 2020.03.29 |
Comments