SWEA - 7193. 승현이의 수학공부 :: 매운코딩
728x90
300x250

pass code는 맨 아래에 있습니다.

 

 

1. 실패코드 (시간초과)

받은 수를  10진수로 변환 -> 그다음 N-1 로 나눈 나머지 값구함..

이게 문제에도 적혀있듯이 X가 매우 큰 숫자임에 유의하라. 때문에 시간 초과가 난다.

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{	
    public static int T,N;
	public static long dec,ans; //10진수
	public static String X;
	public static void main(String args[]) throws Exception
	{
				Scanner sc = new Scanner(System.in);

		
		T = sc.nextInt();
		for (int tc = 0; tc < T; tc++) {
			ans = 0;
			dec= 0;
			N = sc.nextInt();
			X = sc.next();
			
			for (int i = 0; i < X.length(); i++) {
				dec+= Character.getNumericValue(X.charAt(X.length()-1-i)) * Math.pow(N, i);
			}
			
			ans = dec % (N-1);
			
			System.out.println("#"+(tc+1)+" "+ans);
		}
	}
}

 

2.통과코드

구글링해서 본 결과 규칙이 있는것으로 보였다.

페르마의 소정리 기법이라고 한다.

10진수 345라는 값이 있고 N-1인 9로 나눈 나머지를 구할때

(3 + 4 + 5) % 9 한것과  345 % 9 한 것이 같다.

이를 N진수에도 적용하여 계산 한 것..

ex) 9진수 234를 8로 나눈다면

(2 + 3 + 4) % 8 = 1

 

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{	
    public static int T,N;
	public static long dec,ans; //10진수
	public static String X;
	public static void main(String args[]) throws Exception
	{
				Scanner sc = new Scanner(System.in);

		
		T = sc.nextInt();
		for (int tc = 0; tc < T; tc++) {
			ans = 0;
			dec= 0;
			N = sc.nextInt();
			X = sc.next();
			
			for (int i = 0; i < X.length(); i++) {
				dec+= Character.getNumericValue(X.charAt(i));
			}
			ans = dec % (N-1);
			
			System.out.println("#"+(tc+1)+" "+ans);
		}
	}
}
728x90

'알고리즘 > 그 외' 카테고리의 다른 글

SWEA - 1229. [S/W 문제해결 기본] 8일차 - 암호문2  (0) 2020.05.15
SWEA - 8741. 두문자어  (0) 2020.05.10
백준 2167번: 2차원 배열의 합  (0) 2020.03.14
SWEA - 8658. Summation  (0) 2020.03.14
백준 13458번: 시험 감독  (0) 2020.03.08

+ Recent posts