https://www.acmicpc.net/problem/1181
오늘은 정렬 관련하여 복습할겸.. 관련 문제를 풀어보도록했다.
sort 사용방법은 정말 한번 얼핏 보고 복습안했던거라 검색으로 참조하였다.
sort 사용법과 정렬을 위한 compare 함수의 사용법을 확인할 수 있었다.
compare 함수에서 문자열 배열의 처음부터 끝까지 비교하는 것과
비교해서 같은순서에 문자가 아스키코드르 작은순서 정렬 시키는 것
다시한번 참조하는 아스키코드..
전체의 길이자체가 같지않을때 길이가 더 짧은순서로 정렬하는 부분을 이번에 새롭게 배웠다.
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#define fastio cin.tie(0)->ios::sync_with_stdio(0); cout.tie(0); // 시간단축 매크로
using namespace std;
bool compare(string a, string b) // 두개의 단어 비교 함수 (true & false)
{
if (a.length() == b.length()) // 두단어의 길이가 같다면
{
for (int i = 0; i < a.length(); i++) // 시작부터 끝까지
{
if (a[i] != b[i]) // 같은위치의 문자가 다르다면
return a[i] < b[i]; // a가 더 작음 으로 반환
}
}
return a.length() < b.length(); // a의 길이가 더 작음으로 반환
}
int main()
{
fastio;
int strnum;
string tmp;
cin >> strnum; // 비교할 문자 갯수 입력
vector<string> strarr; // 스트링형태의 벡터 배열
for (int i = 0; i < strnum; i++) // 0 ~ 비교할 문자 갯수까지 반복
{
cin >> tmp; // 문자입력받아서
strarr.push_back(tmp); // 배열에 푸시백
}
sort(strarr.begin(), strarr.end(), compare); // 비교함수를 통한 정렬
cout << strarr[0] << '\n'; // 한자리 문자만 처음에 출력
for (int i = 1; i < strnum; i++)
{
if (strarr[i - 1] == strarr[i]) continue; // 앞자리문자와 바로뒷자리 문자가 같다면 건너뛰기
// 같은 길이 같은 문자는 출력 x
cout << strarr[i] << '\n'; // 순서대로 출력
}
return 0;
}
'백준' 카테고리의 다른 글
[백준/C++] 10845 큐 (0) | 2023.05.03 |
---|---|
[백준/C++] 2485 가로수 (유클리드호제법, 최대공약수) (0) | 2023.05.02 |
[백준/C++] 1914 하노이 탑 (0) | 2023.04.25 |
[백준/C++] 1094 막대기 (0) | 2023.04.10 |
[백준/C++] 1010 다리놓기 (0) | 2023.04.07 |
댓글