Dev Hyeri

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

[백준] 5622 다이얼 (설명/코드/정답)

_hyeri 2024. 7. 2. 23:19

문제 링크 : 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();
    }
}