Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 정렬
- 이분 탐색
- 그래프
- SSAFY
- 플로이드-워셜
- 해시 테이블
- 브루트포스
- DP
- 그리디
- 2357
- 구현
- 문자열
- 싸피
- 정수론
- 투 포인터
- JavaScript
- 세그먼트 트리
- 누적 합
- DFS
- 맵
- boj
- Python
- 애드 혹
- BFS
- 에라토스테네스의 체
- 수학
- 모던 JavaScript 튜토리얼
- 슬라이딩 윈도우
- 트리
- 13164
Archives
- Today
- Total
흙금이네 블로그
[BOJ] 2503 - 숫자 야구 (Python, JavaScript) 본문
아이디어
가능한 세 자릿수에서 각 질문에 대한 대답에 따라 불가능한 경우를 제외해 나간다.
풀이 #1 (Python)
세트 numbers에 1~9의 숫자 중 서로 다른 숫자 세 개로 구성된 세 자릿수를 문자열로 저장한다.
질문마다 질문한 숫자는 문자열로 Q에, 스트라이크 개수와 볼 개수는 정수로 strike와 ball에 저장한다.
numbers에 있는 수를 구성하는 각 숫자가 Q와 자릿값까지 같으면 s를, 그렇지 않고 Q에 포함되면 b를 증가시킨다.
해당 숫자의 s와 b가 각각 strike와 ball에 같다면 temp에 추가하고, for문 종료 후에 기존의 numbers를 temp로 대체한다.
import sys
input = sys.stdin.readline
def solution():
numbers = set()
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
if i != j and j != k and i != k:
numbers.add(f'{i}{j}{k}')
N = int(input())
for _ in range(N):
Q, strike, ball = input().split()
strike, ball = map(int, [strike, ball])
temp = set()
for num in numbers:
s = b = 0
for i in range(3):
if num[i] == Q[i]:
s += 1
elif num[i] in Q:
b += 1
if s == strike and b == ball:
temp.add(num)
numbers = temp
print(len(numbers))
solution()
풀이 #2 (JavaScript)
풀이 #1과 같은 방식으로 동작하며, 자바스크립트의 자료구조 Set은 size로 그 크기를 구한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
let numbers = new Set();
for (let i=1; i<10; i++) {
for (let j=1; j<10; j++) {
for (let k=1; k<10; k++) {
if (i != j && j != k && i != k) {
numbers.add(String(i*100+j*10+k));
}
}
}
}
const N = Number(input[0]);
for (let i=1; i<N+1; i++) {
let [Q, strike, ball] = input[i].split(' ');
[strike, ball] = [strike, ball].map(Number);
temp = new Set();
for (let num of numbers) {
let s = b = 0;
for (let j=0; j<3; j++) {
if (num[j] === Q[j]) s++;
else if (Q.includes(num[j])) b++;
}
if (s === strike && b === ball) temp.add(num);
}
numbers = temp;
}
console.log(numbers.size);
'알고리즘' 카테고리의 다른 글
[BOJ] 17626 - Four Squares (Python, JavaScript) (0) | 2023.02.01 |
---|---|
[BOJ] 13506 - 카멜레온 부분 문자열 (Python) (0) | 2023.02.01 |
[BOJ] 1135 - 뉴스 전하기 (Python) (0) | 2023.01.31 |
[BOJ] 18312 - 시각 (Python, JavaScript) (0) | 2023.01.31 |
[BOJ] 2213 - 트리의 독립집합 (Python) (1) | 2023.01.29 |
Comments