Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

jeongwon

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

오늘의 문제

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

jeongwon_ 2022. 6. 4. 14:35

문제 : 

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net


 

약식 순서도 :

- 테스트케이스 개수를 입력받으면서, 그 값에 해당하는 크기의 배열을 생성한다. (String[], BufferedReader)

- 반복할 횟수와 문자열을 테스트케이스 개수만큼 반복 입력받아 생성해둔 배열에 저장한다. (for문)

- 공백을 기준으로 반복할 횟수를 분리한다. 나머지 문자열은 기존 배열의 자리에 저장한다. (int, for문, Stringtokenizer)

-  저장한 횟수 만큼 문자열의 각 자리를 반복한다. (String.charAt())

 


 나의 답안 : 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] arr = new String[Integer.parseInt(br.readLine())];
        
		for(int i=0; i<arr.length; i++)
			arr[i]=br.readLine();
            
		br.close();

		for(int i=0; i<arr.length; i++) {
        
			StringTokenizer st = new StringTokenizer(arr[i]," ");
			int r = Integer.parseInt(st.nextToken());
			arr[i]=st.nextToken();
            
			for(int j=0; j<arr[i].length(); j++) {
				for(int k=0; k<r; k++)
					System.out.print(arr[i].charAt(j));
			}
			System.out.println();
		}//outer for

	}
}

 

메모리, 시간 : 14164KB, 144ms

 


개선 답안 : (참고) https://st-lab.tistory.com/63

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int r = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();

		for(int i=0; i<r; i++) {
			String[] arr = br.readLine().split(" "); //한 줄을 읽어 2개짜리 배열에 구분자를 기준으로 한 각 값이 저장
			int n = Integer.parseInt(arr[0]);
			for(int j=0; j<arr[1].length(); j++) {
				for(int k=0; k<n; k++)
					sb.append(arr[1].charAt(j));
			}
			sb.append("\n");

		}
		System.out.println(sb);
		br.close();
	}

}

메모리, 시간 : 14064KB, 128ms

 

Stringtokenizer 대신 String.split() 메소드를 활용해 한 줄을 읽어 구분자를 기준으로 나눈 2개의 값을 2개 크기의 배열에 저장할 수 있다. 

StringBuilder의 사용으로 소요시간과 메모리가 줄었다.

 

 

 

String (Java SE 18 & JDK 18)

All Implemented Interfaces: Serializable, CharSequence, Comparable , Constable, ConstantDesc The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class. Strings are constan

docs.oracle.com