jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트 커링
  • javascript use strict
  • safari Date format NaN
  • 리코쳇 로봇 javascript
  • 백준 17406 nodeJS
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 프로그래머스 숫자카드나누기 javascript
  • 외벽 점검 javascript
  • 자바스크립트 sort는 왜 그모양일까
  • 자바스크립트 배열의 특수함
  • fetch 취소하기
  • 1753 최단경로 javascript
  • safari invalid date error
  • 덧칠하기 javascript
  • 13460 javascript nodejs
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 억억단을 외우자 javascript
  • 백준 자바스크립트 입력 템플릿
  • 자바스크립트 채팅방 스크롤
  • 대충만든자판 javascript
  • JavaScript
  • 25632 소수 부르기 게임
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • 가사 검색 자바스크립트
  • 자바스크립트 모듈 시스템
  • 리액트 프로젝트 디버깅하기
  • 병합정렬 자바스크립트
  • 퀵정렬 자바스크립트
  • 계수정렬 자바스크립트
  • 자바스크립트 이벤트 위임

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae

Go devlog

[백준] 1339번 단어 수학 - JavaScript(NodeJS)
DS & Algorithm/baekjoon

[백준] 1339번 단어 수학 - JavaScript(NodeJS)

2021. 6. 4. 18:43

문제

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

풀이

브루트 포스 문제지만, 억지로 브루트 포스를 적용해보려고 하다가 좀 헤맨 문제다.

 

모든 경우의 수를 조회할 수 있는 방법도 있지만,
각 단어를 구성하는 알파벳에 숫자를 대입한 합의 최대값을 출력하는 문제이기 때문에 다르게 접근해봤다.

 

 

단어에서 위치한 알파벳들의 자릿수 합을 계산하고, 자릿수의 합 순으로 정렬한다.
자릿수의 합이 큰 알파벳부터 순차적으로 가능한 가장 큰 숫자를 대입한다.

 

"AAA", "BCD"일 때
111A + 100B + 10C + D에서
A=9, B=8, C=7, D=6을 대입한 결과가 모든 숫자를 대입해 볼 필요 없이, 바로 최댓값이 된다.

 

간단한 그림 예시를 첨부한다.

 

다음과 같이 한번에 답을 구할 수 있다.

 

코드

const sol = (input) => {
  const alphabetObj = {}; // 자릿수를 누적할 때 객체의 키:값 관계를 이용해보자.
  input.slice(1).map((str) => {
    let size = 1;
    for (let i = str.length - 1; i >= 0; i--) {
      const word = str[i];
      if (alphabetObj[word]) alphabetObj[word] += size;
      else alphabetObj[word] = size;
      size *= 10;
    } // 각 단어들에 대해 단어를 구성하는 알파벳들의 자릿수를 객체의 각 알파벳 키에 대응하는 값에 계속 더해준다.
  });

  const alphabetArr = Object.entries(alphabetObj).sort((a, b) => b[1] - a[1]); 
  // [키, 값]들의 배열로 바꿔 값에 따라 내림차순 정렬

  let number = 9;
  let sum = 0;
  for (let i = 0; i < alphabetArr.length; i++) {
    sum += alphabetArr[i][1] * number--;
  } // 가장 큰 자릿수를 가진 알파벳부터 9부터 순차적으로 대입해주고, 합계를 구한다.
  return sum;
};

// 백준에서 입력을 받는 코드
const input = [];
require("readline")
  .createInterface(process.stdin, process.stdout)
  .on("line", (line) => {
    input.push(line);
  })
  .on("close", () => {
    console.log(sol(input));
    process.exit();
  });

 

저작자표시 (새창열림)

'DS & Algorithm > baekjoon' 카테고리의 다른 글

[백준] 14889 스타트와 링크 - JavaScript(NodeJS)  (0) 2021.06.04
[백준] 14888번 연산자 끼워넣기 - JavaScript(NodeJS)  (0) 2021.06.04
[백준] 2529번 부등호 - JavaScript(NodeJS)  (0) 2021.06.04
[백준] 1967 트리의 지름 - JavaScript(NodeJS)  (0) 2021.06.03
[백준] 1167번 트리의 지름 - JavaScript(NodeJS)  (0) 2021.06.03
    'DS & Algorithm/baekjoon' 카테고리의 다른 글
    • [백준] 14889 스타트와 링크 - JavaScript(NodeJS)
    • [백준] 14888번 연산자 끼워넣기 - JavaScript(NodeJS)
    • [백준] 2529번 부등호 - JavaScript(NodeJS)
    • [백준] 1967 트리의 지름 - JavaScript(NodeJS)
    jiho_bae
    jiho_bae
    하루에 한 걸음씩

    티스토리툴바