문제 

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오.
즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다.
S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

 

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 

 

출력

각 테스트 케이스에 대해 P를 출력한다.

 

 

 

 

 


 

 

 

 

 

 

 

 

제출 답안1 - 오답, 틀린이유


  • nextInt() 를 입력받은 후 줄바꿈 문자때문에 발생할 오류를 처리해주지 못했다.
  • 두번째 반복문에서 문자열(words)의 길이만큼 반복하는 것이 아니라, 문자열 길이에 따라 각 문자를 R번 반복해야하는데 적절한 코드를 작성하지 못했다. 
  • String이 수정불가능한 형식이라는것을 간과했다. StringBuilder를 사용해주었어야 했다.
  • StringBuilder 를 사용하며 java.io.*;를 import 해주지 못했다. 


import java.util.*;

public class Main{

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		int wordsNum = sc.nextInt();				// 입력받을 단어개수

		for(int i=0; i<wordsNum; i++){				// 입력받은 단어만큼 반복

			int num = sc.nextInt();					// 스펠링을 몇번이어붙일건지
			String words = sc.nextLine();			// 입력받은 단어
			String addWords = "";					// 완성된 단어

			for(int y=0; y<words.length(); y++){	// 단어의 스펠링 수만큼 반복
				for(int z=0; z<num; z++){			// 반복할 숫자만큼 스펠링을 반복
					addWords += words.charAt(z) + "";	//char는 아스키코드값 반환	
				}
				
			}

			System.out.println(addWords);

		}

	}
}

 

 

 

 

 


 

 

 

  • 자꾸 놓치는 부분이다. nextInt()는 입력받은 다음 입력에 영향을 미칠 수 있기 때문에 sc.nextLine()을 사용해 줄바꿈 문자를 소비해 주어야 한다.

int wordsNum = sc.nextInt(); // 입력받을 단어 개수
sc.nextLine(); // 숫자 입력 후의 줄바꿈 문자 소비

for (int i = 0; i < wordsNum; i++) {
    int num = sc.nextInt(); // 스펠링을 몇 번 이어붙일 건지
    String words = sc.next(); // 공백 없이 단어를 입력받음

 

  • 또한 아래 반복문 에서는, 단어의 길이만큼 반복하는 것이 아니라, 문자열 길이에 따라 각문자를 n번 반복하는 것이므로 세번째 for문 안에서는 words.charAt(y) 로 수정이 되어야 한다. 
  • 또한 StringBuilder를 사용해 문자열의 변경을 할 경우 append 메소드를 사용해 주어야 한다. 

for (int i = 0; i < wordsNum; i++) {
    int num = sc.nextInt(); // 스펠링을 몇 번 이어붙일건지
    String words = sc.next(); // 공백 없이 단어를 입력받음
    StringBuilder addWords = new StringBuilder(); // 완성된 단어

    for (int y = 0; y < words.length(); y++) {
        for (int z = 0; z < num; z++) {
            addWords.append(words.charAt(y));
        }
    }

    System.out.println(addWords.toString());
}

 

 

 

 

[Java] StringBuilder 사용법과 주요 메소드

- StringBuilder (java.lang.StringBuilder) 생성자 StringBuilder sb = new StringBuilder(): 객체 선언 StringBuilder sb = new StringBuilder("aaa"): 문자열을 바로 넣을 수도 있다. 주요 메소드 .append(): 문자열을 추가한다. (sb.appe

da2uns2.tistory.com

 

 

 

 

 

 

 

 


 

 

 

 

 

 

제출답안 : 수정답안, 정답


  • 위 수정내용을 모두 반영하여 답을 정정했더니 정답 처리 되었다. 

import java.util.*;
import java.io.*;

public class Main{

	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		int wordsNum = sc.nextInt();				// 입력받을 단어개수

		sc.nextLine();

		for (int i = 0; i < wordsNum; i++) {
		    int num = sc.nextInt(); // 스펠링을 몇 번 이어붙일건지
		    String words = sc.next(); // 공백 없이 단어를 입력받음
		    StringBuilder addWords = new StringBuilder(); // 완성된 단어

		    for (int y = 0; y < words.length(); y++) {
		        for (int z = 0; z < num; z++) {
		            addWords.append(words.charAt(y));
		        }
		    }

		    System.out.println(addWords.toString());
		}

	}
}

 

 

 

 

  • 다른 블로그의 코드도 확인해 볼 수 있었다. print를 이용해 각 문자를 반복해 출력하면 되므로 굳이 StringBuilder를 사용하지않고도 코드를 작성할 수 있다는것을 확인했다. 
  • 참고 블로그 : https://st-lab.tistory.com/63
 

[백준] 2675번 : 문자열 반복 - JAVA [자바]

https://www.acmicpc.net/problem/2675 2675번: 문자열 반복 문제 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고,

st-lab.tistory.com

 

 

 

 

 

 

 

 

+ Recent posts