1. 문제
https://www.acmicpc.net/problem/2439
2. 풀이
첫째 줄에는 별 1개,
둘째 줄에는 별 2개,
N번째 줄에는 별 N개를 찍히도록 하는 문제다.
그런데 결과가 좀 특이하게 나와야 한다.
정렬이 보통 왼쪽으로 되도록 하는데
이 문제는 정렬을 오른쪽으로 해서 출력되도록 해야 한다.
for문을 총 3번 사용해서 풀 수 있다.
for (int i = 1; i <= count; i++) { // 사용자가 입력한 숫자만큼 줄 출력
- 사용자가 입력한 숫자만큼 줄이 나와야 한다.
예) 5를 입력했다면 5줄이 출력되어야 한다.
for (int i = 1; i <= count; i++) {
for (int spaces = count - i; spaces > 0; spaces--) { // 공백 출력하는 for 루프
// 입력받은 수에서 -1 해주고, 결과값만큼 스페이스바
System.out.print(" ");
}
- 별이 먼저 출력되는 게 아니라 공백을 먼저 출력하도록 해야 한다.
- 예를 들어서 사용자가 3을 입력했다고 한다면,
첫 번째 턴에선 '공백 2번 별 한 개'
두 번째 턴에선 '공백 1번 별 두 개'
세 번째 턴에선 '공백 0번 별 세 개'
이런 식이다.
- 그러니 공백이 먼저 나오고 그 다음 별이 출력되도록 해야 하는 것이다.
- 위에서 사용자가 3을 입력했다고 가정했었다.
- 사용자가 입력한 숫자를 count란 변수에 담는다고 했을 때
이 count 변수에 있는 값을 -1 해주면 적절한 공백 값이 나온다.
- 예) 사용자가 3을 입력했다면 count에는 3이 저장된다.
- 첫 번째 턴에선 count 값인 3에서 -1을 해줘서 2가 나온다. 공백이 총 2번 찍힌다.
첫 번째 턴에선 '공백 2번 별 한 개'
두 번째 턴에선 '공백 1번 별 두 개'
세 번째 턴에선 '공백 0번 별 세 개'
- 공백 2번이 첫 번째 턴에선 찍히는 게 맞다.
- spaces--를 해줘서 턴을 돌 때 마다 공백 값도 줄어들게 한다.
- 이렇게 해서 두 번째 턴에선 공백 1번이 출력될 것이다.
for (int stars = 1; stars <= i; stars++) { // i만큼 별 출력
System.out.print("*"); // 별 출력
}
System.out.println(); // 별 출력 후 줄바꿈
- 한 줄 씩 내려갈 때 마다 별의 개수도 증가한다.
예) 첫 번째 줄에는 별 한 개, 두 번째 줄에는 별 두 개, 세 번째 줄에는 별 3개 이런 식이다.
- 한 줄에 별을 다 찍고 줄바꿈이 있어야 한다.
이를 위해 두 번째 for문 바깥에 System.out.prinln();을 작성해서
줄바꿈을 해주었다.
3. 코드
package loop;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PrintStarts_2439 {
public static
void main ( String[] args ) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //Scanner와 유사
int count = Integer.parseInt(br.readLine());
// readLine은 입력을 받을 때 사용하는 메서드다. next 메서드 느낌?
// br.readLine()이 scan.nextInt 느낌. ex) int n = scan.nextInt();
// readLine 메서드로 입력받은 건 String type으로 고정되서 다른 타입으로 입력받으려 할 땐
// 형 변환이 필요하다. 여기선 정수형으로 받아줘야 해서 Integer.parseInt를 작성해서 String을 int로 바꿔줬다.
for (int i = 1; i <= count; i++) {
for (int spaces = count - i; spaces > 0; spaces--) { // 공백 출력하는 for 루프
// 입력받은 수에서 -1 해주고, 결과값만큼 스페이스바
System.out.print(" "); // 공백 출력
}
for (int stars = 1; stars <= i; stars++) { // i만큼 별 출력
System.out.print("*"); // 별 출력
}
System.out.println(); // 별 출력 후 줄바꿈
}
}
}
전체 코드는 위와같다.
'IT > BaekJoon' 카테고리의 다른 글
[백준/JAVA] 2438번 '별 찍기' 설명 - BufferReader 사용 (0) | 2023.05.14 |
---|---|
[백준/JAVA] 11021 A + B - 7 문제를 BufferedReader로 풀어보자! (0) | 2023.05.07 |
[백준/JAVA] 15552번 '빠른 A+B' BufferedReader 설명 (0) | 2023.04.23 |
[백준/JAVA] 25314번 '코딩은 체육과목 입니다' 쉬운 풀이 설명 (0) | 2023.04.23 |
[백준/JAVA] 25304번 영수증 문제 (0) | 2023.04.09 |