Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- boj #baekjoon
- flutter #플러터
- 비주얼 스튜디오 #vs #visual studio
- boj #baekjoon #c++
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과정
- flutter #상태관리
- flutter #git
- unity #2d-game #minigame #vscode
- flutter #플러터 #분석
- Flutter
- 인턴 #프론트엔드 #개발자 #프론트엔드개발자 #취준
- 백준 #boj
- baekjoon #boj #c++
- boj #c++
- 백준 #c++
- firebase #파이어베이스
- 플러터 #flutter #restful #rest api
- baekjoon #백준 #boj
- 로컬저장소 #이름변경
- 비주얼스튜디오 #코드스니펫
- VS #비주얼스튜디오
- 백준
- flutter #firebase #플러터 #파이어베이스 #연동
- flutter #todolist
- flutter #깃
- 유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #리액트프로젝트 #프론트엔드개발자양성과정 #개발자교육과
- flutter #app #취준
- unity #2d-game
- git #unity #깃허브
- 백준 #boj #baekjoon
Archives
- Today
- Total
cococo-coding
[C++ 풀이] 1181번. 단어 정렬 본문
문제 분석 요약
n개의 단어를 입력받아
1. 길이가 짧은 애들 먼저
2. 길이가 같다면 사전 순으로 정렬
3. 중복은 없어야 함
위 세가지 조건들을 만족해서 한줄에 하나의 단어씩 출력하는 문제이다.
알고리즘 설계
단어를 저장할 string형 벡터를 선언하고, 크기는 n으로 설정한다.
n번만큼 단어를 입력받아 벡터에 쌓는다.
위의 세가지 조건들을 구현하기 위해 sort정렬을 이용할건데,
기본적으로 sort(v.begin(), v.end())와 같이 쓰면 사전순으로 오름차순 정렬이 된다.
그렇지만 우리는 그전에 길이순 정렬이 먼저이므로, sort의 세번째 인자인 cmp를 추가해서 길이순 정렬을 구현한다.
sort(v.begin(), v.end(), cmp);
cmp는 메인함수 이전에 다음과 같이 정의했다.
bool cmp(string a, string b) {
if (a.length() == b.length()) {
return a < b; //a와 b의 길이가 같은 경우는 사전순(오름차순)으로
}
else {
return a.length() < b.length();
}
}
리턴값은 bool형이고, string형인 매개변수 a,b를 받는다.
만약 a와 b의 길이가 같다면 오름차순(a<b)으로 리턴하고,
길이가 다르다면 길이가 짧은 순으로(a.length<b.length) 리턴한다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string a, string b) {
if (a.length() == b.length()) {
return a < b; //a와 b의 길이가 같은 경우는 사전순(오름차순)으로
}
else {
return a.length() < b.length();
}
}
int main() {
//1
int n;
cin >> n;
//2
vector <string> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
//3
sort(v.begin(), v.end(), cmp);
cout << v[0] << '\n';
for (int i = 1; i < n; i++) {
if(v[i]!=v[i-1])
cout << v[i] << '\n';
}
return 0;
}
느낀점
sort정렬에 세번째 인자를 통해 내가 원하는 형식으로 정렬할 수 있다.
'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글
[C++ 풀이] 1871번. 좋은 자동차 번호판 (2) | 2024.01.23 |
---|---|
[C++ 풀이] 2702번. 초6 수학 (1) | 2024.01.22 |
[C++ 풀이] 1032번. 명령 프롬프트 (0) | 2024.01.21 |
[C++ 풀이] 2501번. 약수 구하기 (1) | 2024.01.21 |
[C++ 풀이] 11656번. 접미사 배열 (0) | 2024.01.19 |