백준 1094 < 막대기 > JavaScript

2023. 3. 12.·☕️ 커리어 & 인터뷰 준비/코딩 테스트

📍문제 링크

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

 

1094번: 막대기

지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대

www.acmicpc.net

 

📍알고리즘 분류

- 수학

- 비트마스킹

 

📍문제 풀이

64cm 의 막대기가 있을 때 이를 절반으로 쪼개면서 X cm로 만드려면 총 몇개의 막대기가 필요한지 구하라

 

✅비트마스킹을 통해 해결할 수 있다

이 문제는 10진수를 2진수로 바꾸는 과정과 상당히 유사하다!

 

✅예) X = 23 일 때, X를 2진수로 바꾸기

1. X > 0 이면 아래를 반복

1-1. X = X / 2 의 몫

1-2. X / 2의 나머지를 기록

 

2. X = 0 이면 기록한 나머지를 차례대로 나열

 

/*
        몫    나머지
23 / 2 	11      1
11 / 2	5       1
5 / 2	2       1
2 / 2	1       0
1 / 2	0       1

23 = 11101
*/

 

✅반면, 이 문제에서는 64에서 시작하여 절반으로 잘라나간다

/*
64 (2^6) : 1000000

절반으로 자르면, ( >> 1 )
32 (2^5) : 100000
16 (2^4) : 10000
8 (2^3) : 1000
4 (2^2) : 100
2 (2^1) : 10
1 (2^0) : 1

만약 X = 32, 16, 8, 4, 2, 1 이라면
답 : 1

만약 X = 48 (16 + 32) 라면?
48 = 2^5 + 2^4 : 110000
답 : 2

만약 X = 56 (8 + 16 + 32) 라면?
56 = 2^5 + 2^4 + 2^3 : 111000
답 : 3

...
*/

 

규칙성이 보인다

그리고 몇 개의 2제곱(0제곱 포함)으로 이루어져 있는지 구하면 되는 것을 알 수 있다

 

⭐즉, X를 2진수로 만들면서 몇 개의 1을 갖고 있는지(홀수이면 +1) 구하면 된다!

 

📍코드 (JavaScript)

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

let input;

rl.on("line", (line) => {
  input = line;
}).on("close", () => {
  let X = +input;
  let answer = 0;
  while (X > 0) {
    if (X % 2) answer++;
    X = parseInt(X / 2);
  }
  answer = answer <= 0 ? 1 : answer;
  console.log(answer);
});

 

'☕️ 커리어 & 인터뷰 준비/코딩 테스트' 카테고리의 다른 글
  • 백준 6198 < 옥상 정원 꾸미기 > JavaScript
  • 백준 14891 < 톱니바퀴 > JavaScript
  • 백준 11048 < 이동하기 > JavaScript
  • 백준 3190 < 뱀 > JavaScript
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
백준 1094 < 막대기 > JavaScript
상단으로

티스토리툴바