Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 1254번 - νŒ°λ¦°λ“œλ‘¬ λ§Œλ“€κΈ°

dkswnkk 2022. 3. 26. 23:09

문제

 

1254번: νŒ°λ¦°λ“œλ‘¬ λ§Œλ“€κΈ°

λ™ν˜Έμ™€ κ·œμ™„μ΄λŠ” 212ν˜Έμ—μ„œ λ¬Έμžμ—΄μ— λŒ€ν•΄ κ³΅λΆ€ν•˜κ³  μžˆλ‹€. κ·œμ™„μ΄λŠ” νŒ°λ¦°λ“œλ‘¬μ„ μ—„μ²­λ‚˜κ²Œ μ’‹μ•„ν•œλ‹€. νŒ°λ¦°λ“œλ‘¬μ΄λž€ μ•žμ—μ„œλΆ€ν„° μ½μœΌλ‚˜ λ’€μ—μ„œλΆ€ν„° μ½μœΌλ‚˜ κ°™κ²Œ μ½νžˆλŠ” λ¬Έμžμ—΄μ„ λ§ν•œλ‹€. λ™ν˜ΈλŠ”

www.acmicpc.net

 

μ½”λ“œ

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;


bool isPalindrom(string inp){
    string temp = inp;
    reverse(inp.begin(), inp.end());
    if(temp==inp) return true;
    return false;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    string s; cin>>s;
    int ans = 1e9;
    string temp = s;
    reverse(temp.begin(),temp.end());
    if(s==temp){
        cout<<s.length();
        return 0;
    }
    
    for(int i=0; i<s.length(); i++){
        string temp = s.substr(i,s.length());
        if(isPalindrom(temp)){
            int len = s.length()-temp.length();
            ans = min(ans, len);
        }
    }
    if(ans==1e9) cout<<s.length()*2;
    cout<<ans+s.length();
}

 

풀이

문제 κ΅¬ν˜„ 방법은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  1. ν˜„μž¬ λ¬Έμžκ°€ νŽ λ¦°λ“œλ‘¬μ΄λΌλ©΄ ν˜„μž¬ 문자의 길이λ₯Ό λ°”λ‘œ 좜λ ₯ν•©λ‹ˆλ‹€.
  2. ν˜„μž¬ λ¬Έμžκ°€ νŽ λ¦°λ“œλ‘¬μ΄ μ•„λ‹ˆλΌλ©΄ ν˜„μž¬ 문자λ₯Ό μͺΌκ°°μ„ λ•Œ μ‘΄μž¬ν•˜λŠ” νŽ λ¦°λ“œλ‘¬μ„ μ°ΎμŠ΅λ‹ˆλ‹€.
  3. ν˜„μž¬ λ¬Έμžμ—μ„œ νŽ λ¦°λ“œλ‘¬μ„ λΉΌκ³  남은 문자λ₯Ό λ’€μ§‘μ–΄μ„œ λΆ™μ—¬μ£Όλ©΄ νŽ λ¦°λ“œλ‘¬μ΄ λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.

2번과 3λ²ˆμ— λŒ€ν•΄μ„œ 더 μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μž…μΆœλ ₯ "acaa"κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. ν˜„μž¬ 이 문자 μ•ˆμ—μ„œ μ‘΄μž¬ν•˜λŠ” νŽ λ¦°λ“œλ‘¬μ€ "aca"와 "aa"μž…λ‹ˆλ‹€.

  • "aca"일 λ•ŒλŠ” "acaa"μ—μ„œ "aca"λ₯Ό μ œμ™Έν•œ "a"λ₯Ό λ’€μ§‘μ–΄μ„œ λΆ™μ—¬μ£Όλ©΄ "aacaa"둜 νŽ λ¦°λ“œλ‘¬μ΄ μ™„μ„±λ©λ‹ˆλ‹€. 
  • "aa"일 λ•ŒλŠ” "acaa"μ—μ„œ "aa"λ₯Ό μ œμ™Έν•œ "ac"λ₯Ό λ’€μ§‘μ–΄μ„œ λΆ™μ—¬μ£Όλ©΄  "acaaca"둜 νŽ λ¦°λ“œλ‘¬μ΄ μ™„μ„±λ©λ‹ˆλ‹€.

λ¬Έμ œμ—μ„œλŠ” κ°€μž₯ 짧은 νŽ λ¦°λ“œλ‘¬μ„ 좜λ ₯ν•˜λΌκ³  ν–ˆκΈ° λ•Œλ¬Έμ— "aacaa"의 길이인 5λ₯Ό 좜λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.