※개인 공부 목적의 정리글입니다.
이 글의 내용이 최선의 해답은 아닐 수 있습니다.
문제
403 Forbidden
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
ex)
5 | * ** *** **** ***** |
요약
숫자 N을 입력 받으면 별을 출력하되, 첫째 줄에서 N-1칸의 공백 뒤에 *이 1개 붙는다.
그 다음 줄에는 N-2칸의 공백 뒤에 *이 2개 붙는다.
이런 식으로 총 N줄을 출력한다.
나의 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int N_space = N - 1;
int N_star = 1;
for(int i=0; i<N; i++){
sb.append(repeat(" ", N_space));
sb.append(repeat("*", N_star));
sb.append("\n");
N_space--;
N_star++;
}
System.out.println(sb.toString());
br.close();
}
private static String repeat(String c, int N){
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++){
sb.append(c);
}
return sb.toString();
}
}
출력은 StringBuilder에 미리 문자열을 모두 완성 시킨 후 한번에 출력하였다.
먼저 각 줄에서 공백의 수와 별의 개수를 기억 할 변수를 만들었다.
공백의 개수는 N-1부터 시작하고, 별의 개수는 1부터 시작한다.
N번 반복하면서 공백의 개수만큼 공백을 붙이고, 별의 개수만큼 별을 붙인 후 개행 문자를 넣어 한줄을 완성시킨다.
이후 공백의 개수는 1 줄이고, 별의 개수는 1 늘린다.
추가로 특정 문자를 n번 반복해서 리턴하는 repeat 함수를 만들어 보기 편하게 하였다.
나의 코드 – 개선점
나는 Java11을 이용하였다. Java11 부터는 String 자체에 repeat이라는 메소드가 추가되어서 굳이 위의 코드처럼 repeat 메소드를 직접 구현해서 쓸 필요가 없다고 한다.
"A".repeat(3); // AAA
여담으로 파이썬은 아래와 같이 곱하기 연산으로 문자열을 반복할 수 있다.
"A" * 3 # AAA
댓글