문제 링크 : https://www.acmicpc.net/problem/5622
1. 요구 사항 이해
시간, 메모리 제한 : 1초 / 128MB
다이얼로 전화를 거는 방식에 주어진 전화번호가 시간이 얼마나 걸리는지 계산하는 프로그램 작성
1은 2초 다음 숫자는 1초씩 더 걸린다
알파벳 대문자로 이루어진 단어가 주어지며 길이는 2보다 크거나 같고 15보다 작거나 같다
2. 설계/검증
함수화
Scanner scan = next Scanner(System.in);
String str = scan.nextLine;
str 길이 유효성 검사
int result = 0;
for(str의 길이 만큼 반복){
char N = str.charAt(i);
if(N = a || N = b || N = c){
result += 2
} ...
else{
result += 9
}
}
결과 출력
복잡도
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(N) | O(1) |
문자열의 각 문자를 한 번씩 순회하여 처리하므로 문자열의 길이 n 시간 복잡도는 O(n)
입력 문자열과 몇 개의 정수 변수만 사용하므로 공간 복잡도는 O(1)
3. 정상 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 입력을 위한 객체 생성
Scanner scan = new Scanner(System.in);
// 문자열 입력
String s = scan.nextLine();
// 입력받은 문자열 유효성 검사
if (s.length() < 2 || s.length() > 15) {
System.out.println("단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다");
return;
}
// 결과를 담을 result
int result = 0;
// 문자열 순회
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// 해당 문자열에 대한 값 필터링 후 결과에 더함
if (c >= 'A' && c <= 'C') {
result += 3;
} else if (c >= 'D' && c <= 'F') {
result += 4;
}else if (c >= 'G' && c <= 'I') {
result += 5;
}else if (c >= 'J' && c <= 'L') {
result += 6;
}else if (c >= 'M' && c <= 'O') {
result += 7;
}else if (c >= 'P' && c <='S') {
result += 8;
}else if (c >= 'T' && c <= 'V') {
result += 9;
}else if (c >= 'W' && c <='Z') {
result += 10;
}
}
System.out.println(result);
scan.close();
}
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준] 10807 개수 세기 (설명/코드/정답) (0) | 2024.08.07 |
---|---|
[백준] 11718 그대로 출력하기 (설명/코드/정답) (0) | 2024.07.05 |
[백준] 2908 상수 (설명/코드/정답) (0) | 2024.06.24 |
[백준] 1152 단어의 개수 (설명/코드/정답) (0) | 2024.06.18 |
[백준] 2675 문자열 반복 (설명/코드/정답) (0) | 2024.06.17 |