본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 11507/javascript] 카드셋트

by tokkiC 2022. 9. 15.

문자열을 일정 개수로 분해, 파싱해서 객체로 수를 카운트, 문자열에 없는 것의 수도 생각해서

객체로 수를 저장, 순서에 맞게 꺼내 출력하면 되는 문제이다

중복 부분 문자열이 있는지 배열을 set 에 넣었다 뺀 후, 배열의 수가 차이가 나는지를 파악하여 알 수 있다

https://www.acmicpc.net/problem/11507

 

11507번: 카드셋트

예제1 : 12 12 11 13은 잃어버린 P카드 :  12개, K : 12개, H : 11개, T : 13라는 뜻이다. 예제2 : 같은 카드(H02)가 존재하므로 GRESKA을 출력하였다.

www.acmicpc.net

let input = [];

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

readline.on("line", (line) => {
  input.push(line);
});

readline.on("close", () => {
  solution(input);
  process.exit();
});

const solution = (inp) => {
  let str = inp[0];
  let sub = "";
  let substr = [];
  let oj = {};
  for (let i = 0; i < str.length; i++) {
    if (sub.length === 3) {
      substr.push(sub);
      sub = "";
    }
    sub += str[i];
    if (i === str.length - 1) {
      substr.push(sub);
    }
  }
  let n = substr.length;
  let set = new Set(substr);
  let narr = Array.from(set);
  let m = narr.length;

  if (n !== m) {
    console.log("GRESKA");
  } else {
    let charr = ["P", "K", "H", "T"];
    let carr = [];
    for (el of narr) {
      let c = el[0];
      carr.push(c);
      let num = Number(el.slice(1));
      if (oj[c]) {
        oj[c]--;
      } else {
        oj[c] = 13 - 1;
      }
    }
    for (el of charr) {
      if (!carr.includes(el)) {
        oj[el] = 13;
      }
    }
    let ans = [];
    ans.push(oj["P"]);
    ans.push(oj["K"]);
    ans.push(oj["H"]);
    ans.push(oj["T"]);
    console.log(ans.join(" "));
  }
};

댓글