๋ฌธ์ ์ค๋ช
์ซ์ ์ผ๊ตฌ ๊ฒ์์ด๋ 2๋ช ์ด ์๋ก๊ฐ ์๊ฐํ ์ซ์๋ฅผ ๋ง์ถ๋ ๊ฒ์์ ๋๋ค.
๊ฐ์ ์๋ก ๋ค๋ฅธ 1~9๊น์ง 3์๋ฆฌ ์์์ ์ซ์๋ฅผ ์ ํ ๋ค ์๋ก์๊ฒ 3์๋ฆฌ์ ์ซ์๋ฅผ ๋ถ๋ฌ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก ์๋๊ฐ ์ ํ ์ซ์๋ฅผ ์์ํ ๋ค ๋งํ๋๋ค.
* ์ซ์๋ ๋ง์ง๋ง, ์์น๊ฐ ํ๋ ธ์ ๋๋ ๋ณผ * ์ซ์์ ์์น๊ฐ ๋ชจ๋ ๋ง์ ๋๋ ์คํธ๋ผ์ดํฌ * ์ซ์์ ์์น๊ฐ ๋ชจ๋ ํ๋ ธ์ ๋๋ ์์
์๋ฅผ ๋ค์ด, ์๋์ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด
A : 123 B : 1์คํธ๋ผ์ดํฌ 1๋ณผ. A : 356 B : 1์คํธ๋ผ์ดํฌ 0๋ณผ. A : 327 B : 2์คํธ๋ผ์ดํฌ 0๋ณผ. A : 489 B : 0์คํธ๋ผ์ดํฌ 1๋ณผ.
์ด๋ ๊ฐ๋ฅํ ๋ต์ 324์ 328 ๋ ๊ฐ์ง์ ๋๋ค.
์ง๋ฌธํ ์ธ ์๋ฆฌ์ ์, ์คํธ๋ผ์ดํฌ์ ์, ๋ณผ์ ์๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด baseball์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ๋ฅํ ๋ต์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ์ง๋ฌธ์ ์๋ 1 ์ด์ 100 ์ดํ์ ์์ฐ์์ ๋๋ค.
- baseball์ ๊ฐ ํ์ [์ธ ์๋ฆฌ์ ์, ์คํธ๋ผ์ดํฌ์ ์, ๋ณผ์ ์] ๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
baseball | return |
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] | 2 |
ํ์ด: ์ด๋ฒ ๋ฌธ์ ๋ ์์ ํ์์ ๋๋ค.
3์๋ฆฌ ์์ด๊ณ ์ค๋ณต์ด ์์ผ๋ฉฐ(๊ฐ์ ์๋ก ๋ค๋ฅธ) 0(1~9)์ด ํฌํจ๋์ง ์์ ๋ชจ๋ ์ซ์๋ฅผ ํ์ํฉ๋๋ค.
๋จผ์ answer์ baseball์์ ๋ฐฐ์ด์ ์ซ์๋งํผ ์ด์ค๋ฐฐ์ด์ผ๋ก ๋ง๋ค์ด์ค๋๋ค. -> var answer = Array(repeating: [Int](), count: baseball.count)
123~987๊น์ง์ ์ซ์๋ฅผ map์ผ๋ก ๋๋ ์ค๋๋ค. -> let number = String(i).map{String($0)}
์ด ์ซ์ ์ค 0์ด ํฌํจ๋์ด์๋ค๋ฉด -> number.contains("0")
์ค๋ณต์ด ์๋ค๋ฉด -> number[0] == number[1] || number[0] == number[2] || number[1] == number[2]
baseball์์ ์ซ์๋งํผ for๋ฌธ์ ๋๋ ค์ค๋๋ค. -> for j in 0..<baseball.count{...}
strike์ ball์ ์๋ฅผ ๋ด์ ๋ณ์๋ฅผ ๋ง๋ค์ด์ค๋๋ค. -> var strike = 0,ball = 0
baseball์์ 0๋ฒ์งธ ์๋ ์ซ์๋ฅผ map์ผ๋ก ๋๋ ์ค๋๋ค. -> let baseballmap = String(baseball[j][0]).map{String($0)}
baseball์ 0๋ฒ์งธ ์ซ์๊ฐ 3์๋ฆฌ ์์ด๊ธฐ ๋๋ฌธ์ for๋ฌธ์ผ๋ก 0~2๊น์ง ๋๋ ค์ค๋๋ค. -> for n in 0...2{...}
number์ ์์น์ baseball์ 0๋ฒ์งธ ์ซ์ ์์น๊ฐ ๊ฐ๋ค๋ฉด strike๋ฅผ 1 ์ฆ๊ฐ์์ผ์ค๋๋ค. -> if number[n] == baseballmap[n]{ strike += 1 }
์์น๊ฐ ๊ฐ์ง ์์ง๋ง ๊ทธ baseball์ 0๋ฒ์งธ ์ซ์๋ฅผ ๋งต์ผ๋ก ๋๋ ์ซ์ ์ค number์์ ์ซ์๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ball์ 1 ์ฆ๊ฐ์์ผ์ค๋๋ค. -> else{ if baseballmap.contains(number[n]){ ball += 1 }}
๊ทธ๋ฆฌ๊ณค baseball์ ๋ฐฐ์ด ์ค 1๋ฒ์งธ ์ซ์์ strike๊ฐ ๊ฐ๊ณ baseball์ 2๋ฒ์งธ ์ซ์๊ฐ ball๊ณผ ๊ฐ๋ค๋ฉด if baseball[j][1] == strike && baseball[j][2] == ball{...}
๋ง์ง๋ง์ผ๋ก ๊ฐ ๋ฐฐ์ด์ ๋ด๊ฒจ์๋ ๊ฐ๋ฅํ ์ซ์๋ค ์ค ๊ณตํต๋ ์ซ์๋ง ๋ชจ์ผ๊ธฐ ์ํด -> if j == 0 { answer[j].append(i) }else { if answer[j-1].contains(i){ answer[j].append(i) }} ๋ฅผ ํด์ค ๋ค answer์ ๋งจ ๋ง์ง๋ง๋ฐฐ์ด์ ์ซ์๋ฅผ returnํด์ค๋๋ค.
์ ์ฒด์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import Foundation
func solution(_ baseball:[[Int]]) -> Int {
var answer = Array(repeating: [Int](), count: baseball.count)
for i in 123...987{
let number = String(i).map{String($0)}
if number[0] == number[1] || number[0] == number[2] || number[1] == number[2] || number.contains("0"){
continue
}
for j in 0..<baseball.count{
var strike = 0,ball = 0
let baseballmap = String(baseball[j][0]).map{String($0)}
for n in 0...2{
if number[n] == baseballmap[n]{
strike += 1
}else{
if baseballmap.contains(number[n]){
ball += 1
}
}
}
if baseball[j][1] == strike && baseball[j][2] == ball{
if j == 0 {
answer[j].append(i)
}else{
if answer[j-1].contains(i){
answer[j].append(i)
}
}
}
}
}
return answer[answer.count-1].count
}
|
cs |
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ์นดํซ Swift (0) | 2020.05.28 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์์ฅ Swift (2) | 2020.05.18 |
ํ๋ก๊ทธ๋๋จธ์ค H-Index Swift (0) | 2020.05.12 |
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ์ฅ ํฐ ์ Swift (0) | 2020.04.27 |
2020 KAKAO BLIND RECRUITMENT ๊ดํธ๋ณํ Swift (0) | 2020.04.23 |
๋๊ธ