Algorithm

[BAEKJOON_1076] 저항(Python)

ZZANG BAE 2022. 7. 31. 18:45

*출처

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

 

1076번: 저항

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

www.acmicpc.net

[문제]

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

예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.

[입력]

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

[출력]

입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.

[예제 입력]

yellow
violet
red

[예제 출력]

4700

[전략]

1) 표를 보고 들었던 첫 생각은 주어진 데이터를 '딕셔너리'로 저장해야겠다고 생각했다.

그리고 키 값으로 딕셔너리에 접근을 해서 원하는 값을 출력해야겠다고 생각했다.

 

2) 그런데, 출력을 내는 과정에서 '굳이 10^n(n은 색에 배정된 값) 을 취해야할까 ?' 라는 생각이 들어서 문자열에서 f string을 통해 0의 값을 출력해보면 더 쉬울 것 같다고 결론 냈다.

- 이 과정에서 오류가 났었는데, 그 이유는 아래에 적어보겠다.(출력: 00000)

 

3) 데이터의 값을 잘 보니, 곱해지는 값은 10^(색에 배당된 값)이었다. 따라서 주어진 데이터를 '리스트'로 저장, 그리고 인덱스 값을 통해서 원하는 출력값을 내보면 좋겠다고 생각했다.

[코드]

1) 전략으로 푼 코드(딕셔너리로 데이터 정리, 계산 바로)

-> 처음에 풀었던 방식으로, 바로 정답으로 처리가 되었다.

 

2) 전략으로 푼 코드(딕셔너리로 데이터 정리, 문자열의 곱을 이용)

-> 이렇게 풀었는데, '틀렸습니다'가 나왔다.

체점 20% 중에 '틀렸습니다'가 나온 것으로 봐선, 분명히 TestCase중 내가 놓친 부분이 었었던 것 같았다.

한참을 고민했다가 찾은 것은 입력값이 black, black, red로 들어갔을 때 였다.

저항값이 0으로 나와야 하는데 000으로 출력되었다.

그래서 조건 하나를 더 달았다. black, black, 아무색 으로 입력되었을 때, 0 으로 출력될 수 있도록

-> 위와 같이 고치고 나니, 오류가 난 부분을 해결할 수 있었다.

*** 하지만, 속도면에서 이익을 전혀 보지 못했다. 직관적으로는, 계산이 줄었을 것이라 생각했지만, if-else문을 쓰는 과정에서 시간이 생각보다 많이 걸렸나보다...

 

3) 전략으로 푼 코드(인덱스 값을 이용)

-> 인덱스 값을 이용하니 저장할 때 코드가 한 층 깨끗할 수 있음을 느꼈다.(가독성up)

[공부한 점]

  • 곱하기 0과 같은 상황에서 edgeCase가 날 수 있음을 확인할 수 있었다.
    • 다음에 문제를 풀 때, 0이 들어가는 데이터를 유심히 확인해야겠다.
  • 그냥 계산이 오래거릴 것 같아서, 조건문을 달아서 계산을 줄이고자 했는데, 컴퓨터 입장에서는 도찐개찐 일 수도 있음을 확인했다...
  • 데이터 값을 잘 관찰하면, 인덱스 값을 이용하여 데이터를 처리할 수 있다는 점이 인상깊다.