문제 링크 : 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
문자열이 정규표현식과 일치하는지 검사한다. 간단하게 문자열의 형식을 검사할 수 있다.
▼ ▼ ▼
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준] 11720 숫자의 합 (설명/코드/정답) (0) | 2024.06.12 |
---|---|
[백준] 11654 아스키 코드(설명/코드/정답) (0) | 2024.06.10 |
[백준] 2743 단어 길이 재기(설명/코드/정답) (0) | 2024.06.08 |
[백준] 27866 문자와 문자열 (설명/코드/정답) (0) | 2024.06.04 |
[백준](2024) 나이순 정렬 (설명/코드/정답) (0) | 2024.02.23 |