백준 GOLD 5(킥다운)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-01-29

  • 해결 방법 :

    • 나올 수 있는 최대 길이는 두 기어의 합, 최소 길이는 두 기어 중 긴 기어의 길이
    • 두 기어 중 짧은 기어를 아래 세 방법으로 움직여가며 맞물리는지 확인
      • 긴 기어의 좌측에서 짧은 기어를 걸치게 이동
      • 긴 기어의 우측에서 짧은 기어를 걸치게 이동
      • 긴 기어의 안쪽에서 짧은 기어를 겹치게 이동
    • 각 경우에서 맞물린다면 result를 짧은 값으로 갱신
      • 맞물리지 않은 경우는 두 기어의 겹치는 부분이 둘 다 ‘이’(2)인 경우
  • 회고 :

    • x
  • 코드

    const fs = require('fs');
    const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
    const input = fs.readFileSync(filePath).toString().trim();
    
    solution(input);
    
    function solution(props) {
      let [shortGear, longGear] = props.split('\n');
      if (shortGear.length > longGear.length) {
        const temp = shortGear;
        shortGear = longGear;
        longGear = temp;
      }
      let result = shortGear.length + longGear.length;
    
      for (let i = 0; i < shortGear.length; i++) {
        let isEngaged = true;
    
        for (let j = 0; j < i + 1; j++) {
          if (longGear[j] === '2' && shortGear[shortGear.length - (i + 1) + j] === '2') {
            isEngaged = false;
            break;
          }
        }
    
        if (isEngaged) {
          result = Math.min(result, shortGear.length + longGear.length - (i + 1));
        }
        isEngaged = true;
    
        for (let j = 0; j < i + 1; j++) {
          if (longGear[longGear.length - (i + 1) + j] === '2' && shortGear[j] === '2') {
            isEngaged = false;
            break;
          }
        }
    
        if (isEngaged) {
          result = Math.min(result, shortGear.length + longGear.length - (i + 1));
        }
      }
    
      for (let i = 0; i < longGear.length - shortGear.length; i++) {
        let isEngaged = true;
    
        for (let j = 0; j < shortGear.length; j++) {
          if (longGear[i + j] === '2' && shortGear[j] === '2') {
            isEngaged = false;
            break;
          }
        }
    
        if (isEngaged) {
          result = Math.min(result, longGear.length);
        }
      }
    
      console.log(result);
    }
    
  • 출처: 백준