반응형
처음 구상한 건 문자를 입력 받고 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 |