😈 알고리즘/💻 백준

💻 5622번 문제 : 다이얼 ➕

Buᐢ༝ᐢy 2022. 10. 9. 22:40
5622번: 다이얼
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다. 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다. 숫자 1을 걸려면 총 2초가 필요하다.
https://www.acmicpc.net/problem/5622
#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)
20200564

이전에는 문자열 문제를 이해하기도 어려웠는데, 점점 풀어나갈수록 패턴이 비슷해서 할만 하다. 특히 머리로만 생각했을 때는 이해 안 가던 부분들이 메모장이나 손으로 직접 쓰면서 정리하니 문제를 이해하는데에 있어 더 편했다.

➕ 재풀이

#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