💡 PS
[BOJ] 18269 Where Am I?
date
Mar 21, 2022
slug
boj-18269
author
status
Public
tags
PS
summary
Where Am I? 문제에 대한 풀이입니다.
type
Post
thumbnail
category
💡 PS
updatedAt
Aug 3, 2023 09:16 AM
언어
문제
풀이
이 문제는 해석하는게 좀 어려웠던거 같다…
문제 예시와 같이 ABCDABC가 주어졌다면, 앞쪽에 ABC가 있고 뒤쪽에 ABC가 있으므로 정답은 4이어야 한다.
나는 우선 입력받은 문자열을 tmp에 한번 더 저장해주었다. 그리고 이
tmp
를 가지고0 ~ tmp.size()-1
0 ~ tmp.size()-2
0 ~ tmp.size()-3
등등등…
의 문자열들을 순차적으로 확인해주었다.
만약, 해당 길이의 문자열이 다른 위치에 있을 경우, 그 문자열보다 길이를 더 줄일 수 없으므로 33번째 줄처럼 출력을 해주었다.
chk()
는 해당 길이의 문자열이 유니크한지 확인해주는 함수이다.코드
#include <iostream> #include <cstdio> #include <algorithm> #include <set> using namespace std; int n; string s; string tmp; int chk() { string k = tmp; set<string> st; st.insert(k); for(int i = tmp.size(); i < n; i++) { k += s[i]; k = k.substr(1); if (st.find(k) != st.end()) { st.clear(); return 0; } st.insert(k); } st.clear(); return 1; } int main() { scanf("%d", &n); cin >> s; tmp = s; for(int i = 0; i < n; i++) { if (!chk()) { printf("%d", tmp.size()+1); return 0; } tmp.pop_back(); } printf("1"); }