이 영역을 누르면 첫 페이지로 이동
Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

페이지 맨 위로 올라가기

Nuhends 의 Tech Life

IT / Tech / 재테크 관련 뉴스를 최대한 알기 쉽게 전달하는 Tech 블로그 입니다.

[Softeer] lv2. [21년 재직자 대회 예선] 전광판 / Javascript

  • 2025.04.24 12:01
  • 프로그래밍/Algorithm
반응형

[21년 재직자 대회 예선] 전광판

 

1. 문제

문제가 길어서 패스 아래 url 참고

https://softeer.ai/practice/6268

 

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

 

softeer.ai

 

2. 언어별 시간/메모리

3. 풀이

const readline = require('readline');

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

function symmetricDifference(setA, setB) {
    const result = new Set(setA);

    setB.forEach(elem => {
        if (result.has(elem)) {
            result.delete(elem)
        } else {
            result.add(elem)
        }
    })

    return result;
}

const METRIC = {
    '0': new Set([0,1,2,4,5,6]),
    '1': new Set([2,5]),
    '2': new Set([0,2,3,4,6]),
    '3': new Set([0,2,3,5,6]),
    '4': new Set([1,2,3,5]),
    '5': new Set([0,1,3,5,6]),
    '6': new Set([0,1,3,4,5,6]),
    '7': new Set([0,1,2,5]),
    '8': new Set([0,1,2,3,4,5,6]),
    '9': new Set([0,1,2,3,5,6]),
};

const emptySet = new Set([]);
let T = 0;
let caseList = [];

rl.on('line', (line) => {
    // 첫번째줄 처리
    if (T === 0) {
        T = Number(line)
    } else {
        // '1 2' 받아서 처리
        caseList.push(line.split(' ')); // ['1', '2'];

        if (T === caseList.length) {
            rl.close();
        }
    }
});

rl.on('close', () => {
    caseList.forEach(testCase => {
        let result = 0;
        const [a, b] = testCase; // a = '9881' b = '10724'
        // // 비교해야되는 최대 count
        const n = Math.max(a.length, b.length)

        // reverse 처리 (1의 자리부터 비교해야 됨)
        const reversedA = [...a].reverse(); // [1,8,8,9]
        const reversedB = [...b].reverse(); // [4,2,7,0,1]

        for(let i=0; i<n; i++) {
            // 예외 한쪽 자리수가 없을 때
            const A = reversedA[i] === undefined ? emptySet : METRIC[reversedA[i]]
            const B = reversedB[i] === undefined ? emptySet : METRIC[reversedB[i]]

            result += symmetricDifference(A, B).size;
        }
        
        console.log(result);
    });
});

 

핵심 아이디어

1. 0~9의 숫자는 각각의 매트릭을 가지고 있음. 이를 배열 형태의 상수로 미리 정의함

2. A -> B로 변경시 필요한 처리: A와 B의 공통된 부분을 빼면 됨

3. Set 자료 구조를 사용해서 symmetricDifference 메서드를 사용하려고 했음. 하지만 동작하지 않음 mdn 찾아보니 Node 22부터 지원됨. Softeer은 12.22.12 버전 사용중(25.4.24 기준) -> symmetricDifference를 직접 구현함 (set 자료구조의 has, add, delete 메소드가 있어서 쉽게 구현할 수 있었음)

 

symmetricDifference
symmetricDifference 브라우저 호환성

 

 

4. 시간복잡도

O(T*D)

 

- T: 테스트 케이스 개수 (최대 1,000개)

- D: 각 숫자의 최대 자리수(최대 5)

 

→ 따라서 최악의 경우에도 O(1000 * 5) = O(5000)

 

Set을 쓰는게 최선인가?

지금처럼 Set을 쓰는 이유는:

  • symmetricDifference 같은 집합 연산이 필요하고
  • 비교 대상의 크기(세그먼트 수)가 7개로 고정되어 있음

즉, 메모리 효율보다는 코드의 단순성과 논리적 명확함이 더 중요하기 때문에, Set 선택은 합리적이라고 생각. 메모리 차이도 사실상 무시할 수 있을 만큼 미미할 정도의 트레이트 오프라고 생각됨

반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > Algorithm' 카테고리의 다른 글

[Softeer] lv2. [21년 재직자 대회 예선] 회의실 예약 / Javascript  (0) 2025.04.25
[Softeer] lv2. 8단 변속기 / Javascript  (0) 2025.04.24
[Softeer] lv2. 금고털이 풀이 / Javascript  (0) 2025.04.23
[Softeer] input값 읽기 Tip  (0) 2025.04.23
[Algorithm] 프로그래머스 > 이상한 문자 만들기  (3) 2020.12.30

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Softeer] lv2. [21년 재직자 대회 예선] 회의실 예약 / Javascript

    [Softeer] lv2. [21년 재직자 대회 예선] 회의실 예약 / Javascript

    2025.04.25
  • [Softeer] lv2. 8단 변속기 / Javascript

    [Softeer] lv2. 8단 변속기 / Javascript

    2025.04.24
  • [Softeer] lv2. 금고털이 풀이 / Javascript

    [Softeer] lv2. 금고털이 풀이 / Javascript

    2025.04.23
  • [Softeer] input값 읽기 Tip

    [Softeer] input값 읽기 Tip

    2025.04.23
다른 글 더 둘러보기

정보

Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

  • Nuhends 의 Tech Life의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 웹 개발
  • 경제 데이터
  • 경제 공부
  • 방명록

카테고리

  • 분류 전체보기 (127)
    • 프로그래밍 (69)
      • React (3)
      • HTML&CSS 사전 (13)
      • JAVASCRIPT 사전 (11)
      • Algorithm (23)
      • 이슈 정리 (2)
      • 개발 환경 (4)
      • NodeJS (1)
      • Typescript (4)
      • NextJS (5)
      • React-Query (2)
      • ai (1)
    • 경제 데이터 (22)
      • 주식 순위 (20)
      • 경제지표 (2)
    • 경제 공부 (25)
      • 경제 신문 읽기 (3)
      • 세금 재테크 (7)
      • 인사이트 (4)
      • 경제용어정리 (9)
      • 정부 지원 제도 관련 (2)
    • 팁 모음 (11)
      • 인터넷 (5)
      • 생활 (3)
      • SNS 맛집 (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • softeer
  • 자바스크립트
  • 코딩테스트
  • 프로그래머스
  • 코테 풀이
  • javascript
  • 코테
  • 알고리즘

나의 외부 링크

정보

nuhends의 Nuhends 의 Tech Life

Nuhends 의 Tech Life

nuhends

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © nuhends. Designed by Fraccino.

티스토리툴바