[๋ฐฑ์ค(BOJ)] ์ซ์ ์ผ๊ตฌ(2503) C++
๋ฌธ์ : BOJ_2503๋ฒ ์ซ์ ์ผ๊ตฌ
๋ฌธ์ ์ค๋ช
์์ ํ์
์ฐ๋ฆฌ๊ฐ ํํ ์๋ ์ผ๊ตฌ๊ฒ์์ ๊ตฌํํ๋ ๋ฌธ์ ์
๋๋ค.
์ธ ์๋ฆฌ ์ซ์๋ฅผ ๋ง์ถฐ์ผํ๊ณ , ๊ฐ ์๋ฆฌ์ ์๋ ์ค๋ณต์ด ํ์ฉ๋์ง ์์ต๋๋ค.
n๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ซ์๋ง๋ค ๋ณผ๊ณผ ์คํธ๋ผ์ดํฌ๊ฐ ์ฃผ์ด์ง๊ณ ,
n๊ฐ์ ์ซ์ ๋ค์ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ต์ ์ด ๊ฐ์๋ฅผ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
Solution
n์ ์ต๋๊ฐ์ด 100, ์ธ์๋ฆฌ ์์ ์ต๋๊ฐ์ 111~999์ธ๋ฐ,
์ค๋ณต์ ํ์ฉํ๋ ๊ฒฝ์ฐ์ ์๋ผ๊ณ ํด๋
100 * 888 = 88,800์์ผ๋ก ์์ ํ์์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ ์ฒ์์ n๋ง๋ค stirke์ ์์ ball์ ์์
๋ฐ๋ฅธ ๊ฒฝ์ฐ์ ์๋ก ์กฐ๊ฑด๋ฌธ์ ์ง๋ดค์ง๋ง,
์ด๋ ๊ฒ ํ๋ฉด ๋๋ฌด ๋ณต์กํด์ง๊ณ , ๊ฐ n๋ง๋ค ์ฒดํฌ๋์ง์์ ๋ชจ๋ ์๋ฅผ ๋๋ฉด์, ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด ์ ๋ต์์ ํ๋ฝ์ํค๋ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ธ ์๋ฆฌ์๋ฅผ ํ๋ ์ฉ ์ฒดํฌํ๋ฉด์, ์คํธ๋ผ์ดํฌ์ ๊ฐ์์ ๋ณผ์ ๊ฐ์๋ฅผ ์์๋ณด๊ณ , ์ฃผ์ด์ง input๊ณผ ๋ง์ง์๋ค๋ฉด ๊ทธ ์๋ ์ ๋ต์์ ์ ์ธํ์ต๋๋ค.
Description
- ๊ฐ ์๋ฆฌ ์ ๋ง๋ค 0์ด ํ์ฉ๋์ง์์ผ๋ฏ๋ก, ์ผ์คํฌ๋ฌธ์ผ๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ํ๋์ต๋๋ค.
- ๊ฐ ์๋ฆฌ์๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ๋ฅผ ๊ทธ๋๋ก ๋๋๋ฉด wrong answer๊ฐ ๋์ค๋ฏ๋ก, ๊ฐ ์๋ฆฌ์๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ๋ ์ ๋ต์์ ์ ์ธ๋ฅผ ํด์ฃผ์ด์ผํฉ๋๋ค.
#include <iostream>
using namespace std;
int vis[1000]; // vis=1 ์ด๋ผ๋ฉด ์ ๋ต์์ ์ ์ธ๋ ์
int res = 9 * 9 * 9; // ์๋ฆฌ์๊ฐ ์ค๋ณต๋๋ ์ ์ญ์ ์ ๋ต์ ๊ฐ์ง์์์ ๋บ ๊ฒ ์ด๋ฏ๋ก 9*9*9
int main(void) {
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
int num;
scanf("%d", &num);
int firstNum = num / 100;
int secondNum = (num / 10) % 10;
int thirdNum = num % 10;
int strike, ball;
scanf("%d%d", &strike, &ball);
for (int j = 1; j <= 9; j++) {
// 3์ค ํฌ๋ฌธ์ผ๋ก ์ ์ฒด ์ ํ์ธ (์๋ฆฌ์์์ ์ค๋ณต๋๋ ์๋ ๋ง์ง๋ง ํฌ๋ฌธ์์ ์ ์ธ)
for (int k = 1; k <= 9; k++) {
for (int l = 1; l <= 9; l++) {
int value = 100 * j + 10 * k + l;
if (vis[value]) continue;
if (j == k || j == l || k == l) {
// ์๋ฆฌ์์์ ์ค๋ณต๋๋ ๊ฒ์ด ์์ผ๋ฉด ์ ๋ต์์ ์ ์ธ
vis[value] = 1;
res--;
continue;
}
int nowStrike = 0;
int nowBall = 0;
int isStrike[1000] = { 0, };
if (j == firstNum) {
nowStrike++;
isStrike[j]++;
}
if (k == secondNum) {
nowStrike++;
isStrike[k]++;
}
if (l == thirdNum) {
nowStrike++;
isStrike[l]++;
}
if (!isStrike[j]) {
if (j == secondNum || j == thirdNum) nowBall++;
}
if (!isStrike[k]) {
if (k == firstNum || k == thirdNum) nowBall++;
}
if (!isStrike[l]) {
if (l == firstNum || l == secondNum) nowBall++;
}
if (strike == nowStrike && ball == nowBall) continue;
else {
vis[value]++;
res--;
}
}
}
}
}
printf("%d\n", res);
return 0;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๊ณฑ์ (1629) (0) | 2022.03.06 |
---|---|
[BOJ] ํ์์ค๋ฐฐ์ (1931) (0) | 2022.03.06 |
[BOJ] ๋ฏธ์ธ๋จผ์ง ์๋ !(17144) (0) | 2022.03.06 |
[BOJ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ(14888) (0) | 2022.03.06 |
[BOJ] ํด์งํด์ง(1326) (0) | 2022.03.05 |