halang-log
💡 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"); }