알고리즘

[백준] 입출력 - 11721번, 열 개씩 끊어 출력. charAt();

hatch 2023. 1. 20. 03:43
728x90
반응형

* 공부 목표

입출력 - 2557, 1000, 2558, 1095010951, 10952, 1095311021, 11022, 11718, 1171911720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992

 

  • 11721번

문) 알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어진다.

한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.

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

 

** 혼자 풀이

1. 10글자씩 끊어서 출력, substring(); 메소드 활용.

2. if문, (입력 값.length() /10 < 2) 인 경우와  그 외를 나눔.

3. (전자의 경우) String 변수 b를 선언해 앞의 10글자 + 나머지 글자 출력.

4. (후자의 경우) 반복문을 통해 index값을 10씩 증가시켜 글자를 쪼개는 방향으로 함.

import java.util.*;

public class Main {
	public static void main(String[] args) {
		String a, b;
		int index = 0;
		Scanner sc = new Scanner(System.in);
		a = sc.next();
		if (a.length()/10 < 2) {
			b= a.substring(0, 10) + "\n" + a.substring(10, a.length());
			System.out.println(b);
		} else {
			for(int i=0; i < a.length()/10; i++) {
			b= a.substring(index, index+10);
			index += 10;
			System.out.println(b);
		}}
		sc.close();
	}
}

 

▶ 실행 결과 : 틀렸음.

(원인 분석) 결과 자체는 동일하게 나옴. 그러나 백준에서 원하는 풀이가 아님. 코드도 과하게 길다.

 

** 모범답안

1. charAt(); 메소드를 활용, 한 글자씩 char 출력.

2. 만약 0부터 시작하는 i 를 10으로 나누었을 때, 9이면 10글자가 출력되었다는 의미임. 다음 줄로 넘김.

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String a = sc.next();
        sc.close();
		for(int i=0; i < a.length(); i++) {
			System.out.print(a.charAt(i));
			if(i%10 == 9) {
				System.out.println();
			}
	    }
	}
}

 

** 혼자 생각하는 시간 1시간 소요. ▶ 10분 넘어가면 모르는 개념이라 생각하고 넘겨야겠음.

** charAt(); 메소드에 대한 개념이 잘못 잡혀서 쓸 생각 전혀 못함.

하지만 그게 아니었더라도 substring()을 활용한 코드도 나올 수 있었을텐데....

 

▶ 여기까지 입출력 내용을 한번 복습하고, substring을 활용한 다른 답안을 작성해보자.