구현 - 백준 2675

경운·3일 전
0

코딩테스트

목록 보기
11/13
post-thumbnail

BOJ/백준 2675 - 문자열 반복

백준 2675 - 문자열 반복

1. 문제 분석

문제 이해

처음에 문자열 S를 입력 받고, 해당 문자열의 각 문자를 R번 반복해서 새로운 문자열 P를 만들고 출력

문자열 S에는 QR Code "alphanumeric" 문자만 들어있다

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./:

입력

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

출력

  • 각 테스트 케이스의 문자열 P 출력

2. 시간 복잡도

  • 바깥 for문 (테스트 케이스)

    • 입력받은 테스트 케이스의 수 T만큼 반복하니까 -> O(T)
  • 중간 for문 (문자열 순회)

    • 입력받은 문자열 S의 길이 만큼 반복 하니까 -> O(L) 문자열의 길이를 L이라고 가정
  • 마지막 for문 (문자 반복)

    • 입력받은 반복 횟수 R 만큼 반복하니까 -> O(R)

💡총 시간 복잡도는 O(T*L*R)
해당 문제는 제한 시간이 1초 즉, 1억번의 연산이 가능하다
문제에서 보았을 때 T의 최대 개수, R의 최대 반복 횟수, S의 최대 문자 길이를 고려하면 1억번 보다 한참 아래이기에 무난하게 코드가 돌아갈 것이다.


3. 코드 구현

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

public class No_2675 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	
		int T = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();  // 결과를 모아둘 StringBuilder 객체 생성
		
		
		for(int i = 0; i < T; i++) {
		StringTokenizer st = new StringTokenizer(br.readLine());
		int R = Integer.parseInt(st.nextToken());
		String S = st.nextToken();
		
			// 1. 문자열 S의 각 문자를 처음부터 순회
			for(int j = 0; j < S.length(); j++) {
				
				// 2. 선택된 문자 하나를 R번 만큼 반복
				for(int k = 0; k < R; k++) {
					sb.append(S.charAt(j)); // 바로 출력 안하고 sb에 보관
				}
			}
			sb.append("\n"); // 한 번의 테스트 작업이 끝나면 줄바꿈 문자 추가
		}
		System.out.print(sb);
	}
}

StringBuilder 가 뭔가?

생성자

  • StringBuilder sb = new StringBuilder(); -> 객체 선언
  • StringBuilder sb = new StringBuilder("abc"); -> 문자열 바로 넣기도 가능`

StringBuilder 사용할 때

  • 반복문 안에서 문자열을 계속해서 연결할 때
  • 여러 단계에 걸쳐 복잡하고 긴 문자열을 조립할 때
  • 문자열의 일부를 수정, 삭제, 삽입해야 할 때

그냥 문자열을 사용해서 결과를 만들어야하면 그냥 StringBuilder를 쓰자!!

나중에 관련 함수도 추가 하도록 하겠다!

0개의 댓글