반응형
📖 문제
📋 코드
#include<iostream>
#include<string>
#include<algorithm>
#include<set>
using namespace std;
set<string> s;
int main() {
int N, K, t;
cin >> N;
for (int i = 0; i < N; i++){
cin >> K;
string tmp = "";
string str = "";
for (int j = 0; j < K; j++)
{
cin >> tmp;
str += "*"+tmp;
s.insert(str);
}
}
for (auto value : s) {
int cnt = count(value.begin(), value.end(), '*');
int pos = value.find_last_of("*");
string tmp = value.substr(pos+1);
for (int i = 0; i < cnt - 1; i++) cout << "--";
cout << tmp << '\n';
}
}
👨🏻💻 결과
📕 풀이 방법
set<string> s;
int main() {
int N, K, t;
cin >> N;
for (int i = 0; i < N; i++){
cin >> K;
string tmp = "";
string str = "";
for (int j = 0; j < K; j++)
{
cin >> tmp;
str += "*"+tmp;
s.insert(str);
}
}
for (auto value : s) {
cout << value << '\n';
}
}
set 자료구조는 중복 데이터를 없애주고 정렬까지 해주는 역할을 합니다.
예제 입력 2로 설명을 드리자면!
4
2 KIWI BANANA
2 KIWI APPLE
2 APPLE APPLE
3 APPLE BANANA KIWI
위의 데이터로 입력이 들어오면 set에는
*APPLE
*APPLE*APPLE
*APPLE*BANANA
*APPLE*BANANA*KIWI
*KIWI
*KIWI*APPLE
*KIWI*BANANA
와 같이 데이터들이 insert 됩니다.
for (auto value : s) {
int cnt = count(value.begin(), value.end(), '*');
int pos = value.find_last_of("*");
string tmp = value.substr(pos+1);
for (int i = 0; i < cnt - 1; i++) cout << "--";
cout << tmp << '\n';
}
여기서 "*"의 개수 -1 만큼 "--"를 출력해주고 마지막 "*" 이후의 문자열을 출력하면
APPLE
--APPLE
--BANANA
----KIWI
KIWI
--APPLE
--BANANA
위와 같은 모양이 출력될 것입니다.
🔗 링크
https://www.acmicpc.net/problem/14725
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C++] 백준 18111번 - 마인크래프트 (0) | 2022.01.29 |
---|---|
[JAVA] 백준 5430번 - AC (0) | 2022.01.10 |
[JAVA] 백준 1021번 - 회전하는 큐 (1) | 2022.01.10 |
[JAVA] 백준 1966번 - 프린터 큐 (0) | 2022.01.04 |
[JAVA] 백준 18258번 - 큐 2 (0) | 2021.12.07 |