티스토리 뷰
아 참고로 저번에 -->가 통째로 연산자이겠거니 하고 착각했는데 후위감소 + 크기비교의 조합이었다는것을 갑자기 알았다... 생각좀 하라구~
문제는 단순한데 이상하게 애를 되게 먹었음.
하긴 뭐든 풀고나면 안단순해보이겠냐~
세 저항 string을 받고 비교 후 그에 알맞는 값을 처리해주면 된다.
문자열 비교는
처음에는 구조체를 만들어서 +값 *값 나눠받고 모조리 string 플러스 연산을 하려고 했는데,
표를 보고 0의 숫자와 +값이 같음을 이용해야 함을 깨달았다.
또, 단순히 모두 string 처리하여 문자열 합산을 하기에는 무리인 부분이 있는데,
black은 값이 0이다.
만약 black black red면 0000이 출력된다.
따라서 저항값을 int로 받아 처리하였다.
result = (저항1 * 10 + 저항2) * 10(필요한만큼 반복)
아 그리고, 문자열 받는 것은 string을 모조리 매번 비교하기에는 연산 소모량이 커서
첫번째 char 비교 + 필요하면 2-3번째 부가적 비교를 하게 하여 절대로 전체 string을 매번 비교하게 하지는 않았다.
아 또... 결과 result는 int가 아니라 더 큰 값을 포용할 수 있는 자료형을 이용하자. 이거때문에 삽질 많이했음
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
BufferedStream bs = new BufferedStream(Console.OpenStandardInput());
StreamReader sr = new StreamReader(bs);
StringBuilder sb = new StringBuilder();
string[] resistance = new string[3] { sr.ReadLine(), sr.ReadLine(), sr.ReadLine() };
int[] num = new int[3];
for(int i = 0; i <3; i++)
{
switch (resistance[i][0])
{
case 'b':
if (resistance[i][1].Equals('l'))
{
if (resistance[i][2].Equals('a'))
num[i] = 0;
else
num[i] = 6;
}
else
num[i] = 1;
break;
case 'r': num[i] = 2; break;
case 'o': num[i] = 3; break;
case 'y': num[i] = 4; break;
case 'g':
if (resistance[i][3].Equals('e'))
num[i] = 5;
else
num[i] = 8;
break;
case 'v': num[i] = 7; break;
case 'w': num[i] = 9; break;
}
}
long result = num[0] * 10 + num[1];
while (num[2]-- > 0)
result *= 10;
Console.WriteLine(result);
}
}
}
'■ 알고리즘 > ◻ 백준' 카테고리의 다른 글
| [C#]백준 1159번 : 농구 경기 (0) | 2018.08.13 |
|---|---|
| [C#]백준 12813번 : 이진수 연산 (0) | 2018.08.10 |
| [C#]백준 10866번 : 덱 (0) | 2018.08.10 |
| 백준 할때 자주 찾는 메소드 (0) | 2018.08.10 |
| [C#]백준 1966번 : 프린터 큐 (0) | 2018.08.10 |