트랙
/
PHP
PHP
/
연습 문제
/
Eliud의 달걀
Eliud의 달걀

Eliud의 달걀

보통

소개

친구인 Eliud는 할머니 Tigist로부터 농장을 물려받았어요. 할머니는 발명가였고, 물건을 지나치게 복잡하게 만드는 경향이 있었어요. 닭장에는 디지털 디스플레이가 있는데, 이 디스플레이는 주울 수 있는 모든 달걀의 위치를 인코딩한 숫자를 보여줘요.

Eliud는 닭장 안에 실제로 달걀이 몇 개 있는지 보여주는 프로그램을 작성해 달라고 부탁해요.

위치 정보 인코딩은 다음과 같이 계산해요:

  1. 달걀이 있을 수 있는 자리를 살펴보고, 달걀이 있으면 1, 빈자리면 0을 적어요.
  2. 그 숫자를 이진수에서 십진수로 변환해요.
  3. 그 결과를 디스플레이에 보여줘요.

예제 1

한 줄로 놓인 일곱 개의 둥지 상자. 첫 번째, 세 번째, 네 번째, 일곱 번째 둥지에 각각 달걀이 하나씩 있어요.

 _ _ _ _ _ _ _
|E| |E|E| | |E|

결과 이진수

1011001

 _ _ _ _ _ _ _
|1|0|1|1|0|0|1|

디스플레이에 표시된 십진수

89

닭장 안의 실제 달걀 수

4

예제 2

한 줄로 놓인 일곱 개의 둥지 상자. 네 번째 둥지에만 달걀이 있어요.

 _ _ _ _ _ _ _
| | | |E| | | |

결과 이진수

0001000

 _ _ _ _ _ _ _
|0|0|0|1|0|0|0|

디스플레이에 표시된 십진수

8

닭장 안의 실제 달걀 수

1

지침

숫자를 이진수로 나타냈을 때 1인 비트가 몇 개인지 세는 것이 이번 과제예요.

제한 사항

표준 라이브러리에서 제공하는 비트 개수 세기 기능에는 손대지 마세요! 대신 다른 기본 도구를 사용해서 직접 풀어보세요.

비트 연산자

PHP에는 비트 연산자가 있어요.

예를 들어, "비트 AND" 연산자(&)를 사용하면 숫자의 특정 비트가 정의되어 있는지 확인할 수 있어요:

$number = 89; // 0b01011001
$mask16 = 16; // 0b00010000
$mask32 = 32; // 0b00100000

$isMask16 = ($number & $mask16) > 0; // 0b00010000 > 0 => TRUE
$isMask32 = ($number & $mask32) > 0; // 0b00000000 > 0 => FALSE
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
PHP Exercism

Eliud의 달걀 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 PHP 트랙을 개념 11개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.