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 |
Tags
- BFS
- 스택
- 메모리풀
- SSAFY
- 큐
- DP
- 완전 탐색
- 우선순위 큐
- 클래스
- dfs
- Knapsack
- 빠른 입출력
- 분할 정복
- 크루스칼
- 문자열
- 비트마스크
- 조합
- 피보나치 수
- 세그먼트 트리
- 그리디
- 백트래킹
- 재귀
- lis
- 순열
- 링크드리스트
- 이분 탐색
- 중복 순열
- BeautifulSoup
- 시뮬레이션
- MST
Archives
- Today
- Total
작심 24/7
[백준] 2503번 숫자 야구 (C++, JAVA) 본문
123부터 987까지의 i를 N과 비교하면서
스트라이크와 볼의 개수를 세어준 뒤
입력된 스트라이크와 볼의 개수와 비교해주고
같으면 배열[i]에 1을, 다르면 -1을 저장한다.
N과 i를 비교할 때 주의할 점은
세 자리가 각각 다른 숫자로 구성되어 있어야 하고, 0이 포함되면 안 된다.
이 부분만 주의해주면 된다.
이 코드가 무식해 보인다면
삼중 for문이나 순열로 좀 있어 보이게 짤 수 있다.
< C++ 코드 >
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
int num, strike, ball, res = 0;
int arr[1000] = { 0 };
for (int n = 0; n < N; n++) {
cin >> num >> strike >> ball;
for (int i = 123; i <= 987; i++) {
if (arr[i] != -1 && i % 10 != 0 && i / 10 % 10 != 0 && i / 100 != 0 && i % 10 != i / 10 % 10 && i / 10 % 10 != i / 100 && i / 100 != i % 10) {
int s = 0, b = 0;
if (num % 10 == i % 10) s++;
if (num / 10 % 10 == i / 10 % 10) s++;
if (num / 100 == i / 100) s++;
if (num % 10 == i / 10 % 10 || num % 10 == i / 100) b++;
if (num / 10 % 10 == i % 10 || num / 10 % 10 == i / 100) b++;
if (num / 100 == i / 10 % 10 || num / 100 == i % 10) b++;
if (strike == s && ball == b) arr[i] = 1;
else arr[i] = -1;
}
}
}
for (int i = 123; i <= 987; i++) if (arr[i] == 1) res++;
cout << res;
return 0;
}
< JAVA 코드 >
import java.util.Scanner;
public class BOJ_2503_숫자야구 {
private static int N, cnt = 0;
private static boolean num[] = new boolean[988];
public static void check(int number, int strike, int ball) {
int a = number/100, b = number%100/10, c = number%100%10;
for(int i = 123; i < 988; i++) {
if(num[i]) continue;
int a2 = i/100, b2 = i%100/10, c2 = i%100%10, strike2 = 0, ball2 = 0;
if(a2 == 0 || b2 == 0 || c2 == 0 || a2 == b2 || b2 == c2 || a2 == c2) { num[i] = true; continue; }
if(a == a2) strike2++;
if(b == b2) strike2++;
if(c == c2) strike2++;
if(a == b2 || a == c2) ball2++;
if(b == a2 || b == c2) ball2++;
if(c == b2 || c == a2) ball2++;
if(strike != strike2 || ball != ball2) num[i] = true;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
for(int n = 0; n < N; n++) check(sc.nextInt(), sc.nextInt(), sc.nextInt());
for(int i = 123; i < 988; i++) if(!num[i]) cnt++;
System.out.println(cnt);
}
}
'백준' 카테고리의 다른 글
[백준] 1012번 유기농 배추 (C++, JAVA) (0) | 2020.06.09 |
---|---|
[백준] 1182번 부분수열의 합 (0) | 2020.06.08 |
[백준] 10448번 유레카 이론 (0) | 2020.06.07 |
[백준] 2309번 일곱 난쟁이 (0) | 2020.06.07 |
[백준] 1912번 연속합 (0) | 2020.06.07 |
Comments