문제
문자열 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());
}
- 또한 StringBuilder형을 문자열로 변환하기 위해서는 toString 메서드를 사용해주어야 한다.
- 참고 블로그 : https://da2uns2.tistory.com/entry/Java-StringBuilder-%EC%82%AC%EC%9A%A9%EB%B2%95%EA%B3%BC-%EC%A3%BC%EC%9A%94-%EB%A9%94%EC%86%8C%EB%93%9C
[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
'문제 풀이 > 알고리즘 풀이' 카테고리의 다른 글
[백준/2908번/JAVA] 상수 (0) | 2023.09.06 |
---|---|
[백준/1152번/JAVA] 단어의 개수 (0) | 2023.09.06 |
[백준/10809번/JAVA] 알파벳 찾기 (0) | 2023.09.05 |
[백준/11720번/JAVA] 숫자의 합 (0) | 2023.09.05 |
[백준/11654번/JAVA] 아스키 코드 (0) | 2023.09.05 |