티스토리 뷰
728x90
programmers.co.kr/learn/courses/30/lessons/17686
- 접근법
문제에서 요구하는 사항 그대로하면 되는 구현문제,
String형태로 파일명이 주어지고
파일명은 HEAD+NUMBER+TAIL로 구성된다.
HEAD : 파일명에서 숫자가 처음 등장할때까지의 문자
NUMBER : 숫자 (최대 5번 연속가능, 그 뒤에 나오는 숫자는 고려X)
TAIL : HEAD+NUMBER 제외한 나머지 모든 문자
이렇게 가공된 데이터를 가지고 정렬을 한다.
정렬 기준은
1. HEAD 사전순 (대소문자 구별X)
2. NUMBER 오름차순
3. 파일이 빨리 들어온 순서 (원래 주어진 입력의 순서)
내가 구현한 방식은 파일명을 받아 벡터에 구조체를 넣어 (원래 파일명, HEAD , NUMBER ,TAIL , 입력된 순서) 로 저장했고
이것을 기반으로 정렬했다.
- 소스코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; struct Info { string name; string head; string tail; int number; int ordered; }; vector<Info> db_files; string to_lower(string A) { for(int i=0;i<A.length();i++) { A[i]=tolower(A[i]); } return A; } Info get_Info(string A,int nums) { Info file_info; string temp=""; int idx; file_info.name=A; // 원본 파일명 A=to_lower(A); for(int i=0;i<A.length();i++) { if(A[i]>='0' && A[i]<='9') { file_info.head=temp; // HEAD temp=""; idx=i; break; } temp+=A[i]; } bool flag=true; for(int i=idx;i<idx+5;i++) { if(!(A[i]>='0' && A[i]<='9')) { flag=false; file_info.number=stoi(temp); // NUMBER temp=""; idx=i; break; } temp+=A[i]; } if(flag) { file_info.number=stoi(temp); temp=""; idx=A.length(); } for(int i=idx;i<A.length();i++) { temp+=A[i]; } file_info.tail=temp; // TAIL file_info.ordered=nums; // 들어온 순서 return file_info; } bool comp(const Info &A, const Info &B) { if(A.head.compare(B.head)==0) { if(A.number==B.number) { return A.ordered<B.ordered; } return A.number<B.number; } return A.head<B.head; } vector<string> solution(vector<string> files) { vector<string> answer; Info temp_file; for(int i=0;i<files.size();i++) { temp_file=get_Info(files[i],i+1); db_files.push_back(temp_file); } sort(db_files.begin(),db_files.end(),comp); for(int i=0;i<db_files.size();i++) { answer.push_back(db_files[i].name); } return answer; } | cs |
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[C/C++] Lv2 프로그래머스 - [3차] 압축 (0) | 2021.01.08 |
---|---|
[C/C++] Lv3 프로그래머스 - 보행자 천국 (0) | 2021.01.08 |
[C/C++] Lv4 프로그래머스 - 보석 쇼핑 (0) | 2021.01.07 |
[C/C++] Lv4 프로그래머스 - 단어 퍼즐 (0) | 2021.01.07 |
[C/C++] Lv4 프로그래머스 - 스티커모으기(2) (0) | 2021.01.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩테스트
- 프로그래머스
- 동적계획법
- NLP 구현
- 네트워킹데이
- Unet 구현
- Unet
- 브루트포스
- 부스트캠프 AI Tech
- C++
- 그리디
- 데이터연습
- pandas
- 이분탐색
- DACON
- Data Handling
- 데이터핸들링
- 알고리즘
- 백트래킹
- ResNet
- Vision AI 경진대회
- cnn
- 공공데이터
- python
- AI 프로젝트
- DeepLearning
- 백준
- 다이나믹프로그래밍
- dfs
- P-Stage
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함