본문 바로가기

Coding Test

[node.js, javascript] 백준 알고리즘 1009번

 

문제와 입출력 방식 :

 

 

 

 

 

 

1. a 제곱 b의 값을 나누기 10해서 맨뒤에 값을 구해봤다.

 

하지만 7의 100승 같은 너무 큰 수가 나올때는 컴퓨터가 값을 구하질 못해서 실패함

 

 

 

2. a를 제곱했을때의 값이 가지는 반복된 끝자리수가 있다는 걸 알았다

 

    "1": [1],
    "2": [2, 4, 8, 6],
    "3": [3, 9, 7, 1],
    "4": [4, 6],
    "5": [5],
    "6": [6],
    "7": [7, 9, 3, 1],
    "8": [8, 4, 2, 6],
    "9": [9, 1],
    "0": [10]

출처: https://velog.io/@grinding_hannah/AlgorithmJavaScript-%EB%B0%B1%EC%A4%80-1009%EB%B2%88-%EB%B6%84%EC%82%B0%EC%B2%98%EB%A6%AC

 

 

 

 

3. 이걸로 반복되는 수의 최대가 4라는 것을 알았다.

그래서 b를 4로 나눠서 a와 제곱을 했다.

 

 

const readline = require('readline');
const rl = readline.createInterface({
	 input: process.stdin,
	 output: process.stdout
});

let input = []

rl.on('line',line=>{
    input.push(line.split(' ').map(item=>parseInt(item)))
})
.on('close',()=>{
    const t = input[0][0];
    for(i=1; i<=t; i++){
        let [a,b] = input[i];
        a %= 10
        b %= 4
        let result = (a**b)
        let rst = parseInt(result.toString().slice(-1))
        console.log(rst)
    }
    process.exit();
})

 

 

 

 

4. 하지만 b의 값이 4일때는 0제곱이 되어버린다는 것을 발견하고 예외값으로 설정해줬다.

 

if(b==0) b=4;

 

 

 

5. 마지막으로 결과값의 맨 뒷자리 수가 0이라면 10번째 컴퓨터라는 예외값을 하나 더 추가 해줌으로 코드를 완성할 수 있었다.

 

if(rst == 0) rst = 10

 

 

완성코드:

 

const readline = require('readline');
const rl = readline.createInterface({
	 input: process.stdin,
	 output: process.stdout
});

let input = []

rl.on('line',line=>{
    input.push(line.split(' ').map(item=>parseInt(item)))
})
.on('close',()=>{
    const t = input[0][0];
    for(i=1; i<=t; i++){
        let [a,b] = input[i];
        a %= 10
        b %= 4
        if(b==0) b=4;
        let result = (a**b)
        let rst = parseInt(result.toString().slice(-1))
        
        if(rst == 0) rst = 10
        console.log(rst)
    }
    process.exit();
})