트랙
/
Java
Java
/
연습 문제
/
선장의 일지
선장의 일지

선장의 일지

학습 연습 문제

소개

무작위성

Java에서는 java.util.Random 클래스의 인스턴스를 사용해 난수를 생성할 수 있어요.

정수 난수

nextInt() 메서드를 사용하면 정수 난수를 생성할 수 있어요. 이 메서드는 Integer.MIN_VALUE부터 Integer.MAX_VALUE까지의 값을 생성해요.

Random random = new Random();

random.nextInt();
// => -1169335537

생성되는 값의 범위를 제한하려면 nextInt(int)를 사용해요. 이 메서드는 0(포함)부터 주어진 상한(미포함)까지의 값을 생성해요.

예를 들어, 다음 코드는 0부터 9까지의 난수를 생성해요.

Random random = new Random();

random.nextInt(10);
// => 6

그리고 다음 코드는 10부터 19까지의 난수를 생성해요.

Random random = new Random();

10 + random.nextInt(10);
// => 11

실수 난수

nextDouble() 메서드를 사용하면 실수 난수를 생성할 수 있어요. 이 메서드는 0.0부터 1.0까지의 값을 생성해요.

Random random = new Random();

random.nextDouble();
// => 0.19250004204021398

그리고 다음 코드는 100.0부터 200.0까지의 난수를 생성해요.

Random random = new Random();

100.0 + 100.0 * random.nextDouble();
// => 111.31849856260328

지침

메리는 TV 시리즈 _Star Trek: The Next Generation_의 열렬한 팬이에요. 친구들과 종이와 펜으로 하는 롤플레잉 게임을 자주 하는데, 이 게임에서 메리와 친구들은 _Starship Enterprise_의 승무원인 척을 하죠. 메리가 맡은 캐릭터는 피카르 함장이라서 함장 일지를 써야 해요. 메리는 게임에서 창의적인 부분을 좋아하지만, 그 자리에서 무작위 데이터를 만들어 내는 건 별로 좋아하지 않아요.

함장 일지에 자주 등장하는 데이터를 위한 무작위 생성기를 만들어서 메리를 도와줘요.

Note

이 연습 문제의 스타터 구현은 java.util.Random 인스턴스를 생성자 인자로 받아요. 덕분에 이 연습 문제의 테스트는 미리 정해진 시드를 가진 인스턴스를 넘길 수 있고, 테스트 결과를 예측할 수 있게 해줘요.

따라서 구현할 때 제공된 java.util.Random 인스턴스를 사용해야 해요.

1. 무작위 행성 생성하기

_Starship Enterprise_는 여행 중에 수많은 행성을 만나요. 스타트렉 세계관의 행성은 그 특성에 따라 등급이 나뉘어요. 예를 들어 지구는 M 등급 행성이에요. 가능한 모든 행성 등급은 D, H, J, K, L, M, N, R, T, Y예요.

randomPlanetClass() 메서드를 구현해요. 이 메서드는 행성 등급 중 하나를 무작위로 반환해야 해요.

captainsLog.randomPlanetClass();
// => "K"

2. 무작위 우주선 등록 번호 생성하기

Enterprise(등록 번호 NCC-1701)만 우주를 날아다니는 게 아니에요! 다른 우주선과 조우할 때면 메리는 그 우주선의 등록 번호를 일지에 기록해야 해요.

등록 번호는 "NCC-" 접두사로 시작하고, 그 뒤에 1000부터 9999까지(포함)의 숫자가 와요.

무작위 우주선 등록 번호를 반환하는 randomShipRegistryNumber() 메서드를 구현해요.

captainsLog.randomShipRegistryNumber();
// => "NCC-1947"

3. 무작위 스타데이트 생성하기

날짜도 없는 일지가 무슨 소용이 있을까요?

스타데이트는 부동소수점 수예요. _The Next Generation_의 첫 시즌에서 _Starship Enterprise_의 모험은 스타데이트 41000.0과 42000.0 사이에서 펼쳐져요. "4"는 24세기를, "1"은 첫 번째 시즌을 나타내요.

41000.0 이상 42000.0 미만의 부동소수점 수를 반환하는 randomStardate() 메서드를 구현해요.

captainsLog.randomStardate();
// => 41458.15721310934
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Java Exercism

선장의 일지 문제를 시작해 볼 준비가 됐나요?

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