PS (C, C++)

[백준/C] 1076 저항

최연재 2022. 8. 22. 00:32

https://www.acmicpc.net/problem/1076

 

1076번: 저항

첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.

www.acmicpc.net

코드

#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