[백준] 1076번 - Python/Swift 왕왕초보
요즘은 알고리즘을 시작해보려고 백준 solved.ac 브론즈 단계 문제를 파이썬과 스위프트로 풀어보고 있다.
파이썬은 1학년 때 배우고 2년만에 처음 보는거라 사실 거의 처음부터 하는 수준이다. for문 형태도 기억 안나서 코딩도장 참고한다 ^^,,
스위프트는 iOS 개발에 필요한 부분만 얕게 알고있어서 조금 더 자세하게 공부하려면 알고리즘을 스위프트로 풀어봐야겠다고 생각했다.
한마디로 파이썬이나 스위프트나 감자 수준이라는 것이다~ 갈 길이 멀다
하지만 알고리즘 풀이는 문법적으로 도움이 많이 되는 것 같다! 새로 알게 된 것을 위주로 정리해보려고 한다.
이번에 풀었던 문제는 백준 1076번 저항이다. 브론즈 2단계 중에 제일 쉬운 문제인 것 같다.
1076번: 저항
첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다.
www.acmicpc.net
내가 문제를 접근한 방식은 다음과 같다.
-
세가지 입력을 순서대로 inputList 배열에 저장한다.
-
반복문을 통해 inputList 배열의 원소에 따른 값을 colorValue에 저장한다.
-
저항 값은 (colorValue[0]*10 + colorValue[1]) * (10의 colorValue[2] 제곱)이 된다.
자 그럼 파이썬에서 기억할 점을 정리해보자~
먼저 거듭제곱 구하기이다. 아주 간단하게 math를 임포트하고 pow 함수를 이용하면 된다. 밑과 지수, 결과값도 double형이 디폴트이다.
#거듭제곱
import math
pow(밑, 지수)
그리고 개인적으로는 충격적이었던 점 두가지
-
파이썬에는 switch문이 없다. if문을 잘 활용하도록 하자
-
파이썬에는 증감연산자가 없다
말도안돼
증감연산자는 위치에 따라서 전위, 후위로 연산 순서가 달라질 수 있기 때문에 일관성과 가독성을 중시하는 파이썬의 성격과 맞지 않는다고 한다.. +=과 같은 형태로 대체할 수 있긴하지만 다른 언어에서 필요에 따라 전위, 후위로 잘 나눠쓰던 증감연산자가 없는게 좀 허전하긴 하다.
하지만 또 생각해보면 이런 점 덕분에 누구에게나 배우기 쉬운 언어가 된 것 같기도 하다. 1학년 때 처음 전위, 후위 개념을 배울 땐 엄청 헷갈리긴 했었다,,
암튼 다음은 스위프트에서 기억할 점을 정리해보자~
입력 받기
정말 기본 중 기본이지만 iOS에서는 사용자로부터 입력을 받을 땐 텍스트필드를 사용했으니 한번도 공부할 일이 없었다.
아무튼 입력을 받기 위해서는 readLine() 함수를 사용하면 된다. char형이 디폴트여서 주로 String이나 Int로 타입캐스팅해서 쓸 것 같다.
배열 선언
기본 배열 선언은 자주 했었는데 이번에 알게 된 배열 선언 방식은 모든 원소를 같은 값으로 초기화하는 방식이다.
반복문을 사용할 수도 있겠지만
var 배열이름 = [자료형](repeating: 반복할 값, count: 반복할 횟수)
이렇게 간단하게도 초기화할 수 있다!
전체코드
#Python
import math
resistance = 0
inputList = []
input1 = input()
inputList.append(input1)
input2 = input()
inputList.append(input2)
input3 = input()
inputList.append(input3)
i = 0
colorValue = [0, 0, 0]
while i < 3:
if inputList[i] == "black":
colorValue[i] = 0
elif inputList[i] == "brown":
colorValue[i] = 1
elif inputList[i] == "red":
colorValue[i] = 2
elif inputList[i] == "orange":
colorValue[i] = 3
elif inputList[i] == "yellow":
colorValue[i] = 4
elif inputList[i] == "green":
colorValue[i] = 5
elif inputList[i] == "blue":
colorValue[i] = 6
elif inputList[i] == "violet":
colorValue[i] = 7
elif inputList[i] == "grey":
colorValue[i] = 8
elif inputList[i] == "white":
colorValue[i] = 9
else:
print("잘못된 색")
i += 1
resistance = (colorValue[0]*10 + colorValue[1]) * math.pow(10, colorValue[2])
print(int(resistance))
// Swift
import Foundation
var resistance: Int = 0
var inputList = [String](repeating: "yellow", count: 3)
var colorValue = [Int](repeating: 0, count: 3)
for i in 0...2 {
inputList[i] = String(readLine()!)
}
for i in 0...2 {
switch inputList[i]{
case "black":
colorValue[i] = 0
case "brown":
colorValue[i] = 1
case "red":
colorValue[i] = 2
case "orange":
colorValue[i] = 3
case "yellow":
colorValue[i] = 4
case "green":
colorValue[i] = 5
case "blue":
colorValue[i] = 6
case "violet":
colorValue[i] = 7
case "grey":
colorValue[i] = 8
case "white":
colorValue[i] = 9
default:
print("input error")
}
}
resistance = (colorValue[0]*10 + colorValue[1]) * Int((pow(10.0, Double(colorValue[2]))))
print(resistance)