티스토리 뷰

반응형

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

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 구현

 


 

⊙ 문제 접근 과정

 

각 타입(알파벳)에 대한 그룹(숫자)을 만들어서 숫자를 출력할까라고 생각했다.

그리고 생각을 바로 접었다. 코드가 엄청 길어질 것 같다고 생각했다.

근데 지금 다시 생각해보니

int group[] = {3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,10,10,10,10};

이런식으로 짜면 짧게 구현할 수 있다.

 

각설하고, 나는 아스키코드로 문제를 풀었다. 그리고 식도 간단하게 짰다.

((int)s[i]-65)/3 + 3;

 

그리고 제출했는데 틀렸다. 예외가 존재했다.

 

다이얼 7번과 9번을 보자

 

다른 것들과 다르게 알파벳이 4개가 들어가 있다. 따라서 이것들에 대해 따로 예외 계산을 해주면 됐다.

 

자세한 건 코드를 통해 확인해보자


 

⊙ 문제 풀이

 

#include <iostream>

using namespace std;

int total=0;
string s;

int main() {
    cin >> s;

    for(int i=0;i<s.size();i++) {
        total+=((int)s[i]-65)/3 + 3; //아스키 코드로 계산

        //예외 처리
        if(s[i] == 'S' ||s[i] == 'V' ||s[i] == 'Y' ||s[i] == 'Z' ) total--;
    }
    cout << total;
}

 


⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함