Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/백준

[백준] 9086 문자열 (설명/코드/정답)

_hyeri 2024. 6. 9. 20:33

문제 링크 : https://www.acmicpc.net/problem/9086

 

 

 

 

1. 요구 사항 이해

시간, 메모리 제한 : 1초 / 128MB

입력받은 문자열 첫 글자와 마지막 글자 출력 프로그램

문자열은 알파벳 A~Z 대문자, 공백x, 길이는 1000보다 작다

테스트 케이스 개수  T(1 ≤ T ≤ 10)

 

 

 

 

 

2. 설계/검증 

 

함수화

// 테스트 케이스 입력 값 유효성 검사
try {

	// 테스트 케이스 개수 입력
	int T = Integer.parseInt(scan.nextLine());
            
	if (테스트 케이스 개수 유효성 검사) {} 

	for (int i = 0; i < T; i++) {
		// 문자열 입력
		String str = scan.nextLine();
		if (문자열 형식 유효성 검사) {}
		if (문자열 길이 유효성 검사) {}
		// 출력
		System.out.println();
		}
        
	} catch (NumberFormatException e) {}

 

복잡도

시간 복잡도  최악의 경우  공간 복잡도
O(N)   O(N)

 

nextLine()과 Integer.parseInt() : O(1)

for (int t = 0; t < T; t++) : O(T), 테스트 케이스 개수만큼 반복

String input = scanner.nextLine() : O(n), nextLine()  문자열의 길이에 비례 

if (!input.matches("[A-Z]+")) : O(n), matches 문자열의 길이에 비례 

O(n)을 T개의 테스트 케이스만큼 반복 시간 복잡도는 O(T * n)

 

String input은 길이 n의 메모리 차지 공간 복잡도는 O(n)  

 

 

 

 

3. 정상 코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // 입력을 위한 객체 생성
        Scanner scan = new Scanner(System.in);

        try {
            // 테스트 케이스 개수 입력
            int T = Integer.parseInt(scan.nextLine());
            // 테스트 케이스 개수 유효성 검사
            if (T < 1 || T > 10) {
                System.out.println("1 ≤ 테스트 케이스 수 ≤ 10");
                return;
            }

            for (int i = 0; i < T; i++) {
                String str = scan.nextLine();
                // [A-Z]+ : 하나 이상의 대문자 알파벳(A~Z)가 연속적으로 나오는지 검사
                if (!str.matches("[A-Z]+")) {
                    System.out.println("문자열은 알파벳 A~Z 대문자");
                    continue;
                }
                // 문자열의 길이는 1000보다 작음
                if (str.length() >= 1000) {
                    System.out.println("문자열의 길이가 1000보다 작음");
                    continue;
                }
                System.out.println("" + str.charAt(0) + str.charAt(str.length() - 1));
            }
        } catch (NumberFormatException e) {
            System.out.println("테스트 케이스 T, 유효한 숫자를 입력" );
        }
        scan.close();
    }
}

 

 

 

 

추가 정리

matches 

문자열이 정규표현식과 일치하는지 검사한다. 간단하게 문자열의 형식을 검사할 수 있다. 

▼ ▼ ▼

 

[Java, Spring] 메소드_문자열

charAt() The charAt() method returns the character at the specified index in a string(The index of the first character is 0)Return : a char value Throws: IndexOutOfBoundsException

developevolvify.tistory.com