문제 설명
아래 주어진 4개의 패턴의 문자에서 (아티스트 명)과 (곡 제목)이 중복되는 것을 제외한 유니크한 숫자를 구하는 문제입니다.- (트랙 번호)_(아티스트 명)_(곡 제목).mp3
- (트랙 번호). (아티스트 명) - (곡 제목).mp3
- (아티스트 명) - (곡 제목).mp3
- (아티스트 명)_(곡 제목).mp3
입력값은 다음과 같으며, 비교시 대소문자는 구분하지 않습니다.
(트랙 번호) : 0 ~ 9 숫자,
(아티스트 명), (곡 제목) : 공백, 숫자, 영문자, 괄호 '(', ')'
문제 풀이
패턴이 주어졌으므로 주어진 패턴으로 파싱해서 String 값을 비교하면 되는 간단한 문제입니다.트랙번호가 있는 패턴이 있고 없는 패턴이 있으므로, 파싱은 뒤에서부터 하는게 좋을 것 같네요.
뒤에서부터 char 값을 비교하여 '-' 또는 '_' 가 나올 때까지가 곡 제목.
곡 제목의 구분기호 부터 '-', '_', '.' 가 나올 때까지가 아티스트 명이 됩니다.
Show Spoiler : 숨겨진 내용은 제가 이 문제를 해결한 핵심 내용으로 문제를 푸는데 대한 힌트가 될 수 있습니다. 숨겨진 내용을 보시고자 하는 분만 클릭하여 주시기 바랍니다.Close Spoiler
문제를 푸는 방법은 여러가지가 있습니다.
제가 구현한 방식처럼 속도를 크게 신경쓰지 않는다면, 위와같이 파싱 후 하나의 패턴으로 만들어서 Set 에 넣은 후 최종 Set의 size를 구하는 식으로도 구할 수 있습니다.
또한 이진탐색트리로 정렬해 가며 직접 유니크한 수를 구할 수도 있을 것 같구요.
String 자체가 비교하기에는 시간이 오래걸리니 해쉬값을 구해서 비교를 해도 좋을 것입니다.
단, 해쉬를 구하는 연산은 속도가 빠르면서 중복이 잘 되지 않도록 고려해야 겠지요.
물론 문제가 무한정 많은 것은 아니기 때문에 쉽고 단순한 연산만으로도 중복이 일어날 확률이 크지는 않을 것 같네요.
지금은 간단히 Set에 String 을 넣는 방법으로 문제를 해결했지만 다음에는 좀 더 대폭 감소하는 것에 도전을 할까 합니다.
== 소스보기 ==
제가 구현한 방식처럼 속도를 크게 신경쓰지 않는다면, 위와같이 파싱 후 하나의 패턴으로 만들어서 Set 에 넣은 후 최종 Set의 size를 구하는 식으로도 구할 수 있습니다.
또한 이진탐색트리로 정렬해 가며 직접 유니크한 수를 구할 수도 있을 것 같구요.
String 자체가 비교하기에는 시간이 오래걸리니 해쉬값을 구해서 비교를 해도 좋을 것입니다.
단, 해쉬를 구하는 연산은 속도가 빠르면서 중복이 잘 되지 않도록 고려해야 겠지요.
물론 문제가 무한정 많은 것은 아니기 때문에 쉽고 단순한 연산만으로도 중복이 일어날 확률이 크지는 않을 것 같네요.
지금은 간단히 Set에 String 을 넣는 방법으로 문제를 해결했지만 다음에는 좀 더 대폭 감소하는 것에 도전을 할까 합니다.
== 소스보기 ==
결과
#
458672
문제
JEONGLIBE
언어
cpp
길이
889B
수행시간
72ms
결과
정답
제출일
2016-08-23
댓글 없음:
댓글 쓰기