반응형

1. 문제 번호 2745번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 나에게는 역대급 난이도

 

 

 

문제를 먼저 정확히 파악

 

 - 진수라고 하는 것은 한 자리에서 표현할 수 있는 숫자

    즉 2진수는 1자리에서 표현할 수 있는 최대값이 0~1

        8진수는 1자리에서 표현할 수 있는 최대값이 0~7

       10진수는 1자리에서 표현할 수 있는 최대값이 0~9

 

  •    2진수 - > 8진수 변환 방법
      (작은 것에서 큰 것으로  변환 이라고 이해 하세요. 이것만 이해하면 2진수 -> N진수 모두 가능 )
    1. 배경) 한 자리에 0~1로만 표현 가능한 세상에서 0~7까지 사용하여 표현할 수 있다.
      그렇기 때문에 2진수 3자리를 묶어서 1진수로 표현이 가능해졌다. (8진수 = 2^3)
    2. 예시) 1101111  가 2진수 
      1. 001 101 111  =   1   5   7
  •  8진수 -> 2진수 변환 방법 (큰 것에서 작은 것으로 변환)
    1. 배경) 한 자리에 0~7까지 표현 가능한 세상에서 0~1까지로 밖에 표현할 수 없다.
      그렇기 때문에 8진수 1자리를 묶어서 3자리로 표현해야 한다.
    2. 예시) 157 가 8진수
      1. 1을 표현하려고 3자리로 묶인 001, 5를 표현하려고 3자리로 묶은 101, 7을 표현하려고 3자리로 묶은 111 
  • N진수 -> 10진수 변환 (숫자 체계의 기본 원칙)
    1. 예시) 157가 8진수
      1. (1*8^2) + (5*8^1) + (7*8^0) = 111 (64 + 40 + 7)

 

  • N진수 -> 10진수 변환 방법 (숫자 체계의 기본 원칙)
    1. 예시) ZZZZZ 36진수 (36진수는 한 자리에서 0~35까지 표현 가능)
      1. Z는 35 이다. (A는 10이다.)
      2. ZZ는 (35*36^1)+(35*36^0) 이다. =1295
        1. Z9는 (35*36^1) + (9*36^0) = 1269이다.
      3. Z는 ASCII코드 90이다. 이유는 A (ASCII코드 65) , 26개 (알파벳 총개수) _ A에서 25만큼 떨어져 있다.
      4. Z - x = 35 이다.  x는 55이다.
    2. 즉 문자는 -55를 하면 10진수의 숫자로 표현이 가능하다.
    3. 0번째 자리부터 N번째 자리까지 36의 ^N 을 해줘야 한다.

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

A는 ASCII 65, 0 은 ASCII 48 

 

 

 

제일제일 어렵다.. 가장 오래걸리고 진수끼리 변환하는거 나는 너무 어렵다.

계산은 쉽지 근데 내가 막 바꿔가면서 계속 연습해보다보면 뭐가뭐였는지도 모르겠어 🤩 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
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()); //진수 표현

        int tmp = 1;
        int result = 0;

        for(int i = N.length()-1; i >= 0 ; i--){
            char c = N.charAt(i);
            if(c >= 'A' && c <= 'Z'){
                result += (c-55) * tmp;
            } else {
                result += (c-48) * tmp;
            }
            tmp *= B;
        }
        System.out.println(result);
    }
}

 

 

 

 

 

 

 

- 실패 소스코드 -

 

 

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 



728x90
반응형

+ Recent posts