2020 KAKAO BLIND RECRUITMENT
๋ฌธ์์ด ์์ถ
๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ณ ์ถ์ ์ดํผ์น๋ ๋ฌธ์์ด์ ์์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์ ๋๋์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ๋จํ ๋น์์ค ์์ถ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๊ณ ์๋๋ฐ, ๋ฌธ์์ด์์ ๊ฐ์ ๊ฐ์ด ์ฐ์ํด์ ๋ํ๋๋ ๊ฒ์ ๊ทธ ๋ฌธ์์ ๊ฐ์์ ๋ฐ๋ณต๋๋ ๊ฐ์ผ๋ก ํํํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ์ค์ฌ์ ํํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๊ณ ์์ต๋๋ค.
๊ฐ๋จํ ์๋ก aabbaccc์ ๊ฒฝ์ฐ 2a2ba3c(๋ฌธ์๊ฐ ๋ฐ๋ณต๋์ง ์์ ํ๋ฒ๋ง ๋ํ๋ ๊ฒฝ์ฐ 1์ ์๋ตํจ)์ ๊ฐ์ด ํํํ ์ ์๋๋ฐ, ์ด๋ฌํ ๋ฐฉ์์ ๋ฐ๋ณต๋๋ ๋ฌธ์๊ฐ ์ ์ ๊ฒฝ์ฐ ์์ถ๋ฅ ์ด ๋ฎ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด, abcabcdede์ ๊ฐ์ ๋ฌธ์์ด์ ์ ํ ์์ถ๋์ง ์์ต๋๋ค. ์ดํผ์น๋ ์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฌธ์์ด์ 1๊ฐ ์ด์์ ๋จ์๋ก ์๋ผ์ ์์ถํ์ฌ ๋ ์งง์ ๋ฌธ์์ด๋ก ํํํ ์ ์๋์ง ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ababcdcdababcdcd์ ๊ฒฝ์ฐ ๋ฌธ์๋ฅผ 1๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด ์ ํ ์์ถ๋์ง ์์ง๋ง, 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด 2ab2cd2ab2cd๋ก ํํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก 8๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ค๋ฉด 2ababcdcd๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ด๋๊ฐ ๊ฐ์ฅ ์งง๊ฒ ์์ถํ์ฌ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค๋ฅธ ์๋ก, abcabcdede์ ๊ฐ์ ๊ฒฝ์ฐ, ๋ฌธ์๋ฅผ 2๊ฐ ๋จ์๋ก ์๋ผ์ ์์ถํ๋ฉด abcabc2de๊ฐ ๋์ง๋ง, 3๊ฐ ๋จ์๋ก ์๋ฅธ๋ค๋ฉด 2abcdede๊ฐ ๋์ด 3๊ฐ ๋จ์๊ฐ ๊ฐ์ฅ ์งง์ ์์ถ ๋ฐฉ๋ฒ์ด ๋ฉ๋๋ค. ์ด๋ 3๊ฐ ๋จ์๋ก ์๋ฅด๊ณ ๋ง์ง๋ง์ ๋จ๋ ๋ฌธ์์ด์ ๊ทธ๋๋ก ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ถํ ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์ ์ค๋ช ํ ๋ฐฉ๋ฒ์ผ๋ก 1๊ฐ ์ด์ ๋จ์๋ก ๋ฌธ์์ด์ ์๋ผ ์์ถํ์ฌ ํํํ ๋ฌธ์์ด ์ค ๊ฐ์ฅ ์งง์ ๊ฒ์ ๊ธธ์ด๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- s์ ๊ธธ์ด๋ 1 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- s๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
s | result |
---|---|
"aabbaccc" |
7 |
"ababcdcdababcdcd" |
9 |
"abcabcdede" |
8 |
"abcabcabcabcdededededede" |
14 |
"xababcdcdababcdcd" |
17 |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์์ด์ 1๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
๋ฌธ์์ด์ 8๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #3
๋ฌธ์์ด์ 3๊ฐ ๋จ์๋ก ์๋ผ ์์ถํ์ ๋ ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #4
๋ฌธ์์ด์ 2๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด abcabcabcabc6de ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 3๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด 4abcdededededede ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 4๊ฐ ๋จ์๋ก ์๋ฅด๋ฉด abcabcabcabc3dede ๊ฐ ๋ฉ๋๋ค.
๋ฌธ์์ด์ 6๊ฐ ๋จ์๋ก ์๋ฅผ ๊ฒฝ์ฐ 2abcabc2dedede๊ฐ ๋๋ฉฐ, ์ด๋์ ๊ธธ์ด๊ฐ 14๋ก ๊ฐ์ฅ ์งง์ต๋๋ค.
์ ์ถ๋ ฅ ์ #5
๋ฌธ์์ด์ ์ ์ผ ์๋ถํฐ ์ ํด์ง ๊ธธ์ด๋งํผ ์๋ผ์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ฃผ์ด์ง ๋ฌธ์์ด์ x / ababcdcd / ababcdcd ๋ก ์๋ฅด๋ ๊ฒ์ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
์ฝ๋
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 1e9;
for(int i=1; i<=s.length()/2+1; i++){
string str="";
int repeat_num=1;
string repeat_string = s.substr(0,i);
int index = i;
while(index<s.length()){
string tmp_string = "";
for(int j=0; j<i; j++){
if(index<s.length())
tmp_string +=s[index++];
else
break;
}
if(tmp_string==repeat_string){
repeat_num++;
continue;
}else{
if(repeat_num>1)
str += (to_string(repeat_num)+repeat_string);
else{
for(int k=0; k<repeat_num; k++)
str+= repeat_string;
}
repeat_string = tmp_string;
repeat_num=1;
}
}
if(repeat_num>1)
str += (to_string(repeat_num)+repeat_string);
else{
for(int k=0; k<repeat_num; k++)
str+= repeat_string;
}
if(str.length()<answer)
answer = str.length();
}
return answer;
}
์ฃผ์
for๋ฌธ์ ๋ฒ์๋ฅผ
i<=s.length()/2+1
๊น์ง๋ก ์ก์์ฃผ์ด์ผ ํ๋ค. ์๋๋ฉด ํ ์คํธ์ผ์ด์ค 5๋ฒ์ด ์คํจํ๋ค.
๊ฒฐ๊ณผ
ํ์ด
์ ๋ ฅ n์ด 10^3๋ฐ์ ์๋๋ ๊ฒ์ ๋ณด๊ณ , n^2์ผ๋ก ํ๋ฉด ์์ ํ์์ด ๊ฐ๋ฅํ๊ฒ ๋ค๊ณ ์๊ฐํ์ฌ ์์ ํ์์ผ๋ก ํ์๋ค.
for(int i=1; i<s.length()/2+1; i++){
...
}
์ฐ์ , ์ฃผ์ด์ง ๋ฌธ์์ด์ ๊ธธ์ด 1/2๊น์ง ๋ฒ์๋ฅผ ๋๋ ค๊ฐ๋ฉด์ ํด๋น ๋ฒ์์ ๋ํ ๋ฌธ์์ด์ ์์ถ์ ์กฐ์ฌํ๋ค.
int repeat_num=1;
string repeat_string = s.substr(0,i);
.
.
.
if(repeat_num>1)
str += (to_string(repeat_num)+repeat_string);
else{
for(int k=0; k<repeat_num; k++)
str+= repeat_string;
}
์์์๋ถํฐ ์ฃผ์ด์ง ๋ฒ์(i)๋งํผ์ฉ ๋์ด์ ๋ช ๋ฒ ๋ฐ๋ณต๋๋์ง(repeat_num) ์กฐ์ฌํ ํ, ๋ฐ๋ณต๋๋ ์ซ์์ ๋ฐ๋ณต๋๋ ๋ฌธ์์ด์ ํฉ์ณ์ ๊ฒฐ๊ณผ ๋ฌธ์์ด(str)์ ํ์ํ์๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋ชจ๋ ๋ฒ์(i)์ ๋ํด์ ๋ฐ๋ณตํ์ฌ ๊ฐ์ฅ ์์ ๊ฒฐ๊ณผ ๋ฌธ์์ด(str)์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ฉด ์ ๋ต์ด ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ ํ์ด
substringํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ vector์ ๋ฃ์ด ์์๋๋ก vector์ ๋ด๊ธด ์์๋ค์ ์ดํด๋ณด๋ฉด์ ์ ๋ต์ ์ฐพ์ ์๋ ์๋ค. ์ด๋ ๊ฒ ๊ตฌํํ ๊ฒฝ์ฐ,
- ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ for๋ฌธ (n)
- ๋ฒ์๋๋ก ๋ฌธ์์ด์ ๋๋๋ for๋ฌธ (n)
- ๋๋์ด์ง ๋ฌธ์์ด์ ๋ด์ vector๋ฅผ ์กฐ์ฌํ๋ for๋ฌธ (O(n))
์ด๋ ๊ฒ 3๋ฒ์ for๋ฌธ์ด ์๊ธด๋ค. ๋ฐ๋ผ์ ์๊ฐ๋ณต์ก๋๊ฐ n(n+O(n)) ์ด๋ค.
๋ด๊ฐ ํ ๋ฐฉ๋ฒ๋ณด๋ค ์๊ฐ์ด ํ๊ท ์ ์ผ๋ก ๋ ๋น ๋ฅด๊ฒ ๋์๋ค.
Comment