본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 5622 다이얼

by 까망 하르방 2022. 3. 2.
반응형

Approach

출처: https://www.acmicpc.net/problem/5622 

 

조건문 (if / switch)을 통해서 구현 가능하다.

 

Java

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		String str = sc.nextLine();

		int sum = 0;
		for (int i = 0; i < str.length(); i++) {
			int temp = (str.charAt(i)-'0' - 17);
			if(temp < 3) {
				sum = sum + 3; // 2
			}else if(temp >= 3 && temp < 6) {
				sum = sum + 4; // 3
			}else if(temp >= 6 && temp < 9) {
				sum = sum + 5; // 4
			}else if(temp >= 9 && temp < 12) {
				sum = sum + 6; // 5
			}else if(temp >= 12 && temp < 15) {
				sum = sum + 7; // 6
			}else if(temp >= 15 && temp < 19) {
				sum = sum + 8; // 7
			}else if(temp >= 19 && temp < 22) {
				sum = sum + 9; // 8
			}else if(temp >= 22 && temp < 26) {
				sum = sum + 10; // 9
			}
		}
		System.out.println(sum);
	}
}

 

 

연속되는 알파벳이므로

인덱스를 적절히 조절해서도 가능하긴 하다.

아스키 코드와 LUT(= Lookup Table)을 활용하였다.

 

📌 아스키(Ascii) 코드 활용

📌 시간 성능 향상을 위한 코드 최적화

C++

#include <stdio.h>

int point[] = 
{
	1, 1, 1,	// A B C
	2, 2, 2,	// D E F
	3, 3, 3,	// G H I
	4, 4, 4,	// J K L
	5, 5, 5,	// M N O
	6, 6, 6, 6, // P Q R S
	7, 7, 7,	// T U V
	8, 8, 8, 8  // W X Y Z
};

const int LEN = 15 + 2;
int ans;
char str[LEN];

int main()
{
	// freopen("input.txt", "r", stdin);
	scanf(" %s", str);

	// 받은 문자열을 한개씩 처리
	for (int i = 0; str[i] != '\0' ; ++i)
	{
		ans += (point[str[i] - 'A'] + 2) ;
	}
	printf("%d\n", ans);
}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 7568 덩치  (0) 2022.03.03
[BOJ] 백준 4948 베르트랑 공준  (0) 2022.02.28
[BOJ] 백준 10866 덱  (0) 2022.02.25
[BOJ] 백준 4673 셀프 넘버  (0) 2022.02.25
[BOJ] 백준 11441 합 구하기  (0) 2022.02.23

댓글