My Boundary As Much As I Experienced

귀여운 수~ε٩(๑> ₃ <)۶з(백준 코딩테스트 17294번, 문자열, NodeJS 풀이) 본문

Algorithm/Coding Test

귀여운 수~ε٩(๑> ₃ <)۶з(백준 코딩테스트 17294번, 문자열, NodeJS 풀이)

Bumang 2024. 3. 24. 18:11

 

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

 

문제 수준:

브론즈1

 

문제 요약:

욱제쨩은 카와이한 수가 좋다능.. SSS급 카와이한 수는 각 자릿수가 등차수열을 이루는 수라능. (ex: 13579)

이때 공차는 0이 될수도 있다능 (ex: 111111)

 

당신은 욱제한테 귀여운 수~ε٩(๑> ₃ <)۶з 하나를 선물해주고 싶다능.

수 하나가 주어졌을 때 이 수가 귀여운지 판단하는 프로그램을 짜 보자능.

 

입출력 예 (입력 / 출력):

 

문제 풀이 전략:

머리 좀 식힐 겸 간단한 입출력 문제 풀면서 자신감 올리기를 하려고 했다.

 

1. 십의 자리 이하의 수는 무조건 귀여운 수이다. 예를 들어 4, 5는 공차가 1인 등차수열이다.

2. 입출력 예제를 보니 일의 자리 수도 등차수열로 본다.

3. prev와 current를 반복문에서 계속 설정해주며 차이를 구한다.

4. 차이가 바뀌는 구간이 하나라도 나타나면 '흥칫뿡'을 출력해주고 나머진 다 귀여운 수로 치면 될 듯.

 

내 풀이:

// 귀여운 수 17294
let fs = require("fs");
let input = fs
  .readFileSync("input.txt")
  .toString()
  .trim()
  .split("")
  .map((x) => +x); // ex: [1,3,5]

let diff;
let flag = true; // flag가 true로 유지되면 귀여운 수로 친다.
for (let i = 0; i < input.length; i++) {
  if (input.length <= 2) { // 십의 자리 이하일 땐 무조건 귀여운 수이다.
    break;
  } else if (input[i + 1] !== undefined) { // 다음 인자가 undefined가 아니라면 아래 검사를 실시한다.
    let current = input[i];
    let next = input[i + 1];

    if (i === 0) { // 맨 처음 인자와 두 번째 인자로 공차를 설정한다.
      diff = current - next; 
    } else {
      let temp = current - next;
      if (temp !== diff) { // 이번 공차(temp)가 기존 공차(diff)와 다르다면 등차수열이 아니다.
        flag = false;
        console.log("흥칫뿡!! <( ̄ ﹌  ̄)>");
        break;
      }
    }
  }
}

if (flag) { // 위 반복문에서 temp !== diff 조건에 한 번이라도 안 걸렸으면 flag는 무조건 true이기 때문에 귀여운 수로 판정된다.
  console.log("◝(⑅•ᴗ•⑅)◜..°♡ 뀌요미!!");
}