ALGORITHM

[백준] 1076번 - Python/Swift 왕왕초보

rangoo_ 2021. 3. 7. 20:51

요즘은 알고리즘을 시작해보려고 백준 solved.ac 브론즈 단계 문제를 파이썬과 스위프트로 풀어보고 있다.

파이썬은 1학년 때 배우고 2년만에 처음 보는거라 사실 거의 처음부터 하는 수준이다. for문 형태도 기억 안나서 코딩도장 참고한다 ^^,,

스위프트는 iOS 개발에 필요한 부분만 얕게 알고있어서 조금 더 자세하게 공부하려면 알고리즘을 스위프트로 풀어봐야겠다고 생각했다.

한마디로 파이썬이나 스위프트나 감자 수준이라는 것이다~ 갈 길이 멀다

 

하지만 알고리즘 풀이는 문법적으로 도움이 많이 되는 것 같다! 새로 알게 된 것을 위주로 정리해보려고 한다.

 

이번에 풀었던 문제는 백준 1076번 저항이다. 브론즈 2단계 중에 제일 쉬운 문제인 것 같다.

www.acmicpc.net/problem/1076

 

1076번: 저항

첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 색은 모두 위의 표에 쓰여 있는 색만 주어진다.

www.acmicpc.net

 

내가 문제를 접근한 방식은 다음과 같다.

  1. 세가지 입력을 순서대로 inputList 배열에 저장한다.

  2. 반복문을 통해 inputList 배열의 원소에 따른 값을 colorValue에 저장한다.

  3. 저항 값은 (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)