πŸ™‡β€β™€οΈ[Silver III] 숫자 야ꡬ - 2503

문제 링크

μ„±λŠ₯ μš”μ•½

λ©”λͺ¨λ¦¬: 2020 KB, μ‹œκ°„: 0 ms

λΆ„λ₯˜

브루트포슀 μ•Œκ³ λ¦¬μ¦˜, κ΅¬ν˜„

제좜 일자

2024λ…„ 1μ›” 6일 15:29:32

문제 μ„€λͺ…

정보문화진ν₯원 정보 영재 λ™μ•„λ¦¬μ—μ„œ 동아리 ν™œλ™μ„ ν•˜λ˜ μ˜μˆ˜μ™€ λ―Όν˜μ΄λŠ” μ‰¬λŠ” μ‹œκ°„μ„ ν‹ˆνƒ€ μˆ«μžμ•Όκ΅¬ κ²Œμž„μ„ ν•˜κΈ°λ‘œ ν–ˆλ‹€.

  • μ˜μˆ˜λŠ” 1μ—μ„œ 9κΉŒμ§€μ˜ μ„œλ‘œ λ‹€λ₯Έ 숫자 μ„Έ 개둜 κ΅¬μ„±λœ μ„Έ 자리 수λ₯Ό λ§ˆμŒμ†μœΌλ‘œ μƒκ°ν•œλ‹€. (예: 324)
  • λ―Όν˜μ΄λŠ” 1μ—μ„œ 9κΉŒμ§€μ˜ μ„œλ‘œ λ‹€λ₯Έ 숫자 μ„Έ 개둜 κ΅¬μ„±λœ μ„Έ 자리 수λ₯Ό μ˜μˆ˜μ—κ²Œ λ¬»λŠ”λ‹€. (예: 123)
  • λ―Όν˜μ΄κ°€ λ§ν•œ μ„Έ 자리 μˆ˜μ— μžˆλŠ” μˆ«μžλ“€ 쀑 ν•˜λ‚˜κ°€ 영수의 μ„Έ 자리 수의 λ™μΌν•œ μžλ¦¬μ— μœ„μΉ˜ν•˜λ©΄ 슀트라이크 ν•œ 번으둜 μ„Όλ‹€. μˆ«μžκ°€ 영수의 μ„Έ 자리 μˆ˜μ— 있긴 ν•˜λ‚˜ λ‹€λ₯Έ μžλ¦¬μ— μœ„μΉ˜ν•˜λ©΄ λ³Ό ν•œ 번으둜 μ„Όλ‹€.

예) μ˜μˆ˜κ°€ 324λ₯Ό κ°–κ³  있으면

  • 429λŠ” 1 슀트라이크 1 볼이닀.
  • 241은 0 슀트라이크 2 볼이닀.
  • 924λŠ” 2 슀트라이크 0 볼이닀.
  • μ˜μˆ˜λŠ” λ―Όν˜μ΄κ°€ λ§ν•œ μˆ˜κ°€ λͺ‡ 슀트라이크 λͺ‡ 볼인지λ₯Ό λ‹΅ν•΄μ€€λ‹€.
  • λ―Όν˜μ΄κ°€ 영수의 μ„Έ 자리 수λ₯Ό μ •ν™•ν•˜κ²Œ λ§žμΆ”μ–΄ 3 μŠ€νŠΈλΌμ΄ν¬κ°€ 되면 κ²Œμž„μ΄ λλ‚œλ‹€. μ•„λ‹ˆλΌλ©΄ λ―Όν˜μ΄λŠ” μƒˆλ‘œμš΄ 수λ₯Ό 생각해 λ‹€μ‹œ μ˜μˆ˜μ—κ²Œ λ¬»λŠ”λ‹€.

ν˜„μž¬ λ―Όν˜μ΄μ™€ μ˜μˆ˜λŠ” κ²Œμž„μ„ ν•˜κ³  μžˆλŠ” 도쀑에 μžˆλ‹€. λ―Όν˜μ΄κ°€ μ˜μˆ˜μ—κ²Œ μ–΄λ–€ μˆ˜λ“€μ„ λ¬Όμ–΄λ³΄μ•˜λŠ”μ§€, 그리고 각각의 λ¬ΌμŒμ— μ˜μˆ˜κ°€ μ–΄λ–€ λŒ€λ‹΅μ„ ν–ˆλŠ”μ§€κ°€ μž…λ ₯으둜 주어진닀. 이 μž…λ ₯을 λ°”νƒ•μœΌλ‘œ μ—¬λŸ¬λΆ„μ€ μ˜μˆ˜κ°€ μƒκ°ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 μžˆλŠ” μˆ˜κ°€ 총 λͺ‡ κ°œμΈμ§€λ₯Ό μ•Œμ•„λ§žν˜€μ•Ό ν•œλ‹€.

μ•„λž˜μ™€ 같은 경우λ₯Ό μƒκ°ν•΄λ³΄μž.

  • 민혁: 123
  • 영수: 1 슀트라이크 1 λ³Ό.
  • 민혁: 356
  • 영수: 1 슀트라이크 0 λ³Ό.
  • 민혁: 327
  • 영수: 2 슀트라이크 0 λ³Ό.
  • 민혁: 489
  • 영수: 0 슀트라이크 1 λ³Ό.

μ΄λ•Œ κ°€λŠ₯ν•œ 닡은 324와 328, μ΄λ ‡κ²Œ 두 가지이닀.

