๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] 2020 KAKAO BLIND RECRUITMENT ์ž๋ฌผ์‡ ์™€ ์—ด์‡ 

by Fomagran ๐Ÿ’ป 2021. 3. 1.
728x90
๋ฐ˜์‘ํ˜•

Problem

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ž๋ฌผ์‡ ์™€ ์—ด์‡ 

[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true

programmers.co.kr


Solution

์ž๋ฌผ์‡ ์™€ ์—ด์‡ ์˜ ๊ตฌ๋ฉ์„ ๋น„๊ตํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

 

1.์ž๋ฌผ์‡ ์™€ ๊ตฌ๋ฉ๊ณผ ์—ด์‡ ์˜ ๋Œ๊ธฐ๊ฐ€ ๊ฐ ๊ฐ 1๊ฐœ์ผ ๊ฒฝ์šฐ True

 

2.์ž๋ฌผ์‡ ์˜ ๊ตฌ๋ฉ์ด ์—ด์‡ ์˜ ๋Œ๊ธฐ๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ False

 

๋งŒ์•ฝ 2๊ฐœ์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด

 

์ž๋ฌผ์‡ ์™€ ์—ด์‡ ์˜ ๊ฐ ๊ตฌ๋ฉ๊ณผ ๋Œ๊ธฐ๊ฐ€ ์–ด๋Š ๋ถ€๋ถ„์— ์žˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•˜๋Š”๋ฐ์š”.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์•Œ์•„๋‚ด์•ผ ํ• ๊นŒ์š”?

 

์ €๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž๋ฌผ์‡ ์™€ ์—ด์‡ ๋ฅผ X,Y ์ขŒํ‘œ๋กœ ์ƒ๊ฐ์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ง€๋ฌธ์— ๋‚˜์™€ ์žˆ๋Š” ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์—ด์‡  ๋Œ๊ธฐ๋Š” (0,1),(1,2),(2,2) ์ด๊ณ 

 

์ž๋ฌผ์‡  ๊ตฌ๋ฉ์€ (2,1),(1,2)๊ฐ€ ๋˜๊ฒ ์ฃ ?

 

(์ฝ”๋“œ๋กœ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ findSpinOrSlots ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)


 

์ด๋ ‡๊ฒŒ ์—ด์‡ ์™€ ์ž๋ฌผ์‡  ๊ตฌ๋ฉ์„ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด 

 

์—ด์‡ ๋ฅผ ํšŒ์ „ํ–ˆ์„๋•Œ์˜ ๋Œ๊ธฐ ์œ„์น˜๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜๋Š” ์ฒ˜์Œ ์—ด์‡ ์˜ ์œ„์น˜๋ฅผ 0๋„์ผ๋•Œ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ๋Œ๋ฆฌ๋ฉด ์œ„์—์„œ ์šฐ์ธก๊ทธ๋ฆผ์ด ๋˜๊ณ  

 

์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 180๋„ ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด ์•„๋ž˜์—์„œ ์ขŒ์ธก๊ทธ๋ฆผ , ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 270๋„ ๋Œ๋ฆฌ๋ฉด ์•„๋ž˜์—์„œ ์šฐ์ธก ๊ทธ๋ฆผ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ• ๋•Œ๋งˆ๋‹ค ์ƒ๊ธฐ๋Š” ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ์š”.

 

y์— ๊ฐ€์žฅ ์ตœ๋Œ“๊ฐ’์„ ๋นผ์ค€ ๋’ค ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  x์™€ y์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด 0๋„์ผ๋•Œ ๊ฐ ๋Œ๊ธฐ์˜ ์œ„๋Š” (0,1), (1,2), (2,2)  ์ž…๋‹ˆ๋‹ค.

 

๋จผ์ € ์ฒซ๋ฒˆ์งธ 0,1 ์„ y์— ๊ฐ€์žฅ ์ตœ๋Œ“๊ฐ’์ด 2๋ฅผ ๋นผ์ค€ ๋’ค ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด -> 0,1

 

๊ทธ ๋‹ค์Œ x์™€ y์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด -> 1,0

 

1,2๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง„ํ–‰ํ•˜๋ฉด -> 0,1

 

2,2๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ง„ํ–‰ํ•˜๋ฉด -> 0,2

 

๋กœ (1,0), (0,1), (0,2)๊ฐ€ ๋˜๊ณ  ๋ณด๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ๋Œ๋ฆฐ ์œ„์—์„œ ์šฐ์ธก ๊ทธ๋ฆผ์˜ ๋Œ๊ธฐ ์œ„์น˜๊ฐ€ ๋˜์—ˆ์ฃ ?

 

์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ ํšŒ์ „๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ๋Œ๊ธฐ์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์—์„œ rotate ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)


 

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ํšŒ์ „๋ฐฉํ–ฅ์˜ ๋Œ๊ธฐ ์œ„์น˜๋ฅผ ๊ตฌํ–ˆ๋‹ค๋ฉด ๊ฐ ํšŒ์ „๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ๋Œ๊ธฐ ์œ„์น˜๊ฐ€ ์ž๋ฌผ์‡ ์˜ ๊ตฌ๋ฉ ์œ„์น˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด๋ด์•ผ๊ฒ ์ฃ ?

 

