๋ฉด์ ์
- ์ฝ๋ฉ/์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ๋ฉด์ - 30๋ถ
- ์์ธ์ด ๊ธฐ๋ฐ ์ธ์ฑ ๋ฉด์ - 15๋ถ ์ด๋ ๊ฒ ์ฝ ํ ์๊ฐ ์ ๋ ์งํ๋๊ธฐ๋ก ๊ณํ ๋์ด์์๋ค.
Google์์ ์ฝ๋ฉ ์ธํฐ๋ทฐ๋ ๋ชจ์ ์ธํฐ๋ทฐ๋ฅผ ํฌํจํด ์ด๋ฒ์ 4๋ฒ์งธ ์๋ค.
1๋ฒ์งธ๋ ํฉ๊ฒฉ! : Google camp๋ฅผ ์งํํ๊ฒ ๋์๋ค.
2๋ฒ์งธ๋ ๊ตฌ๊ธ ๋ํ์ ์บ ํ์์ ์งํํ ๋ชจ์ ์ธํฐ๋ทฐ์๋ค. “๊ทธ ํ๋ (cs 2ํ๋ ) ์น๊ณ ์ํ๋ค. ์์ผ๋ก ๋ ์ํ ์ ์์๊ฑฐ๋ค” ๋ผ๋ ํ์ ๋ค์๋ค. ์ด๊ฑด ํฉ๊ฒฉ ์ ์ ์๋๋ผ๋ ๊ฒ์ ์๊ณกํ ๋๋ ค ๋งํ์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค. ์ธํฐ๋ทฐ์ด์ ๋ง์ ๋ค๊ฒ ์ธํฐ๋ทฐ๋ฅผ ๋ดค๋ ๊ฒ ์๋ ๊ฑธ๋ก ๊ฒฐ๋ก .ใ ใ
3๋ฒ์งธ๋ ์ธํด ์ธํฐ๋ทฐ ๋ถํฉ๊ฒฉ… ์ด ๋ ํํ๊ฐ ์ ๋ง ์ค์ง๊ฒ ์๋ ๊ฑธ๋ก ๊ธฐ์ตํ๋ค. ๊ท๋ฆฌ ๋๋ ์ฌํ๋ฐ๋ฆฌใ ใ ํ์ง๋ง ๋ด๊ฐ ์๊ฐํด๋ ์ด ์ธํฐ๋ทฐ ์ค 1์ฐจ๋ฅผ ์ ๋ณด์ง ๋ชปํ๋ ๊ฒ ๊ฐ๋ค. ์ฒซ ๋ฒ์งธ๋ ๋ถ์๋ฅผ ์์๋ก ๋ฐ๊พธ๋ ๊ฑฐ์๋๋ฐ, ๊ตฌํ์์ ์ค์๊ฐ ๋๋ฌด ๋ง์๋ค. ํผ์ต์ ๋ ๋ฒ์งธ๋ ๋๋ฌด ์ฌ์์ ๊ธ๋ฐฉ ํ์๊ณ , ์นญ์ฐฌ๊น์ง ๋ฐ์๋ค. 2์ฐจ ์ธํฐ๋ทฐ์์ ๋ฌธ์ ๋ฅผ ๋๋ฌด ๋นจ๋ฆฌ ํ์ด์ ๋ฌธ์ ๋ฅผ 2๊ฐ ํ์๋ ๊ธฐ์ต์ด ๋๋ค. ๊ฒฐ๋ก ์ ๊ตฌ๊ธ ์ธํด์ ํ๋ ค๋ฉด 1,2์ฐจ ์ธํฐ๋ทฐ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ๋ค ์ ํ์ด์ผ ํ๋ค๋ ๊ฒ….
๊ทธ๋ฆฌ๊ณ ์ค๋! ๊ตฌ๊ธ ์ฐ๋จผ ํ ํฌ๋ฉ์ด์ปค์ค ์ธํฐ๋ทฐ๋ฅผ ๋ณด์๋ค. ์ฝ๋ฉ ์ธํฐ๋ทฐ 30๋ถ ๋์ ๋ฌธ์ ๋ฅผ ์ด 3๊ฐ๋ฅผ ์ฃผ์ จ๋ค. 30๋ถ ๋์ ์ด๋ ๊ฒ ๋ง์ ๋ฌธ์ ๋ฅผ ํ๊ธด ๋ ์ฒ์…
A = “Hello World”, S = {‘e’, ‘o’}
์์ ๊ฐ์ด A๋ผ๋ string๊ณผ S๋ผ๋ set์ด ์ฃผ์ด์ง๋ค. ์ด ๋ S์์ ์์๋ค์ด A์ ๊ฐ๊ฐ ๋ช๋ฒ ์ฐ์๋์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ์ด ๊ฒ์ ํฉ์ ์ถ๋ ฅํ๋ผ๋ ๋ฌธ์ ์๋ค.
์ง๊ธ ๊ฐ์ ๊ฒฝ์ฐ์ ‘e’๋ 1๋ฒ, ‘o’๋ 2๋ฒ ์ฐ์๊ณ S์์ ๋ฌธ์๋ค์ด ์ด 3๋ฒ ,
1 2
3
๊ณผ ๊ฐ์ด ์ถ๋ ฅํ๋ค.
๋จผ์ ์ํ๋ฒณ๋ง ์ฐ์ด๋ ์ค ์๊ณ , arr[30]๊ณผ ๊ฐ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ‘a’~’z’ ๊น์ง ๊ฐ ์ธ๋ฑ์ค๋ฅผ 0 ~ 25๋ก ์ค์ ํ๊ณ ๊ฐ์๋ฅผ ์ธ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ํ๋ฒณ ๋ฟ๋ง ์๋๋ผ, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ ์ํ๋ฒณ, ํน์๋ฌธ์๋ค์ด ๋ชจ๋ ํฌํจ๋๋ค๊ณ ํ์ ์ ์กฐ๊ธ ๊ณ ๋ฏผํ๋ค. ๋ฐ๋ก ๋ต์ ์ฐพ์๋๊ธด ํ์ง๋ง ์ด๊ฑด ์ข generousํ ๋ต๋ณ ๊ฐ๋น..
๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ set์ ํน์ฑ์ ์ด์ฉํด stl algorithm์ findํจ์๋ฅผ ์จ์ index๋ฅผ ๋ฐํํ๋ ์์ผ๋ก ๊ตฌ์ํ๋ค. arr[S.size] ๋ฐฐ์ด์ ๋๊ณ , ๊ฐ ์ธ๋ฑ์ค์๋ S[idx]๋ฒ์งธ ๋ฌธ์๊ฐ ๋ช๊ฐ ์ฐ์๋์ง๋ฅผ ์ ์ฅํ๋ ์์ผ๋ก ํด๊ฒฐํ๋ค. ์ฆ, A์ size๋ฅผ N, S์ size๋ฅผ M์ด๋ผ๊ณ ํ๋ฉด ๊ฒฐ๊ตญ ์๊ฐ ๋ณต์ก๋๋ O(N*M) ์ด๋ค. ใ ใ ์๊ฐ ๋ณต์ก๋๊ฐ ๋๋ฌด ์ปค…. ์ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํ๋๋ฐ ์ง๊ธ ์ ๋ณด๋ N,M์ด ์ปค์ง๋ฉด ๊ฐ๋นํ ์๊ฐ ์์ด์ง ๊ฒ ๊ฐ๋น. ๋ค๋ฅธ ํด๊ฒฐ๋ฒ์ด ์์๊น?
A = {4, 7, 1, 9, 10}, X = 5
์ ๋ ฅ์ด ์ด๋ ๊ฒ ์ฃผ์ด์ง ๋, ํฉ์ด X๊ฐ ๋๋ ๋ ์๊ฐ ์์ผ๋ฉด true, ์์ผ๋ฉด false๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ์ง๋ ๋ฌธ์ ์๋ค. ์๋ฅผ ๋ค์ด ์ด ์ ๋ ฅ์์ 4, 1์ ๋ํด 5๊ฐ ๋๋ฏ๋ก true๋ฅผ return. ์ด๋ฌํ ์์ ๊ฐ์์ ์๊ด์์ด ์ ๋ฌด์ ์ฌ๋ถ๋ง ๋ฐํํด์ฃผ๋ฉด ๋๋ค.
#include <algorithm>
using namespace std;
bool sol( A, X){
sort(A, A+(sizeof(A)/sizeof(int)));
int st = 0, en = lower_bound(A, A+(sizeof(A)/sizeof(int)),X)-A;
en--;
while(st<en){
if(A[st]+A[en]==X) return true;
else if(A[st]+A[en]>X) en--;
else if(A[st]+A[en]<X) st++;
}
return false;
}
์ ํํ ์ด๋ ๊ฒ ์ง ๊ฒ ๊ฐ๋ค. ๊ทผ๋ฐ while๋ฌธ ์์ ๋ฐฐ์ด ์ด๋ฆ์ A๋ก ํ๋์ง arr๋ก ํ๋์ง ๊ธฐ์ต์ด ์๋๋ค. ์ง์ง ๋ธ ์ ์ธ๊ฐ…… ใ ใ ใ ใ ใ ์ ์ง ๋ง๋๋ก ๋ฐฐ์ด ์ด๋ฆ ์ฐ๊ณ ์ ๋๋ก ์ผ๋์ง ๊ธฐ์ต๋ ๋ชปํ๋ใ ใ ์ด๊ฑฐ ์ง์ง ์ ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ ์ด๊ฒ ๋๋ฌธ์ ๋ง์์ ๊ฑธ๋ฆฐ๋ค ์์ใ ์ ๋ธ ์ ์๋ผ
์๊ฐ๋ณต์ก๋๋ sort+์ต์ ์ ๊ฒฝ์ฐ N๋ฒ ํ์ํ๋ฏ๋ก O(lgN + N)
ํน์ดํ ๋ฌธ์ ๋ผ๊ณ ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ๋ด์ จ๋ค. ๋ง์์์ ์ด์ฅ์ ๋ฝ๋๋ฐ ์ด์ฅ์ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ด์ฅ์ ์ ์ธํ ๋ชจ๋ ์ฌ๋์ด ์ด์ฅ์ ์์์ผ ํ๋ค.
- ํํ์ฑ์ ์ํด์ ์ด์ฅ์ ์์ ์ ์ ์ธํ ๋ง์์ ์ฌ๋๋ค์ ์๋ฌด๋ ๋ชฐ๋ผ์ผ ํ๋ค.
- ์ฌ๋๋ค์ ์ธ๋ฑ์ค๋ 0~N-1๊ณผ ๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์๊ณผ ๊ฐ์ ํจ์๊ฐ ์ฃผ์ด์ก๋ค.
bool know ( i, j)
์ด ํจ์๋ i๊ฐ j๋ฅผ ์๋ฉด true, ๋ชจ๋ฅด๋ฉด false๊ฐ ์ฃผ์ด์ง๋ค.
๋ช ๋ฒ์ ์ง๋ฌธ์ ํตํด ๋ ์ป์ ์ถ๊ฐ ์ ๋ณด๋ ์ด ํจ์์์ i๊ฐ j๋ฅผ ์๋์ง๋ง ์๋ ค์ค๋ค. J๊ฐ i๋ฅผ ์๋์ง ์์๋ณด๋ ค๋ฉด know(j, i)๋ฅผ ํธ์ถํด์ผ ํ๋ค. ๋ํ, i๊ฐ k๋ฅผ ์๊ณ , k๊ฐ j๋ฅผ ์๋ค๊ณ ํด์ i๊ฐ j๋ฅผ ์๋ ๊ฒ์ ์๋๋ค. ๊ทธ ๋ ๋น์์ ์๋ฌด๋ฆฌ ์๊ฐํด๋ O(n^2) ํด๋ฒ๋ฐ์ ์๊ฐ์ด ์๋ฌ๋ค…
์ธํฐ๋ทฐ ์๊ฐ์ด ๋ช๋ถ ๋จ์ง ์์ ๋์ถฉ ํด๊ฒฐ๋ฐฉ์๋ง ์๊ฐํด๋ณด๋ผ๊ณ ํ์ ์ ๋น์ฅ ์๊ฐ๋๋ roughํ ํ์ด๋ง ๋ง์๋๋ ธ๋ค.
๋ฐ๋ณต๋ฌธ์ ํตํด ๋ชจ๋ (i,j)์์ ๋ํด knowํจ์๋ฅผ ํธ์ถํ๊ณ , col[N], row[N]์ ์ ์ธํ๋ค.
col[k] : k๋ฅผ ์๋ ์ฌ๋๋ค์ ์
row[k] : k๊ฐ ์๋ ์ฌ๋๋ค์ ์
if(know(i,j)) col[j]++; row[i]++;
๋ฐ๋ผ์ if(col[k]==N-1 && row[k] ==0)์ด๋ผ๋ฉด k๋ฒ ์ฌ๋์ ์ด์ฅ์ด ๋ ์ ์๋ ๊ฒ์ด๋ค!
๊ทผ๋ฐ ์์ง๋ ์ด๊ฑฐ๋ง๊ณ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ ํ์ด๊ฐ ์๊ฐ๋์ง ์๋๋ค… -> ์ญ๊ณ ํ ๊ฐ์ ๊ฐ๊ฐ๊ณ ์ธ๋ฌผ๋คํํ ๋ฌผ์ด๋ดค๋ค ๋ฌด์กฐ๊ฑด O(n^2) ๋ฐ์ ์ ํด๊ฐ ์๋ค๊ณ ํ๋ค ์์ธ ๋คํ
์ด ๋ฌธ์ ์ ํด๋ O(n)
retreat๊ฐ์ ์ธ๋๋ค์ด๋ ์๊ธฐ ๋๋๋ค๊ฐ ์ ํด๊ฐ n์ด๋ผ๋ ์๋ฆฌ๋ฅผ ๋ฃ๊ณ ์์ฒญ ๋๋ซ๋ค;; ์์๊ฐํด๋ณด๋ O(n)์ ์๋๊ณ Ω(n)์ ๋ ๋๋๋ฏ know(i, j)๋ฅผ ํธ์ถํด์ true๊ฐ ๋ฐํ๋๋ ์๊ฐ j๋ ์ ๋ ์ด์ฅ์ด ๋ ์ ์๋ค. ์ด๋ ๊ฒ ๊ณ์ ํธ์ถํ๋ค๋ณด๋ฉด ์์ * n๋ฒ ๋์ ํ๋ณด๋ฅผ ๋ง์ด ์ ๊ฑฐํ ์ ์๋ค.
์จ๋ ์ด๋ฒ ์ธํฐ๋ทฐ๋ ๋ฑ ๋๋๊ณ ๋์์๋! ์ค! ์ข ์ํ๋ฏ?! ํ๋ ์ธํฐ๋ทฐ์๋ค. ๋ ๋ค์ ๋์๋ณด๋ ๊ทธ๊ฒ๋ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง...ใ ใ ใ ใ ใ ใ ใ ใ ์ธํด ์ธํฐ๋ทฐ ๋๋ ์ ์กด๋ ๋งํ๊ตฌ๋ ํ๋ ๊ฒ ๋๊ปด์ก์๊ณ …
๊ฒฐ๊ณผ๋ 9์ 12์ผ! ์์์ผ! ์ ๋์จ๋ค๊ณ ๋ง์ํด์ฃผ์ จ๋ค. ์๋ง ๋งค๋ฒ ๊ทธ๋ ๋ฏ์ด ์ด๋ฒ์๋ ์คํ 5,6์ ์ฏค ๋ฉ์ผ์ด ์ฌ ๊ฒ ๊ฐ๋ค. ์ ๋ฌด์๊ฐ ๋๋๊ฐ ๋ ์ฏค ํ๋ฒ์ ๋ชฐ์์ ๋ณด๋ด์๋ ๊ฒ ๊ฐ๋ค๋ง
์ผ์ฃผ์ผ ๋์ ์ข ๊ฒ์ผ๋ฅด๊ธด ํ์ง๋ง ์ฝ๋ฉ์ธํฐ๋ทฐ ์ฑ ๋ ํํํ ๋ณด๊ณ ,,, ๊ตํต์ฌ๊ณ ํ๋ณตํ ๋ค ์ฝ๋ฉ๋ ์ดํผ ํ๋ค.
์ธํด์ด๋ ์ง์ง Googler๊ฐ ๋๊ธฐ ์ํธ ์ฝ๋ฉ์ธํฐ๋ทฐ๋ ์ข ๋ ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ์ง???
ํฉ๊ฒฉ! update at Sep 12, 2018
'๐ > ๊ฒฝํํ ๊ฒ๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ง์นด์ธ ๋ ๋ ๊ตณ (221) | 2020.09.04 |
---|---|
2019 Google IO ๋ฅผ ๋ค๋ ์๋ค (219) | 2019.05.14 |