알고리즘/백준 알고리즘

[백준] 5622 - 다이얼

TIM_0529 2022. 12. 28. 13:27
반응형

처음 구상한 건 문자를 입력 받고 65를 빼서 숫자로 변환후 3을 나눈 몫에 3 을 더하여 시간을 더했다.

예를 들어서

입력 받는 문자가  A B C 라고 할 때 이들을 숫자로 변환하면 

A = 0

B = 1 

C = 2 가 된다. 그리고 이들을 3으로 나눈 몫은 모두 0이다. 그리고 이 값에 3을 더하면 3이라는 시간이 나온다.

 

다른 예로 F G L 은 각각

F = 5 

G = 6ㅇ

L = 11

각각 3으로 나눈 몫에 3을 더하면  

5 / 3 = 1 + 3 = 4 

6 / 3 = 2 + 3 = 5

11 / 3 = 3 + 3 = 6 

그래서 총 15시간이 나온다. 이것을 확인하고 바로 코드로 옮겨 적으니

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;



int main()
{
	char num_words[16];
	int num = 0, time=0;
	cin >> num_words;
	
	for (int i = 0; i < strlen(num_words); i++)
	{

		num = (num_words[i] - 65) / 3;
		if ((num_words[i] - 65) >= 18 && (num_words[i] - 65) % 3 == 0)
			num--;
		num += 3; // time
		if (num > 10)
			num = 10;
		time += num;
	}

	cout<<time<<endl;



}

내가 계산한 대로 결과도 잘 나왔다.

하지만 채점결과 틀렸다는것으로 나왔다. 아무리 확인해도 문제가 되는 부분을 찾지 못해서 다른 사람들이 한 코드를 분석하기로 했다.

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
 
int main(int argc, char *argv[])
{	
	int arr[26] = { 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 sum = 0;
	string s;
 
	cin >> s;
 
	for (int i = 0; i < s.length(); ++i) {
		int index = s[i] - 65;
		sum += arr[index];
	}
 
	cout << sum << endl;
 
	return 0;
}

많은 블로그를 찾아봤는데 대부분 시간을 직접 배열로 지정해서 인덱스 찾아서 더해주는 방법을 썼다. 

가장 먼저 떠오르는 방법이긴 했지만 좀 더 수학적으로 풀어보고 싶은 마음에 다양한 방법을 시도를 해봤는데 생각보다 단순히 풀 수 있었던 문제였다.

반응형

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

[백준] 5622 - 다이얼  (0) 2022.12.29
[백준] 5622 - 다이얼  (0) 2022.12.29
2908 - 상수  (2) 2022.12.28
1157-단어공부 c++  (0) 2022.12.26
2675-문자열 반복  (0) 2022.12.25