https://www.acmicpc.net/problem/1076
코드
#include <stdio.h>
#include <string.h>
#include <math.h>
int findIndex(char str[], char arr[][10])
{
for (int i = 0; i < 10; i++) if (strcmp(str,arr[i]) == 0) return i;
return -1;
}
int main()
{
long long result = 0;
char a[10], b[10], c[10], arr[10][10] = { "black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white" };
scanf("%s", &a);
result += 10 * findIndex(a, arr);
scanf("%s", &b);
result += findIndex(b, arr);
scanf("%s", &c);
result *= pow(10, findIndex(c, arr));
printf("%lld", result);
return 0;
}
코드 설명
메인함수
white가 마지막에 올 경우 계산결과가 커질 수 있으므로 넉넉하게 long long으로 결과 변수를 선언했다.
첫 번째, 두 번째, 세 번째로 입력되는 단어를 저장하는 배열을 a,b,c로 선언한다.
그리고 black부터 white라는 단어를 저장하는 배열을 선언한다. 표를 보면 black의 경우 값은 0, 곱이 1이고, brown의 경우 값은 1, 곱이 10임을 알 수 있다. 배열의 n번째 인덱스에 저장된 단어의 값은 n, 곱은 10^n임을 이용했다.
먼저 첫 번째와 두 번째 입력의 경우에는 findIndex의 반환값을 그대로 사용했다. 세 번째 입력의 경우에는 제곱연산을 수행하는 pow 함수를 이용해서 10^(인덱스)를 구했고, 이를 결과에 곱했다. 그리고 결과를 출력한다.
findIndex 함수
strcmp 함수를 이용해서 입력값과 같은 색을 발견하면 그 인덱스를 반환한다.
느낀 점
strcmp 함수를 처음 이용해 본 문제다. 배열의 n번째 인덱스에 저장된 단어의 값은 n, 곱은 10^n임을 바로 찾아서 적용해서 풀었다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C] 1718 암호 (0) | 2022.08.24 |
---|---|
[백준/C] 1547 공 (0) | 2022.08.22 |
[백준/C] 1085 직사각형에서 탈출 (0) | 2022.08.22 |
[백준/C] 1598 꼬리를 무는 숫자 나열 (0) | 2022.08.22 |
[백준/C] 1159 농구 경기 (0) | 2022.08.21 |