Problem
Solution
๋จผ์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ ์ ํ์ํ ๋ณ์๋ค์ ํผ์ฆ์ด ์ญ์ ๊ฐ ๋์๋์ง ํ์ธํ remove Boolean๋ณ์ -> var remove = true
board ์์ ๋ฌธ์๋ฅผ ์ฝ๊ฒ ๋น๊ตํ๊ธฐ ์ํด map์ผ๋ก ๋ฐ๊ฟ์ค boards ๋ณ์ -> var boardsCopy = boards
boards์ ๊ฐ์ ์ ์ฅํ boardsCopy ๋ณ์ -> var boards = board.map{$0.map{String($0)}}
๋น์นธ์ ๊ฐฏ์๋ฅผ ์ emptyCount ๋ณ์ -> var answer = 0
1
2
3
4
5
6
7
8
9
10
|
//board์์ ์คํธ๋ง์ map์ผ๋ก ๋ณํ์ํด
var boards = board.map{$0.map{String($0)}}
//boards์ ๊ฐ์ ์ ์ฅํด์ค ๋ณ์
var boardsCopy = boards
//์ญ์ ๋์๋์ง ์๋์๋์ง ํ์ธํ ๋ณ์
var remove = true
//์ญ์ ๋ ์นธ์ ์ธ์ด์ค ๋ณ์
var answer = 0
|
ํผ์ฆ์ด 4๊ฐ๊ฐ ๋ชจ๋ ๊ฐ์๊ฑด์ง ์์๋ณด๊ธฐ ์ํด์ ํผ์ฆ์ ํ์ค์ฉ ๋น๊ตํด๋ณด์์ผํฉ๋๋ค. (๋ ธ๋์์ผ๋ก ์ค์ณ์ง๋ถ๋ถ์ด ํ์ค)
์ฒซ๋ฒ์งธ์ค๊ณผ ๋๋ฒ์งธ์ค - > ๋๋ฒ์งธ์ค๊ณผ ์ธ๋ฒ์งธ์ค -> ์ธ๋ฒ์งธ์ค๊ณผ ๋ค๋ฒ์งธ์ค...... i-1๊ณผ i๋ฒ์งธ์ค ์ด๋ ๊ฒ ๋ง์ด์ฃ !
๊ทธ๋ฆฌ๊ณ ์ค์ ์๋ ํผ์ฆ์ ๊ทธ๋ฆผ์ ์ฐจ๋ก๋ก ํ์ธํด์ผํ๋๋ฐ์.
i-1๋ฒ์งธ์ค์ j-1๋ฒ์งธ ์๋ ๊ทธ๋ฆผ๊ณผ i๋ฒ์งธ j๋ฒ์งธ๊ทธ๋ฆผ์ด ๊ฐ์์ง ํ์ธํฉ๋๋ค.
๋ง์ฝ ๊ฐ๋ค๋ฉด i-1๋ฒ์งธ ์ค์ j๋ฒ์งธ์ i๋ฒ์งธ j๋ฒ์งธ ๊ทธ๋ฆผ์ด ๊ฐ์์ง ํ์ธํฉ๋๋ค.
๋ง์ฝ ์ด๊ฒ๋ ๊ฐ๋ค๋ฉด ์ด์ ๊ฐ์ ์ค์ ์๋ j์ j-1์ ๊ทธ๋ฆผ์ด ๊ฐ์์ง ํ์ธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๋ค๋ฉด ๋น์นธ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค.
ํ์ง๋ง ๋น์นธ์ผ๋ก ๋ง๋ค์ด๋ฒ๋ฆฌ๋ฉด ๋ค์ ์ค์ ๋น๊ต๊ฐ ํ๋๋ฏ๋ก ๋ฏธ๋ฆฌ ๋ณด๋์ ์ ์ฒด๊ทธ๋ฆผ์ ๊ธฐ์ตํ๋ ๋ณ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ค๋๋ค.(boardsCopy)
boards๋ ๋น์นธ์ผ๋ก ๋ง๋ค๊ณ boardsCopy์ ๋น๊ตํ๋ ๊ฒ์ด์ฃ !!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
while remove == true {
remove = false
answer = 0
//4๊ฐ ์ด์ ๊ฐ์ ํผ์ฆ์ด ์๋ค๋ฉด ๋น์นธ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
for i in stride(from: m-1, to: 0, by: -1) {
//boards๋ ๊ฐ๋ค๋ฉด ๋น์นธ์ผ๋ก ๋ฐ๋๋ฏ๋ก ๋ฏธ๋ฆฌ ์ ์ฅํด๋ boardsCopy์ i-1,i๋ก ํด์ค๋ค.
let current = boardsCopy[i-1]
let before = boardsCopy[i]
for j in 1..<n {
//๋ง์ฝ ๋น์นธ๋ ์๋๊ณ ์ ์๋ ์นธ์ j๋ฒ์จฐ ๊ธ์๊ฐ ๊ฐ๋ค๋ฉด
if current[j] != "" && current[j] == before[j] {
//์ ์๋ ์นธ j-1๋ฒ์งธ์นธ๊ณผ ํ์ฌ์ j-1,j๋ฒ์งธ ๊ธ์๊ฐ ๊ฐ๋ค๋ฉด
if current[j-1] == before[j-1] && current[j] == current[j-1]{
remove = true
//๊ฐ์ 4๊ฐ์ ๋ฌธ์๋ฅผ ๋น์นธ์ผ๋ก ๋ง๋ค์ด์ค
(boards[i][j],boards[i-1][j],boards[i][j-1],boards[i-1][j-1]) = ("","","","")
}
}
}
}
|
๊ทธ๋ฆฌ๊ณค ๋น์นธ๋ค์ ๋ฉ๊พธ๊ธฐ์ํด ๊ทธ๋ฆผ๋ค์ ์ธ๋ก๋ก ํ์ธํด์ผํฉ๋๋ค.(๋นจ๊ฐ์์ด ์ธ๋ก)
j๋ฒ์งธ์ ์๋ ๊ทธ๋ฆผ๋ค์ ์๋์์๋ถํฐ ์ฐจ๋ก๋ก ํ์ธํฉ๋๋ค.
emptyCount๋ผ๋ ๋น์นธ์ ๊ฐฏ์๋ฅผ ๋ด์์ค ๋ณ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ
๋น์นธ์ด ์๋๊ณ emptyCount๋ 0์ด๋ผ๋ฉด ๋์ด๊ฐ๋๋ค.
๋ง์ฝ ๋น์นธ์ด๋ผ๋ฉด empryCount๋ผ๋ ๋น์นธ์ ๊ฐฏ์๋ฅผ ๋๋ ค์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์นธ๋ ์๋๊ณ emptyCount๋ 0์ด ์๋๋ผ๋ฉด ํด๋น j๋ฒ์งธ ๊ทธ๋ฆผ์ ์ค์ emptyCount๋งํผ
์ด๋์์ผ์ฃผ๊ณ ์๋์๋ i๋ฒ์งธ ๊ทธ๋ฆผ์ ๋น์นธ์ผ๋ก ๋ง๋ค์ด์ค๋๋ค. (boards[i+emptyCount][j] = boards[i][j] , boards[i][j] = "")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//์ฒซ๋ฒ์งธ ์ธ๋ก์ค๋ถํฐ
for j in 0..<n {
//๋น์นธ์ ์ธ์ด์ค ๋ณ์
var emptyCount = 0
//๋ฐฐ์ด์ ๊ฑฐ๊พธ๋ก๋ถํฐ ํ์ธ
for i in stride(from: m-1, to: -1, by: -1){
//boards์ ๋ฌธ์๊ฐ ๋น์นธ์ด ์๋๋ฉด
if boards[i][j] != "" {
//๋น์นธ์ด ํ๋ ์ด์ ์๋ค๋ฉด
if emptyCount != 0 {
//๋น์นธ๋งํผ ์ ๋ฐฐ์ด๋ก ๊ฐ์ ๋๊ฒจ์ค๋ค.
boards[i+emptyCount][i] = boardsCopy[i][j]
//์๋ก ์ฌ๋ ค์ค ๊ฐ์ ๋น์นธ์ผ๋ก ๋ง๋ค์ด์ค
boards[i][j] = ""
}
}else{
//boards[b][i] ๋น์ด์๋ค๋ฉด emptyCount๋ฅผ 1์ฆ๊ฐ์์ผ์ค
emptyCount += 1
}
}
//๋น์นธ๋ค์ ์ฐจ๋ก๋ก ๋ํด์ค
answer += emptyCount
}
|
์์ ๊ฐ์ด ๋ชจ๋ ๋น์นธ์ ๋ฉ๊ฟจ๋ค๋ฉด ๋ค์ ์ฒ์๋ถํฐ ๋๊ฐ์ด ๋ฐ๋ณตํด์ค๋๋ค.( remove ๋ถ๋ฆฐ๊ฐ์ด true์ผ๋๊น์ง while๋ฌธ์ผ๋ก ๋ฐ๋ณต)
๊ทธ๋ฆฌ๊ณ ํ๊ฐ๋ ์ญ์ ๋์ง ์์๋ค๋ฉด emptyCount๋ฅผ answer์ ์ฐจ๋ก๋ก ๋ํด์ฃผ๊ณ ๋ฐํํด์ค๋๋ค. -> return answer
Source Code
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] ์์ถ Swift (0) | 2020.11.16 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ1 ์ด์ง ๋ณํ Swift (0) | 2020.11.15 |
ํ๋ก๊ทธ๋๋จธ์ค ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ Swift (0) | 2020.11.12 |
ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง 1 ์ฟผ๋์์ถ ํ ๊ฐ์ ์ธ๊ธฐ Swift (0) | 2020.11.05 |
2018 KAKAO BLIND RECRUITMENT [3์ฐจ] n์ง์ ๊ฒ์ Swift (0) | 2020.11.02 |
๋๊ธ