๊ฐ€์žฅ ๋จผ์ € ์ž๋ฌผ์‡ ์˜ ์นธ์ˆ˜๋งŒํผ์„ ์—ด์‡  ๋Œ๊ธฐ์œ„์น˜์˜ x์™€ y์— ๊ฐ ๊ฐ ๋นผ์ค๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ดˆ๊ธฐ ์„ธํŒ…์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์œ„์น˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ๋Š” ๊ฐ y์™€ x์— +1์„ ํ•ด์ฃผ๋ฉด์„œ ์ž๋ฌผ์‡ ์™€ ๋น„๊ตํ•ด์•ผํ•˜๋Š”๋ฐ์š” 

 

์—ด์‡ ๊ฐ€ M * M์นธ์ด๊ณ  ์ž๋ฌผ์‡ ๊ฐ€ N*N์นธ์ด๋ผ๋ฉด ๊ฐ x์™€ y๊ฐ€ M+N์˜ -1 ๋งŒํผ์„ ์ด๋™ํ•ด์•ผ ๋ชจ๋“  ์œ„์น˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜์˜ GIF๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šฐ์‹ค๊ฑฐ์—์š”!

 

 

์ด๋ ‡๊ฒŒ ๋ชจ๋“  ํšŒ์ „ํ•œ ์—ด์‡ ์˜ ๋Œ๊ธฐ์˜ ์œ„์น˜์™€ ์ž๋ฌผ์‡ ์˜ ๊ตฌ๋ฉ์˜ ์œ„์น˜๋ฅผ ๋น„๊ตํ•ด์ฃผ๋‹ค๊ฐ€ ๋งŒ์•ฝ ์ผ์น˜ํ•˜๋Š”๊ฒŒ ๋‚˜์˜ค๋ฉด

 

true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์—†๋‹ค๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์˜ moveAll ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”)

 

์ฃผ์˜ํ•˜์‹ค ์ ์€ ๋งŒ์•ฝ 2์ฐจ์› ๋ฐฐ์—ด [[2,1],[1,2]]์™€ [[1,2],[2,1]]์ด ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๊ฐ™์€ ๊ฒƒ์ผ๊นŒ์š”?

 

์ •๋‹ต์€ X์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ ์—ด์‡ ์˜ ์œ„์น˜๋ฅผ y ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์ค€๋’ค x ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

(์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ์˜ sortKeyspins์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.)


Source Code

 


์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๊ฒƒ

 

1์ฐจ์ ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฒƒ์„ ์œ ์ง€ํ•œ ์ฑ„ ๋˜ ๋‹ค๋ฅธ ์กฐ๊ฑด์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฒ•

 

sort(by: {$0[1] == $1[1] ? $0[0] < $1[0] : $0[1] < $1[1]})

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€