μ˜μˆ˜λŠ” λ™μ•„λ¦¬μ˜ κ·œμœ¨μ„ 잘 λ”°λ₯΄λŠ” μ°©ν•œ 아이라 민혁이의 λ¬ΌμŒμ— κ³§μ΄κ³§λŒ€λ‘œ μ •μ§ν•˜κ²Œ λ‹΅ν•œλ‹€. κ·ΈλŸ¬λ―€λ‘œ 영수의 λ‹΅λ“€μ—λŠ” λͺ¨μˆœμ΄ μ—†λ‹€.

민혁이의 λ¬ΌμŒλ“€κ³Ό 각각의 λ¬ΌμŒμ— λŒ€ν•œ 영수의 닡이 μž…λ ₯으둜 μ£Όμ–΄μ§ˆ λ•Œ μ˜μˆ˜κ°€ μƒκ°ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 μžˆλŠ” λ‹΅μ˜ 총 개수λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 μ€„μ—λŠ” λ―Όν˜μ΄κ°€ μ˜μˆ˜μ—κ²Œ λͺ‡ λ²ˆμ΄λ‚˜ μ§ˆλ¬Έμ„ ν–ˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 1 이상 100 μ΄ν•˜μ˜ μžμ—°μˆ˜ N이 주어진닀. μ΄μ–΄μ§€λŠ” N개의 μ€„μ—λŠ” 각 μ€„λ§ˆλ‹€ λ―Όν˜μ΄κ°€ μ§ˆλ¬Έν•œ μ„Έ 자리 μˆ˜μ™€ μ˜μˆ˜κ°€ λ‹΅ν•œ 슀트라이크 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜μ™€ 볼의 개수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜, μ΄λ ‡κ²Œ 총 μ„Έ 개의 μ •μˆ˜κ°€ λΉˆμΉΈμ„ 사이에 두고 주어진닀.

좜λ ₯

첫 쀄에 μ˜μˆ˜κ°€ μƒκ°ν•˜κ³  μžˆμ„ κ°€λŠ₯성이 μžˆλŠ” λ‹΅μ˜ 총 개수λ₯Ό 좜λ ₯ν•œλ‹€.

πŸš€ν’€μ΄

ν•΄λ‹Ή μˆ«μžκ°€ κ°€λŠ₯성이 μžˆλŠ”μ§€ κ²€μ‚¬ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆλ‹€.

0이 λ“€μ–΄κ°€λ©΄ μ•ˆλ˜κ³  λͺ¨λ“  μˆ«μžκ°€ λ‹¬λΌμ•Όν•˜λ©° 슀트라이크, 볼의 개수λ₯Ό μ„Έμ–΄μ„œ κ²°κ³Όλ₯Ό λ‚΄λŠ” ν•¨μˆ˜μ΄λ‹€.

bool hasPossibility(int input, int number, int strike, int ball)
{
	int input100 = input / 100;
	int input10 = input / 10 % 10;
	int input1 = input % 10;
	int number100 = number / 100;
	int number10 = number / 10 % 10;
	int number1 = number % 10;

	if (input100 == input10 || input100 == input1 || input10 == input1)
		return false;
	if (input100 == 0 || input10 == 0 || input1 == 0)
		return false;

	int checkStrike = 0, checkBall = 0;
	if (input100 == number100)
	{
		checkStrike++;
	}
	if (input10 == number10)
	{
		checkStrike++;
	}
	if (input1 == number1)
	{
		checkStrike++;
	}

	if (input100 == number10 || input100 == number1)
	{
		checkBall++;
	}
	if (input10 == number1)
	{
		checkBall++;
	}
	if (number100 == input10 || number100 == input1)
	{
		checkBall++;
	}
	if (number10 == input1)
	{
		checkBall++;
	}

	if (checkStrike == strike && checkBall == ball)
	{
		return true;
	}
	else
	{
		return false;
	}
}

μœ„μ˜ ν•¨μˆ˜λ₯Ό 123~987λͺ¨λ‘ νƒμƒ‰ν•΄μ„œ 경우λ₯Ό κ΅¬ν•œλ‹€.

πŸš€μ „μ²΄ μ½”λ“œ

κ°€λŠ₯성이 μžˆλŠ” λͺ¨λ“  μˆ«μžκ°€ 좜λ ₯ν•˜κ²Œ ν–ˆλ‹€.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

bool hasPossibility(int input, int number, int strike, int ball)
{
	int input100 = input / 100;
	int input10 = input / 10 % 10;
	int input1 = input % 10;
	int number100 = number / 100;
	int number10 = number / 10 % 10;
	int number1 = number % 10;

	if (input100 == input10 || input100 == input1 || input10 == input1)
		return false;
	if (input100 == 0 || input10 == 0 || input1 == 0)
		return false;

	int checkStrike = 0, checkBall = 0;
	if (input100 == number100)
	{
		checkStrike++;
	}
	if (input10 == number10)
	{
		checkStrike++;
	}
	if (input1 == number1)
	{
		checkStrike++;
	}

	if (input100 == number10 || input100 == number1)
	{
		checkBall++;
	}
	if (input10 == number1)
	{
		checkBall++;
	}
	if (number100 == input10 || number100 == input1)
	{
		checkBall++;
	}
	if (number10 == input1)
	{
		checkBall++;
	}

	if (checkStrike == strike && checkBall == ball)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int n, res = 0, number, strike, ball, maxNum = 0;
vector<int> vec;
void solve()
{
	vec = vector<int>(1000);
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> number >> strike >> ball;
		for (int j = 123; j < 1000; ++j)
		{
			if (hasPossibility(j, number, strike, ball))
			{
				vec[j]++;
				maxNum = max(maxNum, vec[j]);
			}
		}
	}

	for (int i = 123; i < 1000; ++i)
	{
		if (vec[i] == maxNum)
		{
			res++;
			cout << i << endl;
		}
	}

	cout << res;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ: