https://www.acmicpc.net/problem/2745
์ฝ๋
import java.util.Scanner;
public class Main {
// num1 ์ num2 ์ ๊ณฑ
// numSqrt(15, 3) => 15 * 15 * 15
static int numSqrt(int num1, int num2) {
int result = 1;
for(int i=1; i<=num2; i++)
result *= num1;
return result;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int answer = 0; // 10์ง๋ฒ์ผ๋ก ์ถ๋ ฅํ ์
int index = 0; // ์ ๊ณฑ์ ์ง์
String[] sArr = scan.nextLine().split(" "); // ์N๊ณผ B์ง๋ฒ์ ์
๋ ฅ๋ฐ์์ ์๋ผ์ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
int B = Integer.parseInt(sArr[1]); // ์ง๋ฒ B(int ํ๋ณํ)
String str = sArr[0]; // ์ซ์ N
for(int i=str.length()-1; i>=0; i--) {
// ์ N์ด 10์ง๋ฒ์ ๋์ด๊ฐ๋ ์์ผ๋
int num = 0;
char ch = str.charAt(i);
// ์์คํค์ฝ๋: A(65) ~ Z(90) ==> 10 ~ 35 ... ๋ฐ๋ผ์ 55๋ฅผ ๋นผ์ค๋ค.
if(ch >= 'A' && ch <= 'Z')
num = sArr[0].charAt(i) - 55;
// 0 ~ 9์ ๋ฌธ์๋ 0์ ๋นผ์ ์ซ์๋ก ๋ง๋ค์ด์ค๋ค.
else
num = sArr[0].charAt(i) - '0';
// N = ZZZZZ, B = 36์ผ๋
// ๊ฐ ์๋ฆฟ์๋ (Z*36^0) + (Z*36^1) + (Z*36^2) + (Z*36^3) + (Z*36^4) ๊ฐ ๋๋ค.
// ๋ฐ๋ผ์
answer += num * numSqrt(B, index);
index ++;
}
System.out.println(answer);
scan.close();
}
}
ํ์ด
B ์ง๋ฒ์ N์ 10์ง๋ฒ์ผ๋ก ๋ฐ๊พธ๋ ๋ฌธ์ ๋ค.
10์ง๋ฒ์ ๋์ด๊ฐ๋ ์ง๋ฒ์ ์ซ์๋ก ํ์ํ์ง ์๊ณ ์ํ๋ฒณ ๋๋ฌธ์๋ก ํ์ํ๋ค.
A = 10, B = 11, C = 12, ... , Z = 35
์ง๋ฒ B๊ฐ 15์ด๊ณ , N์ด BAA๋ผ๊ณ ๊ฐ์ ํ์๋.
BAA = 11, 10, 10์ด๋ฏ๋ก 11 * (15^2) + 10 * (15^1) + 10 * (15^0) ์ด ๋์ด์ 2635๊ฐ ์ ๋ต์ด๋ค.
์ด๋ B์ ์ง์๋ 0๋ถํฐ 1์ฉ ์ฆ๊ฐํ๋ฏ๋ก, numSqrt()๋ผ๋ ๋ฉ์๋์์ ์ง์๋งํผ ๊ณฑํ๋๋ก ๊ตฌํํ๋ค.
numSqrt(15, 3) => 15 * 15 * 15 => 15^3
ํ์ค๋ก ์ ๋ ฅ๋ฐ์ผ๋ฏ๋ก Scannerํด๋์ค์ nextLine()์ ํตํด ์ ๋ ฅ๋ฐ๊ณ , split(" ")์ ์ด์ฉํด ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํด์ String ๋ฐฐ์ด์ sArr์ ์ ์ฅํ๋ค.
String[] sArr = scan.nextLine().split(" "); // ์N๊ณผ B์ง๋ฒ์ ์
๋ ฅ๋ฐ์์ ์๋ผ์ ๋ฌธ์์ด ๋ฐฐ์ด์ ๋ฃ๊ธฐ.
int B = Integer.parseInt(sArr[1]); // ์ง๋ฒ B(int ํ๋ณํ)
String str = sArr[0]; // ์ซ์ N
๋ฐฐ์ด์ 0๋ฒ์งธ ๊ฐ์ ์ซ์ N์ด๊ณ , ์ฒซ ๋ฒ์งธ ๊ฐ์ ์ง๋ฒ B์ด๋ค.
N์ด BAA ์ผ๋, ๊ฐ์ฅ ๋ง์ง๋ง ์ ๋ถํฐ ๊ณ์ฐํด์ฃผ๊ธฐ ์ํด for๋ฌธ์ i๊ฐ์ ๋ง์ง๋ง์ผ๋ก ์ค์ ํ๋ค.
๋ง์ฝ ์ N์ด ์ํ๋ฒณ์ผ๋(A ~ Z) => ์์คํค์ฝ๋๊ฐ(65~90) ์์ 55๋ฅผ ๋นผ์ฃผ๊ณ ,
0~9์ ๋ฌธ์์ผ๋๋ '0'์ ๋นผ์ค์ ์ซ์๋ก ๋ง๋ค์ด ์ค๋ค.
for(int i=str.length()-1; i>=0; i--) {
// ์ N์ด 10์ง๋ฒ์ ๋์ด๊ฐ๋ ์์ผ๋
int num = 0;
char ch = str.charAt(i);
// ์์คํค์ฝ๋: A(65) ~ Z(90) ==> 10 ~ 35 ... ๋ฐ๋ผ์ 55๋ฅผ ๋นผ์ค๋ค.
if(ch >= 'A' && ch <= 'Z')
num = sArr[0].charAt(i) - 55;
// 0 ~ 9์ ๋ฌธ์๋ 0์ ๋นผ์ ์ซ์๋ก ๋ง๋ค์ด์ค๋ค.
else
num = sArr[0].charAt(i) - '0';
๊ทธ ํ ์ผ์์๋ฆฌ๋ถํฐ ์ง์๋ฅผ ํ๋์ฉ ๋์ด๋ฉฐ ๊ณฑํ๊ฐ์ ๋ํด์ค๋ค.
B = 15, N = BAA ์ผ๋,
answer = 10 + 10 * (15^0) = 10
answer = 10 + 10 * (15^1) = 160
answer = 160 + 11 * (15^2) = 2635
answer += num * numSqrt(B, index);
index ++;
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2903๋ฒ: ์ค์ ์ด๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2020.01.29 |
---|---|
[๋ฐฑ์ค] 1080๋ฒ: ํ๋ ฌ(๊ทธ๋ฆฌ๋) (0) | 2020.01.28 |
[๋ฐฑ์ค] 1541๋ฒ: ์์ด๋ฒ๋ฆฐ ๊ดํธ(๊ทธ๋ฆฌ๋) (0) | 2020.01.26 |
[๋ฐฑ์ค] 1120๋ฒ: ๋ฌธ์์ด(๊ทธ๋ฆฌ๋) (0) | 2020.01.23 |
[๋ฐฑ์ค] 10610๋ฒ: 30(๊ทธ๋ฆฌ๋) (0) | 2020.01.23 |
๋๊ธ