😈 알고리즘/💻 백준
💻 5622번 문제 : 다이얼 ➕
Buᐢ༝ᐢy
2022. 10. 9. 22:40
5622번: 다이얼
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다.


#include <iostream>
#include <cstring>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
char inputArr[16] = {};
int result = 0;
cin >> inputArr;
int inputArrLength = strlen(inputArr);
for (int i = 0; i < inputArrLength; i++)
{
int temp = 3;
if (inputArr[i] > 'C') temp++;
if (inputArr[i] > 'F') temp++;
if (inputArr[i] > 'I') temp++;
if (inputArr[i] > 'L') temp++;
if (inputArr[i] > 'O') temp++;
if (inputArr[i] > 'S') temp++;
if (inputArr[i] > 'V') temp++;
result += temp;
}
cout << result;
}
메모리 (KB) | 시간 (ms) | 코드 길이 (B) |
2020 | 0 | 564 |
이전에는 문자열 문제를 이해하기도 어려웠는데, 점점 풀어나갈수록 패턴이 비슷해서 할만 하다. 특히 머리로만 생각했을 때는 이해 안 가던 부분들이 메모장이나 손으로 직접 쓰면서 정리하니 문제를 이해하는데에 있어 더 편했다.
➕ 재풀이
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
char inputArr[16];
int numArr[15] = {};
cin >> inputArr;
int inputArrLength = strlen(inputArr);
for (int i = 0; i < inputArrLength; i++)
{
int temp = 0;
if (inputArr[i] == 'A'|| inputArr[i] == 'B' || inputArr[i] == 'C')
{
temp = 2;
}
else if (inputArr[i] == 'D' || inputArr[i] == 'E' || inputArr[i] == 'F')
{
temp = 3;
}
else if (inputArr[i] == 'G' || inputArr[i] == 'H' || inputArr[i] == 'I')
{
temp = 4;
}
else if (inputArr[i] == 'J' || inputArr[i] == 'K' || inputArr[i] == 'L')
{
temp = 5;
}
else if (inputArr[i] == 'M' || inputArr[i] == 'N' || inputArr[i] == 'O')
{
temp = 6;
}
else if (inputArr[i] == 'P' || inputArr[i] == 'Q' || inputArr[i] == 'R'|| inputArr[i] == 'S')
{
temp = 7;
}
else if (inputArr[i] == 'T' || inputArr[i] == 'U' || inputArr[i] == 'V')
{
temp = 8;
}
else if (inputArr[i] == 'W' || inputArr[i] == 'X' || inputArr[i] == 'Y'|| inputArr[i] == 'Z')
{
temp = 9;
}
numArr[i] = 2 + (temp - 1);
}
int result = 0;
for (int i = 0; i < inputArrLength; i++)
{
result += numArr[i];
}
cout << result;
}
처음에는 이렇게 모든 단어들을 전부 조사하여 작성했었다. 사실 메모리나 시간은 똑같기에 여기서 끝내도 됐었지만 코드가 너무 길어 줄이고 싶었다
어떻게 하면 다른 사람이 봐도 쉽게 이해할 수 있는 코드일까 고민했다. 그러다가 아스키 코드가 숫자값이기 때문에 범위 설정을 해줘도 하나하나 다 쓸 필요가 없다는 생각이 들었다.
그리고 처음에 풀었을 때는 입력값을 받는 배열 외에 입력을 받은 자리에 넣어줬던 걸리는 시간을 다시 넣을 배열을 하나 만들어주었다. 하지만 첫 for문에서 이를 더해버리면 된다.
Uploaded by N2T