본문 바로가기

코딩테스트

[JAVA-D3] SWEA 7193 - 승현이의 수학공부

728x90
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

✅ 문제 요약

n진법 숫자 X를 입력받았을 때 X를 (n-1)로 나눈 나머지를 계산하라

 

🤔 문제 풀이

n진법을 나누기 위해 10진법으로 변환하려면

예를 들어 9진법 수 234의 경우 (2 * 9^2) + (3 * 9^1) + (4 * 9^0) 로 10진법으로 변환 할 수 있다. 

이때 문제에서 요구하는 대로 ( (2 * 9^2) + (3 * 9^1) + (4 * 9^0) ) % 8을 수행해야 하는데

이는 (2 * 9^2 % 8) + (3 * 9^1 % 8) + (4 * 9^0 % 8) 과 같다.

여기서 규칙이 하나 있는데 n의 배수를 n-1 로 나눈 나머지는 항상 1이다.

따라서 (2 * 9^2 % 8) + (3 * 9^1 % 8) + (4 * 9^0 % 8) 를 간단하게 2 + 3 + 4 로 표현이 가능하다.

 

결론적으로 해당 문제는 각 자릿수를 더해 n-1로 나누어 주면 되는 문제였다.

 

🚨CODE

import java.util.*;
import java.io.*;
 
public class Solution {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
        int testCase = Integer.parseInt(br.readLine());
        for (int t = 1; t <= testCase; t++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken()); // 진수
            char[] c = st.nextToken().toCharArray();
            int sum = 0;
             
            for(int i = 0; i<c.length; i++) {
                sum += c[i] - '0';
            }
             
            int answer = sum % (n-1);
             
            bw.write(String.format("#%d %d\n", t, answer));
        } // testcase
        bw.flush();
    }
}
728x90
반응형