트랙
/
PHP
PHP
/
연습 문제
/
행운의 숫자
행운의 숫자

행운의 숫자

학습 연습 문제

소개

타입 저글링

타입 저글링은 타입 강제 변환이라고도 해요. 타입 저글링은 서로 다른 타입의 두 값이 연산을 수행하기 위해 같은 타입으로 강제 변환되는 것을 말해요.

$baskets = 5 // int
$apples_per_basket = "3" // string
$baskets * $apples_per_basket
# => 15

이 변환은 암시적으로 일어날 수도 있고(위 예제를 봐요), C 스타일의 타입 캐스팅으로 명시적으로 할 수도 있어요.

$apples_per_basket = "3" // string
$my_number = (int) $apples_per_basket // cast string to int
# => 3 // int

직접 타입 캐스팅을 할 때 사용할 수 있는 타입은 bool, int, float, string, array, object예요. 가장 흔하게는 정수(int)를 실수(float)로 바꾸거나 그 반대로 바꿀 때 타입 캐스팅을 사용해요.

지침

친구 Kojo는 숫자를 정말 좋아해요. Kojo는 숫자를 가지고 이것저것 해볼 수 있는 작은 웹사이트를 운영하고 있어요. 그런데 프로그래밍을 그렇게 잘하지는 못해서 여러분에게 도움을 청했어요.

여러분은 Kojo의 웹사이트에 들어갈 새로운 숫자 게임용 헬퍼 메서드 두 개를 만들고, 사용자가 입력할 수 있는 값의 유효성을 검사할 메서드도 하나 만들 거예요.

1. 슬롯머신에 있는 숫자들의 합 계산하기

Kojo의 웹사이트에 있는 게임 중 하나는 숫자가 적힌 바퀴 두 그룹을 보여주는 슬롯머신처럼 생겼어요. 각 숫자 그룹은 하나의 수를 나타내요. 게임이 동작하려면 Kojo는 두 수의 합을 알아야 해요.

두 배열을 매개변수로 받는 메서드 sumUp을 작성해요. 각 배열은 0과 9 사이의 숫자를 하나 이상 담고 있어요. 함수는 각 배열을 하나의 수로 해석하고, 두 수의 합을 반환해야 해요.

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->sumUp([1, 2, 3], [0, 7]);
//=> 130

// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130

2. 수가 회문인지 판별하기

웹사이트의 또 다른 게임은 "Lucky Numbers"라는 작은 퀴즈예요. 사용자가 수를 입력하면, 그 수가 어떤 비밀 수열이나 패턴에 속하는지 확인할 수 있어요. "lucky numbers"의 수열이나 패턴은 매달 바뀌고, 각 사용자는 정해진 횟수만큼만 그것을 추측할 수 있어요.

이번 달의 lucky numbers는 회문인 수여야 해요. 회문인 수는 숫자를 뒤집어도 같은 수가 돼요.

정수를 매개변수로 받는 새로운 함수 isPalindrome을 구현해요. 함수는 그 수가 회문이면 true를, 그렇지 않으면 false를 반환해야 해요. 입력으로 주어지는 수는 항상 양의 정수예요.

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->isPalindrome(1441);
//=>  true

$lucky_numbers->isPalindrome(123);
//=> false

3. 유효하지 않은 사용자 입력에 대한 오류 메시지 생성하기

웹사이트 곳곳에는 사용자가 숫자를 입력하고 버튼을 눌러 어떤 동작을 실행할 수 있는 입력 필드가 있어요. Kojo는 사이트의 사용자 경험을 개선하고 싶어 해요. 사용자가 버튼을 눌렀는데 입력 필드에 유효하지 않은 값이 들어 있으면 오류 메시지를 보여주고 싶어 해요.

입력 필드의 값이 어떻게 전달되는지에 대한 정보가 몇 가지 더 있어요.

  • 사용자가 필드에 무언가를 입력하면, 숫자만 입력했더라도 그에 연결된 값은 항상 문자열이에요.
  • 무언가를 입력했다가 다시 지우면, 변수는 빈 문자열이 돼요.
  • 사용자가 입력을 시작하기 전에도 변수는 빈 문자열이에요.

사용자 입력을 매개변수로 받는 함수 validate를 작성해요. 사용자가 아무 입력도 하지 않았다면, validate는 'Required field'를 반환해야 해요. 입력이 PHP 형 변환 규칙에 따라 0보다 큰 양의 정수를 나타내지 않는다면, 'Must be a whole number larger than 0'를 반환해야 해요. 그 외의 모든 경우에는 입력이 유효하다고 가정할 수 있고, 이때 반환 값은 빈 문자열이어야 해요.

<?php
$lucky_numbers = new LuckyNumbers()

$lucky_numbers->validate('123');
// => ''

$lucky_numbers->validate('');
// => 'Required field'

$lucky_numbers->validate('abc');
// => 'Must be a whole number larger than 0'
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
PHP Exercism

행운의 숫자 문제를 시작해 볼 준비가 됐나요?

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