[JAVA] 백준 11721번 (열 개씩 끊어 출력하기)

문제: 알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다. 한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

입력: 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다.

출력: 입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.

예제입력
BaekjoonOnlineJudge

예제출력
BaekjoonOn
lineJudge
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();

        StringBuilder sb = new StringBuilder();

        int n = str.length() / 10;

        if (str.length() <= 10) {
            sb.append(str);
        }
        else {
            for (int i = 0; i < n; i++) {
                sb.append(str.substring(i*10, i*10+10)).append("\n");
            }
            if (str.length() % 10 != 0) {
                sb.append(str.substring(n*10, str.length())).append("\n");
            }
        }
        System.out.print(sb);
    }
}

처음 생각한 수도코드

  1. BR 사용해서 string str에 입력받음 -> br.close();
  2. 줄바꿈을 해 줄 for문
  3. 10의 배수가 아닌 경우 줄바꿈을 한 번 더 해주는 if문

substring의 범위를 구하기 위해 i부터 10i+i까지 끊어줄 수 있는 식을 구함 시작: 10i + 1 끝: 10(i+1)

문제점

생각해보니까 저런식으로 하면 for문 조건식을 제대로 만들기 힘들다 그래서 if문을 사용해 글자수가 1~10이면 줄바꿈 없이 바로 출력할 수 있도록 수정했다.

문제점 보안한 수도코드

1. 변수선언: n은 str길이의 몫을 나타내는데,
   이걸 str의 길이가 10 배수가 아닌 경우 범위를 지정해주기 위해서 사용한다
2. if (str의 길이가 10보다 같거나 작은 경우는) 그대로 넣어줌
3. else
    for (0부터 n(str길이의 )까지 반복)
        substring를 사용해 10의배수~다음 10의배수까지 잘라준다.
        그리고 append를 사용해 줄바꿈도 넣어준다.

        if (str의 길이가 10 배수가 아니라면)
        뒤에 남은 애들을 잘라주고, 줄바꿈도 넣어준다.

substring(): str.substring(인덱스 시작, 인덱스 끝)