728x90
문제 링크
https://www.acmicpc.net/problem/1972
종강 기념으로 다시 알고리즘 시작한다! 길고 긴 학기였다...
해결 아이디어
문자열 처리 문제이다.
각 case에 대해 1부터 len-1 까지, 처음부터 끝까지 검사하고 ,
set를 이용해 하나도 겹치지 않고 나오는지 개수를 파악해서 검사했다.
총 n^3의 시간복잡도가 사용되겠지만 case수가 100개가 최대이므로 시간내에 돌아간다.
코드
#include <bits/stdc++.h>
using namespace std;
int main(void){
string s;
bool it = true;
while(it){
cin>>s;
if(s=="*"){
it=false;
break;
}
int len = s.length();
bool flag = true;
for(int i=1; i<=(len-1); i++){
set<string> sett;
for(int j=0; j<=len-i-1; j++){
string b;
b.push_back(s[j]);
b.push_back(s[j+i]);
sett.insert(b);
}
if(sett.size()!=len-i) flag=false;
if(!flag){
break;
}
}
if(!flag) cout<<s<<" is NOT surprising.\n";
else cout<<s<<" is surprising.\n";
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 3055 탈출 - 확산하는 물체가 2개 있을때 bfs를 돌려야 한다면? (0) | 2021.01.01 |
---|---|
백준 19236 청소년 상어 : 내가 했던 4가지 놓친 점들과 함께 (0) | 2020.11.20 |
백준 2872 - 우리집엔 도서관이 있어 c (0) | 2020.04.23 |
백준 1655 가운데를 말해요 : 우선순위 큐 두개로 가운데를 빠르게 c++ (2) | 2020.04.15 |
백준 2206 벽부수고 이동하기 - 이제는 3차원 visited 배열이 필요하다. c++ (2) | 2020.04.07 |