프로그래머스 숫자 야구 - 문제 보러 가기
입력 조건
- 숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다.
- 각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다.
- 숫자는 맞지만, 위치가 틀렸을 때는 볼
- 숫자와 위치가 모두 맞을 때는 스트라이크
- 숫자와 위치가 모두 틀렸을 때는 아웃
풀이
문제를 들어가보면 알겠지만 임의의 2차원 배열이 주어진뒤 이에 해당될 수 있는 숫자들이 총 몇개인지 구하는 문제다.
완전탐색을 이용해서 푸는방식을 택했다.
조건 2를 잘 생각해야 하는데 우선 숫자에 0이 들어가면 안되고, 각 자리는 중복되면 안된다.
때문에 연속된 3자리수는 123~987까지만 들어갈 수 있다.
코드
Go Version
type Baseball struct {
dots [3]int
strike int
ball int
}
func solution(baseball [][]int) (answer int) {
games := []Baseball{}
for _, base := range baseball {
games = append(games, Baseball{ [3]int{base[0] / 100,(base[0] % 100) / 10,(base[0] % 100) % 10}, base[1], base[2] })
}
for idx := 123; idx <= 987; idx++ {
fir := idx / 100
sec := (idx % 100) / 10
thi := (idx % 100) % 10
if fir != 0 && sec != 0 && thi != 0 && fir != sec && fir != thi && sec != thi {
if isStrike([3]int{fir, sec, thi}, games) {
answer++
}
}
}
return
}
func isStrike(compare [3]int, games []Baseball) bool {
answer := 0
for _, game := range games {
count := 0
if game.dots[0] == compare[0] { count++ }
if game.dots[1] == compare[1] { count++ }
if game.dots[2] == compare[2] { count++ }
if count != game.strike {
break
}
count = 0
if game.dots[0] == compare[1] || game.dots[0] == compare[2] { count++ }
if game.dots[1] == compare[0] || game.dots[1] == compare[2] { count++ }
if game.dots[2] == compare[0] || game.dots[2] == compare[1] { count++ }
if count != game.ball {
break
}
answer++
}
if answer == len(games) {
return true
}
return false
}
'데일리 프로그래밍' 카테고리의 다른 글
[백준][10845] 큐 (파이썬) (0) | 2020.12.30 |
---|---|
[프로그래머스] 멀쩡한 사각형 (0) | 2019.12.04 |
[백준][2292] 벌집 [Golang] (0) | 2019.12.02 |
[백준][15953] 상금 헌터 [Golang] (0) | 2018.11.21 |