[ *를 n개 출력하되 w개마다 줄 바꿈을 하는 프로그램 작성 ]
예를 들어, n값이 14이고 w값이 5이면
*****
*****
****
라는 출력 결과가 나와야 한다.
문제 분석, 입력 및 조건 정리, 출력 규칙 구상, 반복문 설계 순으로 생각해보자.
===생각 흐름 정리===
[문제 분석]
1. 별은 n개 출력되어야 한다.
2. 한 줄에는 별이 w개이며, w개가 입력되면 다음줄로 개행(\n) 되어야 한다.
[입력 및 조건 정리]
1. 사용자에게 n, w를 입력받아야 한다. -> 스캐너 사용
[출력 규칙 구상]
1. 별을 n개 찍는 반복문이 있어야 함
2. w-1개마다 줄 바꿈이 필요하다. 왜 w-1이냐면 i가 0부터 시작하기 때문에.
* * * * *
---------------------
0 1 2 3 4
예를 들어, 한 줄에 5개씩 찍힌다고 치면 i가 0부터 시작하므로 i=4 까지만 출력하고 개행을 해야한다.
***** -> (i = 0,1,2,3,4)
***** -> (i = 5,6,7,8,9)
***** -> (i = 10,11,12,13,14)
i = 4, 9, 14일 때마다 개행을 한다는 사실을 알 수 있다.
이때 개행이 들어가야하는 i 숫자들을 보면 차례대로 w-1, 2w-1, 3w-1 이라는 규칙을 갖고 있음을 알 수 있다.
개행이 필요한 값은 i=4,9,14에 위치하는데 이 값들은 항상 i를 w로 나눈 나머지를 보면 w-1과 같다는 특징이 있다.
즉, 개행이 필요한 i값들은 i%w 했을 때 나머지가 w-1일 때라는 것이다.
그말은 즉슨, i%w는 w-1과 같아야 한다.
즉, i%w == w-1일때만 개행을 하는 것이다.
따라서, i%w == w-1일 때 println()을 해주면 된다.
그러면 한 줄에 w-1개 만큼 별을 입력할 수 있다.
Scanner sc = new Scanner(System.in);
int n, w;
// n은 별 개수, w는 한 줄에 들어갈 별의 개수(줄바꿈 위치)
System.out.println("*를 n개 출력하되 w개마다 줄을 바꿔서 출력합니다.");
System.out.print("n값: ");
n = sc.nextInt();
System.out.print("w값: ");
w = sc.nextInt();
for(int i = 0; i < n; i++) {
System.out.print("*");
if(i % w == w-1 ) {
System.out.println();
}
}

근데 위 코드는 for문을 돌 때마다 if문을 계속 수행하기 때문에 효율성이 좋지 않다. 좀 더 효율 좋은 코드로 바꾸려면 아래와 같이 작성하면 된다.
for (int i = 0; i < n / w; i++)
System.out.println("*".repeat(w));
int rest = n % w;
if (rest != 0)
System.out.println("*".repeat(rest));
}
}
n/w는 행의 개수를 나타내니까 14/5 = 2 , 2줄을 별 5개씩 출력하게 될거고,
rest라는 변수에 남은 별의 개수를 나타내는 n%w를 저장해서 만약 rest가 0이 아니라면 rest의 수만큼 별을 출력하도록 한다.
그러면 위 코드와 동일한 결과가 출력된다.
'IT > 알고리즘|자료구조' 카테고리의 다른 글
트리 용어 정리 (0) | 2025.06.06 |
---|---|
스택(Stack) (0) | 2025.06.04 |
자료구조와 함께 배우는 알고리즘 입문 [자바편] : 가우스 덧셈 (0) | 2025.01.11 |
자료구조와 함께 배우는 알고리즘 입문 [자바편] : 중앙값 구하기 (1) | 2025.01.09 |
자료구조와 함께 배우는 알고리즘 입문 [자바편] : 최대값 구하기 (2) | 2025.01.06 |