최코딩의 개발
[백준 2503번] 숫자 야구 본문
728x90
https://www.acmicpc.net/problem/2503
=begin
1. 입력을 받고 저장하자.
2. 모든 경우의 수를 다 넣어서 검증을 해보자
3.
=end
# 입력
N = gets.chomp.to_i
input = []
N.times do
data = gets.chomp.split.map(&:to_i)
input.push(data)
end
def solution(i, j, k, input)
cnt = 0
for l in 0...N
s = 0
b = 0
data = input[l]
num = data[0].to_s
# 첫자리
if i.to_s == num[0]
s += 1
elsif i.to_s == num[1] || i.to_s == num[2]
b += 1
end
# 두자리
if j.to_s == num[1]
s += 1
elsif j.to_s == num[0] || j.to_s == num[2]
b += 1
end
# 마지막자리
if k.to_s == num[2]
s += 1
elsif k.to_s == num[1] || k.to_s == num[0]
b += 1
end
if s == data[1] && b == data[2]
cnt += 1
else
return 0
end
end
return cnt
end
# 정답 찾기
result = 0
# 모든 경우의 수 판단
for i in 1..9
for j in 1..9
if i == j
next
end
for k in 1..9
if j == k || i == k
next
end
answer = solution(i, j, k, input)
if answer == N
result += 1
end
end
end
end
puts result
문제 해결의 핵심은 모든 가능한 경우의 수를 생성한 후, 입력값과 비교하여 일치하는 경우 카운트를 증가시키는 것이었다.
이렇게 얻은 카운트 값이 N과 같으면 최종 결과를 1 증가시키는 방식으로 접근했다.
그러나 여러 실수가 있었다.
s=0, b=0처럼 병렬로 변수를 선언했더니 배열로 인식되어 오류가 발생했고,
중복 숫자를 방지하기 위해 && 조건을 추가했지만, 이 방식은 111, 222 같은 경우만 막을 뿐 112, 221 같은 조합은 허용해버렸다.
또한, 함수 선언을 코드 맨 위가 아닌 아래에 두는 실수를 범해 오류를 초래했다.
문제를 푸는 데에는 오래 걸리지 않았지만, 오류를 잡느라 시간이 많이 소요되었다.
앞으로는 코드를 더 꼼꼼하게 점검하며 실수를 줄이도록 해야겠다.
728x90
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 1916번] 최소비용 구하기 (0) | 2025.02.25 |
---|---|
[백준 1244번] 스위치 켜고 끄기 (0) | 2025.02.10 |
[백준 1966번] 프린터 큐 (0) | 2025.02.08 |
[백준 17413번] 단어 뒤집기 2 (0) | 2025.02.08 |
[백준 10799번] 쇠막대기 (0) | 2025.02.06 |