본문 바로가기
코딩테스트/programming_C++

baekjoon #5622_다이얼_c++

by prometedor 2021. 10. 26.
  • 나의 풀이
#include <iostream>
#include <string>
using namespace std;
int main() {
  string str;

  string alpha = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ" };
  int num = 0;
  int time;
  int result = 0;

  cin >> str;

  for (size_t i = 0;i < str.length();i++) {
    if (str[i] == alpha[0] || str[i] == alpha[1] || str[i] == alpha[2]) {
      num = 2;
    }
    else if (str[i] == alpha[3] || str[i] == alpha[4] || str[i] == alpha[5]) {
      num = 3;
    }
    else if (str[i] == alpha[6] || str[i] == alpha[7] || str[i] == alpha[8]) {
      num = 4;
    }
    else if (str[i] == alpha[9] || str[i] == alpha[10] || str[i] == alpha[11]) {
      num = 5;
    }
    else if (str[i] == alpha[12] || str[i] == alpha[13] || str[i] == alpha[14]) {
      num = 6;
    }
    else if (str[i] == alpha[15] || str[i] == alpha[16] || str[i] == alpha[17] || str[i] == alpha[18]) {
      num = 7;
    }
    else if (str[i] == alpha[19] || str[i] == alpha[20] || str[i] == alpha[21]) {
      num = 8;
    }
    else if (str[i] == alpha[22] || str[i] == alpha[23] || str[i] == alpha[24] || str[i] == alpha[25]) {
      num = 9;
    }

    time = 2;
    for (int j = 2;j < 10;j++) {
      time++;
      if (num == j) {
        break;
      }
    }
    result += time;
  }
  cout << result;

  return 0;
}

str => 입력받을 문자열

alpha => 알파벳 대문자 전체

num => 숫자 다이얼

time => 걸리는 시간

result => 총 걸리는 시간

 

ex) WA

str.length() = 2

 

str[0] = W  ->  W == alpha[22]  ->  num=9

비교 비교 값 time
j=2 == num=9 false 3
j=3 == num=9 false 4
j=4 == num=9 false 5
j=5 == num=9 false 6
j=6 == num=9 false 7
j=7 == num=9 false 8
j=8 == num=9 false 9
j=9 == num=9 true 10

 

str[1] = A  ->  A == alpha[0]  ->  num=2

비교 비교 값 time
j=2 == num=2 true 3

 

result = 10 + 3 = 13

 

 

  • 다른 사람의 풀이
#include <iostream>
#include <string>
using namespace std;
int main() {
  string str;
  int num[] = { 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 result = 0;
  cin >> str;

  for (size_t i = 0;str[i]!='\0';i++) {  // 문자열이 끝나기 전까지 반복 (마지막 문자 위치까지 반복)
    result += num[str[i] - 'A'];
  }
  cout << result;

  return 0;
}

 

  • -배열의 마지막이 '\0' 임 (널 문자는 문자열의 끝을 의미)

ex) WA

str => 입력 받을 문자열

num => 각 알파벳 별로 숫자를 눌렀을 때 걸리는 시간

ex) a,b,c는 3초, d,e,f는 4초, ... ,w,x,y,z는 10초

result => 총 걸린 시간

 

i str[i]
0 W
1 A
2 \0

 

str[i] != '\0' num[str[i] - 'A'] result
str[0] != W str[0] - 'A' = 'W' - 'A' = 87 - 65 = 22 result = 0 + num[22] = 10
str[1] != A str[0] - 'A' = 'A' - 'A' = 65 - 65 = 0 result = 10 + num[0] = 10 + 3 = 13