: solved.ac - bronze 2

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

 

1076번: 저항

전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한

www.acmicpc.net

 

 

예제 입력 1

orange
red
blue

 

예제 출력 1

32000000

 

예제 입력 2

white
white
white

 

예제 출력 2

99000000000

 

정답

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int value(char* color) {
	int v = 0;
	if (strcmp(color, "black") == 0) v = 0;
	else if (strcmp(color, "brown") == 0) v = 1;
	else if (strcmp(color, "red") == 0) v = 2;
	else if (strcmp(color, "orange") == 0) v = 3;
	else if (strcmp(color, "yellow") == 0) v = 4;
	else if (strcmp(color, "green") == 0) v = 5;
	else if (strcmp(color, "blue") == 0) v = 6;
	else if (strcmp(color, "violet") == 0) v = 7;
	else if (strcmp(color, "grey") == 0) v = 8;
	else if (strcmp(color, "white") == 0) v = 9;

	return v;
}


int main() {
	long long res = 1;
	char color[3][10] = { '\0' };

	scanf("%s", color[0]);
	res *= value(color[0]) * 10;

	scanf("%s", color[1]);
	res += value(color[1]);

	scanf("%s", color[2]);
	int exp = value(color[2]);
	for (int i = 0; i < exp; i++) {
		res *= 10;
	}

	printf("%lld", res);

	return 0;
}


해설

 

1. 먼저 string.h 헤더파일에 내장되어 있는 문자열 비교 함수를 이용해

입력된 문자열을 비교해 그에 따라 동작을 달리하는 함수를 만든다.

검은색부터 흰색까지의 10개의 색이 0부터 9까지의 수에 배정된다.

또한 곱이 되는 수도 배정된 0부터 9까지의 수를 10에 지수로 취하여 거듭제곱한 수이므로

아래의 함수를 이용해 문자열을 넣으면 해당되는 정수값을 얻을 수 있게 한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int value(char* color) {
	int v = 0;
	if (strcmp(color, "black") == 0) v = 0;
	else if (strcmp(color, "brown") == 0) v = 1;
	else if (strcmp(color, "red") == 0) v = 2;
	else if (strcmp(color, "orange") == 0) v = 3;
	else if (strcmp(color, "yellow") == 0) v = 4;
	else if (strcmp(color, "green") == 0) v = 5;
	else if (strcmp(color, "blue") == 0) v = 6;
	else if (strcmp(color, "violet") == 0) v = 7;
	else if (strcmp(color, "grey") == 0) v = 8;
	else if (strcmp(color, "white") == 0) v = 9;

	return v;
}

 

 

2. 세 개의 단어를 받아 value 함수에 넣고 해당하는 값을 가져온다.

첫 값은 곱한 뒤 10을 다시 곱하고, 두 번째 값은 거기에 더하여 1의 자리 수로 만들고,

세 번째 값은 10을 밑으로 취해 거듭제곱한다.

pow 내장함수를 쓸 수도 있으나 입력과 출력이 double형이어야 하기 때문에 자료형으로 인해 생기는 문제를 피하기 위해 대신 for문을 사용했다.

계산이 완료되면 long long 형인(오버플로 방지) 결과값을 출력한다.

int main() {
	long long res = 1;
	char color[3][10] = { '\0' };

	scanf("%s", color[0]);
	res *= value(color[0]) * 10;

	scanf("%s", color[1]);
	res += value(color[1]);

	scanf("%s", color[2]);
	int exp = value(color[2]);
	for (int i = 0; i < exp; i++) {
		res *= 10;
	}

	printf("%lld", res);

	return 0;
}

 

'C언어 > BAEKJOON' 카테고리의 다른 글

[백준] 1297. TV 크기  (0) 2022.08.28
[백준] 2033. 반올림  (0) 2022.08.28
[백준] 1009. 분산처리  (0) 2022.08.18
[백준] 4344. 평균은 넘겠지  (0) 2022.08.11
[백준] 1546. 평균  (0) 2022.08.02

+ Recent posts