[BaekJoon 14626][๐ค1] ISBN
โ ๋ฌธ์
๐ฏ ๋์ด๋
Bronze ๐ค1
๐ง ํ์ด
1. ๋ด ํ์ด (๋ธ๋ฃจํธ ํฌ์ค)
- ์๊ณ ๋ฆฌ์ฆ
Brute Force,Mathematics
- ์ค๋ช
๋ธ๋ฃจํธ ํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ํ์ด์ด๋ค.
๋ฌธ์์ด์ ์ํํ๋ฉฐ ๊ฐ ์ซ์์ ๊ฐ์ค์น๋ฅผ ๊ณฑํด์ฃผ๋ฉฐ ์ ์ฒด ํฉ์ ๊ตฌํ๊ณ , *์ ์๋ฆฌ๋ฅผ ์์๋ด์ด ๊ฐ์ค์น๋ฅผ ๊ตฌํ๊ณ , 0 <= N < 10 ๊ตฌ๊ฐ์ ๋ธ๋ฃจํธ ํฌ์ค๋ก ๋ฃจํ๋ฅผ ๋๋ฉฐ ๋ต์ ์ฐพ์๋ด๋ ๋ฐฉ์์ด๋ค.
๊ฐ์ฅ ์ง๊ด์ ์ด๊ณ ์ค์๊ฐ ๋์ฌ ๋ถ๋ถ์ด ์ ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ธ ํ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ฃจํ๋ฅผ ํ ๋ฒ ๋๋ฉฐ ๊ณ์ฐํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(N)์ด์ง๋ง, N = 13์ด๊ธฐ์ ๊ฑฐ์ ์์์ ๊ฐ๊น๋ค
- ์ฝ๋
๋ด ํ์ด ์ฝ๋
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string strInput{};
cin >> strInput;
int iSum{}; // *๋ฅผ ์ ์ธํ ๋ชจ๋ ํฉ
int iWeight{}; // *์ ๊ฐ์ค์น
for(int i = 0; i < static_cast<int>(strInput.length()); ++i)
{
if(strInput[i] == '*')
{
iWeight = i % 2 == 0 ? 1 : 3;
continue;
}
iSum += (strInput[i] - '0') * (i % 2 == 0 ? 1 : 3);
}
// 0 ~ 9๋ฅผ ์ํํ๋ฉฐ *์ ๊ฐ์ ์ฐพ๋๋ค
for(int i = 0; i < 10; ++i)
{
if((iSum + i * iWeight) % 10 == 0)
{
cout << i;
return 0;
}
}
return 0;
}
2. ์ถ๊ฐ ํ์ด (์ํ์ ํ์ด)
- ์๊ณ ๋ฆฌ์ฆ
Mathematics,Arithmetic
- ์ค๋ช
๋๋จธ์ง ์ฐ์ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ํ์ ํ์ด์ด๋ค.
์ด ๋ฌธ์ ๋ฅผ ์์ํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
\[(Sum + Weight * X) \% 10 == 0\]
์ฌ๊ธฐ์ Weight์ด 1์ผ ๋์ 3์ผ ๋๊ฐ ๊ฐ๋ฆฐ๋ค.
Weight == 1์ธ ๊ฒฝ์ฐ
\[X = (10 - Sum \% 10) \% 10\]
Weight == 3์ธ ๊ฒฝ์ฐ (3์ ์ญ์์ 7)
\[3X โก -Sum (mod 10)\] \[X = 7 * (10 - Sum \% 10) (mod 10)\]
๋ฐ๋ผ์ Sum์ ๊ตฌํด์ฃผ๊ณ ๋ถ๊ธฐ๋ณ๋ก ๋ฐ๋ก ๊ฒฐ๊ณผ๊ฐ์ ๊ณ์ฐ๋ง ํ๋ฉด, '๋ธ๋ฃจํธ ํฌ์ค'์ฒ๋ผ ๋ฃจํ๋ฅผ ๋์ง ์๊ณ ๋ ํ ๋ฒ์ ๊ฒฐ๊ณผ๊ฐ์ ๋์ถํ ์ ์๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ด๋ก ์ ๋น ๋ฅด๊ธด ํ์ง๋ง, ์์์ ์ด๋์ด๋ด๋ ๊ณผ์ ์์ ์ค์๊ฐ ์์ ์ ์๊ณ , ์ง๊ด์ฑ๋ ์ข์ง ์๋ค. ๊ทธ๋๋ ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ์ ํ์ด์ด๋ค.
Sum์ ๊ตฌํ๋ ๋ฐฉ์์ O(N)์ด์ง๋ง ๊ฒฐ๊ณผ ๋์ถ์ด O(1)์ด๋ค.
- ์ฝ๋
๋ด ํ์ด ์ฝ๋
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string strInput{};
cin >> strInput;
int iSum{}; // *๋ฅผ ์ ์ธํ ๋ชจ๋ ํฉ
int iWeight{}; // *์ ๊ฐ์ค์น
for(int i = 0; i < static_cast<int>(strInput.length()); ++i)
{
if(strInput[i] == '*')
{
iWeight = i % 2 == 0 ? 1 : 3;
continue;
}
iSum += (strInput[i] - '0') * (i % 2 == 0 ? 1 : 3);
}
int iResult{};
int iRight{ (10 - iSum % 10) % 10 }; // ์์ ๋ฐ๋ผ ์ฐ๋ณ์ ๋ค์ด๊ฐ ๊ฐ
if(iWeight == 1)
{
iResult = iRight;
}
else
{
// iWeight == 3์ธ ๊ฒฝ์ฐ ์ญ์์ธ 7์ ๊ณฑํด์ฃผ์ด์ผ ํจ
iResult = (7 * iRight) % 10;
}
cout << iResult;
return 0;
}
๐ญ ํ๊ธฐ
๋ธ๋ฃจํธ ํฌ์ค๋ก ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋๋จธ์ง ์ฐ์ฐ์ ํน์ฑ์ ์ฌ์ฉํด์ ์์ํํ์ฌ ๋ ํจ์จ์ ์ธ ํ์ด๋ก ๋ง๋ค ์ ์๋ ๋ฌธ์ ์ด๋ค.
๋๋จธ์ง ์ฐ์ฐ์ ์ ํํ ์๋ฆฌ๋ฅผ ์์๋๋ฉด ์์ผ๋ก ๋ฌธ์ ํ ๋ ๋ง์ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค.
Comments