본문 바로가기
Algorithm 💫/Problem Solving

[Softeer] 21년 재직자 대회 예선 - 전광판(level2, Javascript)

by 돼지고기맛있다 2024. 11. 12.
반응형

✏️ 문제 링크

https://softeer.ai/practice/6268/history?questionType=ALGORITHM

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

✏️ 문제 풀이

간단한 string 비교 문제로, 0부터 9까지 라이트가 켜진 위치 정보를 저장한다.

 

이렇게 인덱스를 정하고 이제 숫자별로 라이트가 켜진 부분을 저장하면 된다. 

그렇게 하면 아래와 같은 스트링이 나온다. '-'는 아예 켜지지 않은 전광판을 의미한다. 

{
	'-':'0000000', 0:'1110111', 1:'0010010', 2:'1011101', 
	3:'1011011', 4:'0111010', 5:'1101011', 6:'1101111', 
	7:'1110010', 8:'1111111', 9:'1111011'
}

 

 

 

이제 쉽다. 숫자 A와 B를 비교해서 각 숫자의 켜진 부분과 꺼진 부분의 차이가 몇 개 나는지 카운트해서 그걸 answer로 출력해주면 된다. 

예를 들어 A[0]은 1이고 B[0]은 현재 2라고 했을 때 정의해둔 1과 2의 정보를 가지고 스트링의 다른 부분을 카운트하는거다. 

근데 이렇게 하기 위해서는 숫자의 length가 같아야한다. 그렇기 때문에 5-A.length 만큼, 5-B.length 만큼 앞에 아예 켜지지 않은 전광판을 붙여준다. 이렇게 하면 나중에 A[idx]가 '-' 이고 B[idx] 가 숫자가 되면 둘의 차이가 결국 B[idx] 숫자에서 라이트가 켜져야하는 만큼일테니 우리가 앞서 구현해놓은 로직으로 충분히 커버가 된다.

✏️ 문제 코드

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

let input = [];

rl.on('line', function(line){
    input.push(line.split(' '));
}).on('close', function(){
    const N = +input.shift();

    for(let [A, B] of input){
        let answer = 0;
        A = '-'.repeat(5-A.length) + A; B = '-'.repeat(5-B.length) + B;

        for(let i=0; i<5; i++){
            if(A[i]===B[i]) continue;
            answer += count(A[i], B[i])
        }
        console.log(answer);
        
    }
})

function count(num1, num2){
    const lights = {
    '-':'0000000', 0:'1110111', 1:'0010010', 2:'1011101', 3:'1011011', 4:'0111010', 
    5:'1101011', 6:'1101111', 7:'1110010', 8:'1111111', 9:'1111011'
    }
    
    let ret = 0;

    for(let i=0; i<7; i++){
        if(lights[num1][i] !== lights[num2][i]) ret++;
    }
    return ret;
}

 

 

 

 ⭐ if feedback and question : comment please⭐  

 

 

 

 

 

반응형

댓글