문제
사용자에게 1 ~ 100 사이의 10개의 정수를 입력받고,
아래와 같이 각 정수의 범위에 해당하는 정수 개수를 출력하기
1 ~ 10 : ****
11 ~ 20 : **
21 ~ 30 : *
31 ~ 40 :
41 ~ 50 : **
51 ~ 60 :
61 ~ 70 :
71 ~ 80 :
81 ~ 90 :
91 ~ 100 : *
풀이순서
1. 범위 배열 생성
2. 반복해서 정수 입력받기
3. 입력받는 값이 1 ~ 100 사이와 아닌 경우 나누기
4. 입력받는 값의 범위에 해당하는 범위 배열에 * 더해주기
5. 히스토그램 출력
전체코드
import java.util.Scanner;
public class Histogram2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] range = {"", "", "", "", "", "", "", "", "", ""};
System.out.println("1 ~ 100 사이의 정수 10개 입력하세요.");
for (int i = 1; i <= 10; i++) {
System.out.print(i + "번째 정수 입력: ");
int input = scan.nextInt();
if (1 <= input && input <= 100) {
int index = (input - 1) / 10;
range[index] += "*";
} else {
System.out.println("1 ~ 100 사이의 정수를 입력하세요.");
i--;
}
}
for (int i = 0; i < range.length; i++) {
System.out.println((i * 10 + 1) + " ~ " + (i * 10 + 10) + " : " + range[i]);
}
}
}
풀이과정
1. 범위 배열 생성
1 ~ 10 : **** => range[0]
11 ~ 20 : ** => range[1]
21 ~ 30 : * => range[2]
31 ~ 40 : => range[3]
41 ~ 50 : *** => range[4]
...
91 ~ 100 : * => range[9]
String[] range = {"", "", "", "", "", "", "", "", "", ""};
위와 같이 범위 값을 배열로 만들어준다.
range[] 배열에 *의 값을 저장하기 위해 String 타입의 변수 생성해주고, ""으로 값을 초기화해준다.
String 타입의 배열 생성 후 따로 초기화해주지 않으면, String의 기본값인 null로 초기화된다.
2. 반복해서 정수 입력받기
3. 입력받는 값이 1 ~ 100 사이와 아닌 경우 나누기
4. 입력받는 값의 범위에 해당하는 범위 배열에 * 더해주기
for (int i = 1; i <= 10; i++) {
System.out.print(i + "번째 정수 입력: ");
int input = scan.nextInt();
if (1 <= input && input <= 100) {
int index = (input - 1) / 10; // 입력받은 정수의 값으로 range 배열의 Index 값 구하기
range[index] += "*";
} else {
System.out.println("1 ~ 100 사이의 정수를 입력하세요.");
i--;
}
}
input 이라는 변수를 만들어주고, 스캐너로 입력받은 값을 input에 저장한다.
input 의 범위를 1 ~ 100 인 경우와 그렇지 않은 경우로 나누어 if문을 만들어준다.
(1) input의 범위가 1 ~ 100 인 경우
input의 값에 따라 해당하는 range[] 배열에 "*" 더해주기 위해서 해당하는 range[] 배열의 index 값을 구한다.
range[] 배열의 index 값을 저장할 index 라는 변수를 만들어준다.
index = (input - 1) / 10
1 ~ 10 사이의 정수를 받았을 때 range 배열의 index 값인 0,
11 ~ 20 사이의 정수를 받았을 때 range 배열의 index 값인 1,
21 ~ 30 사이의 정수를 받았을 때 range 배열의 index 값인 2..
이런 형식으로 입력받는 값을 이용해 range 배열의 index 값을 만들기 위해서 input 값에 -1을 해주고 10을 나누어준다.
1 ~ 10 의 범위의 모든 값에 -1을 각각 해주면 범위가 0 ~ 9이 되고, 정수끼리의 연산의 특징을 이용해 /10을 해주면 0이 된다.
range[index] += "*"
index를 range 배열의 index 값으로 해서 range[index]에 저장된 값에 "*"을 더해준다.
(2) input의 범위가 1 ~ 100 이 아닌 경우
잘못입력한 값을 제외하고 10개의 정수를 입력받아야 하므로, i의 값을 1 빼줘서 정수를 한번 더 입력받을 수 있게 해준다.
5. 히스토그램 출력
for (int i = 0; i < range.length; i++) {
System.out.println((i * 10 + 1) + " ~ " + (i * 10 + 10) + " : " + range[i]);
range 배열의 index 값을 구하는 과정의 반대로 index 값을 이용해 범위를 구해준다.
i = 0 일 때, 1과 10이라는 숫자를 출력하기 위해서 (i * 10 + 1), (i * 10 + 10) 이라는 식을 세워준다.
'DEVELOPMENT > JAVA' 카테고리의 다른 글
[JAVA] 연습문제 - 생일 D-Day 계산하기 (1) | 2022.11.20 |
---|---|
[JAVA] 연습문제 - 이번 달 달력(calendar) 만들기 (0) | 2022.11.19 |
[JAVA] 날짜와 시간 & 형식 (0) | 2022.11.19 |
[JAVA] 예외처리 (0) | 2022.11.19 |
[JAVA] 객체지향 프로그래밍 (0) | 2022.11.13 |