2745, 11005์ ์ง๋ฒ๋ณํ ๋ฌธ์ ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
๋ฌธ์ ํ๊ธฐ์ ์์ ์ง๋ฒ์ด ๋ฌด์์ธ์ง! ์์๋ณด์
์ง๋ฒ์ด๋?
์๋ฅผ ์ ๋ ์๋ฆฟ์๊ฐ ์ฌ๋ผ๊ฐ๋ ๋จ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ ์ ๋ฒ *์ซ์๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ํ๋ด๋ ‘๊ธฐ์๋ฒ’์ ์ผ์ข ์ผ๋ก, ‘์์น๊ธฐ์๋ฒ’์ด๋ผ๊ณ ๋ ํ๋ค. |
์ด๋ ๊ฒ ๋งํ๋ฉด ์ดํด๊ฐ ์ ์๊ฐ๊ฒ์ด๋ค. ์ฐ๋ฆฌ์๊ฒ ์ต์ํ 2์ง๋ฒ, 8์ง๋ฒ๋ฑ์ ์๋ก ๋ค์ด๋ณด์๋ฉด
- 2์ง๋ฒ : 0๊ณผ 1๋ก๋ง ๊ตฌ์ฑ
- 8์ง๋ฒ : 0~7๊น์ง์ ์ซ์๋ก ๊ตฌ์ฑ
- 16์ง๋ฒ : 0~16๊น์ง์ ์ซ์๋ก ๊ตฌ์ฑ
( ๊ทธ๋ฐ๋ฐ 10๋ถํฐ๋ ํํ์ด ์๋๋ฏ๋ก ABCD..๋ฅผ ์ฌ์ฉ )
์ฆ, ํ ์๋ฆฌ์ ์ต๋ ์ซ์๊ฐ ๋ช๊ฐ๊ฐ ์ค๋์ง!๋ฅผ ๋ํ๋ด๋๊ฑฐ๋ผ๊ณ ๋ณผ ์ ์๊ฒ ๋ค.
( 16์ง๋ฒ์ ํ ์๋ฆฌ์ 0๋ถํฐ 15๊น์ง ์ค๋๊ฒ์ด๋ผ ๋ณผ ์ ์๊ฒ ๋ค. ๋กธ์?)
์ง๋ฒ ๋ณํ
1. 10์ง์ → ๋ค๋ฅธ ์ง๋ฒ(N)์ผ๋ก
: N์ง๋ฒ์ ์ N์ผ๋ก ๋๋์ ์ ํ๋ฉด ๋๋ค!
ex1) 45(10)๋ฅผ 2์ง์๋ก
ex2) 255(10)๋ฅผ 16์ง์๋ก
2. N์ง๋ฒ → 10์ง์๋ก
๊ฐ ์๋ฆฌ ๊ฐ์ N์ ๊ณฑํด์ 10์ง์๋ก ๋ณํํ ํ ๋ํ๋ฉด ๋๋ค!
ex1) 1011(2)๋ฅผ 10์ง์๋ก
ex2) 1F(16)๋ฅผ 10์ง์๋ก
3. 2์ง์๋ฅผ 8์ง์, 16์ง์๋ก
๊ทธ๋ฃนํํ์ฌ ๋ณํํ๋ฉด ๋๋ค.
2745 ์ง๋ฒ๋ณํ (์๋ฐ8 64ms)
โ๏ธ B์ง๋ฒ ์ N์ 10์ง๋ฒ์ผ๋ก ๋ณํํ๋ ๋ฌธ์ ์ด๋ค.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String N = st.nextToken();
int B = Integer.parseInt(st.nextToken());
// ๋ฌธ์์ด ๋ค์ง๊ธฐ
StringBuffer sb = new StringBuffer(N);
String n = sb.reverse().toString();
char[] Narray = n.toCharArray();
int num;
int sum = 0;
for (int i = 0; i < Narray.length; i++) {
// ์์คํค
num = (int)(Math.pow(B,i));
if (Narray[i] >= 65) {
int a = (Narray[i] - 55);
sum += a*num;
} else if (Narray[i] < 65) {
int a = Narray[i] - 48;
sum += a*num;
}
}
System.out.println(sum);
}
}
โ๏ธ ์์คํค์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
0๋ถํฐ 9๊น์ง์ ์์คํค์ฝ๋๋ 48~57์ด๊ณ , ์ํ๋ฒณ์ด ์์ํ๋ A์ ์์คํค์ฝ๋๋ 65์ด๋ค.
๊ทธ๋์ ์์คํค์ฝ๋ 65์ธ A๋ณด๋ค ์์ผ๋ฉด ์ซ์, ํฌ๋ฉด ์ํ๋ฒณ์ผ๋ก ํ์ฌ ๋๋์๋ค.
โ๏ธ B์ ์ ๊ณฑ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ค.
์ธ๋ฑ์ค ์ฌ์ฉ์ ์ํด N์ ๊ฐ์ reverseํ์ฌ ๋ฐฐ์ด์ ์์๋ก ๋๋ ์ฌ์ฉํ๋ค.
์ด์งํผ ์๋ฆฟ์๋ก ๋๋ ๊ณ์ฐํ๋ค์ ๋ง์ง๋ง์ ๋ํ ๊ฒ์ด๋ฏ๋ก ์์๋ ์๊ด์๋ค.
11005 ์ง๋ฒ ๋ณํ 2 (์๋ฐ8 68ms)
โ๏ธ 10์ง๋ฒ ์ N์ B์ง๋ฒ์ผ๋ก ๋ณํํ๋ ๋ฌธ์ ์ด๋ค.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
int remain;
while ( N > 0 ){
remain = N%B;
if (remain >= 10){ //A~Z (์์คํค:+55)
sb.append((char)(remain+55));
}else{
sb.append((char)(remain+48));
}
N = N/B;
}
System.out.println(sb.reverse().toString());
}
}
โ๏ธ ๋๋จธ์ง๋ฅผ remain์ด๋ผ๋ ๋ณ์์ ๋ด์ ์์คํค์ฝ๋๋ก ๋ณํํด์ ์ฌ์ฉํ๋ค.
โ๏ธ ๋ง์ง๋ง์ reverse๋ฅผ ํด์ ์ถ๋ ฅํ๋๊ฒ ์ค์ํ๋ค.
-> ์ด๊ฑธ ์ํ์ ๊ฒฝ์ฐ ๊ฑฐ๊พธ๋ก ์ถ๋ ฅ์ด ๋์ด ํ๋ฆฐ๋ค.