과거⚰️/코테 (구)

백준 1076 저항 해결 코틀린(kotlin)

아무루 2022. 1. 5. 22:46

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

 

1076번: 저항

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

www.acmicpc.net

백준이 마크가 참 멋있는 듯 ㅎㅎ

 

백준 1076 저항 


import kotlin.math.*

fun main() = with(System.`in`.bufferedReader()) {
	val value = arrayOf("black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white")
	val one = readLine()
	val two = readLine()
	val three = readLine()
	var answer = ((value.indexOf(one) * 10) + value.indexOf(two)) * ((10.0).pow(value.indexOf(three)).toLong())
	println(answer)
}

자료형을 조심하자

어려운 문제는 아니다

배열에 이름 넣고 인덱스를 받아오고 첫 번째 키는 *10

두 번째는 그냥 +

세 번째는 10^index 해서 곱하면 된다

 

(첫 번째 인덱스 * 10) + 두 번째 인덱스 * 10^세 번째 인덱스

 

여기서 문제는 10^세 번째 인덱스 요놈

여기서 long으로 변환을 안 해주면 계속 틀렸다고 뜬다;;

pow함수는 long으로는 자동으로 안 해주나 보다

 


2번째 풀이


fun main() = with(System.`in`.bufferedReader()) {
	val value = mapOf<String,Int>("black" to 0, 
					"brown" to 1, 
					"red" to 2,
					"orange" to	3,
					"yellow" to 4,
					"green" to 5,
					"blue" to 6,
					"violet" to 7,
					"grey"	to 8,
					"white"	to 9)
	val multiply = mapOf<String,Long>("black" to 1, 
					"brown" to 10, 
					"red" to 100,
					"orange" to	1000,
					"yellow" to 10000,
					"green" to 100000,
					"blue" to 1000000,
					"violet" to 10000000,
					"grey"	to 100000000,
					"white"	to 1000000000)
	val one = readLine()
	val two = readLine()
	val three = readLine()
	var answer = (value.get(one)!! * 10 + value.get(two)!!) * multiply.get(three)!!
	println(answer)
}

속도를 올릴 수 있지 않을까 해서 맵에 통째로 넣고 해 봤는데 노력에 비해 20 정도밖에 안 빨라짐

가성비는 별로 인듯하다