문제 : https://leetcode.com/problems/roman-to-integer/
Roman to Integer - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
1. 예전에 풀었던 풀이 이때는 해쉬가 뭔지도 몰랐었다. 🤣
import Foundation
class Solution {
func romanToInt(_ s: String) -> Int {
let romanTuple: [(Character, Int)] = [("M",1000), ("D",500), ("C",100), ("L",50), ("X",10), ("V",5), ("I",1)]
let sArr = Array(s)
var out: [Int] = []
for romanChar in sArr {
for i in 0..<romanTuple.count {
if romanChar == romanTuple[i].0 {
out.append(romanTuple[i].1)
}
}
}
for i in 1..<out.count {
if out[i-1] < out[i] {
out[i-1] = -out[i-1]
}
}
return out.reduce(0, +)
}
}
var input: String = "III"
내가 이걸 왜 튜플+배열로 했을까 ㅋㅋ
지금 생각해보면 로마자 찾으려면 배열 전부를 돌아야 되서 매우 비효율적인 방법(완전탐색)으로 풀었던 것 같다.
옛날에 푼 걸 보니까 많이 늘은 것 같기도 하다!! 🥸
2. 해쉬테이블을 이용해 풀어서 O(1) 로 해결한 방법이다.
import Foundation
var input: String = "III"
class Solution2 {
func romanToInt(_ s: String) -> Int {
var answer = 0
let romanDictionary: [Character:Int] = ["I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
let sArr = Array(s)
var allNumber = [Int]()
for element in sArr {
var number = Int(romanDictionary[element]!)
if let queueLastNumber = allNumber.last {
if queueLastNumber < number {
allNumber[allNumber.endIndex-1] = -queueLastNumber
}
}
allNumber.append(number)
}
answer = allNumber.reduce(0, +)
return answer
}
}
print(Solution2().romanToInt(input))
반응형
'알고리즘' 카테고리의 다른 글
[해쉬] 위장 - 프로그래머스 Swift (2) | 2021.07.14 |
---|---|
[해쉬] N-Repeated Element in Size 2N Array - LeetCode Swift (0) | 2021.07.14 |
[완전탐색] LeetCode contains-duplicate : 중복찾기 - 스위프트 (0) | 2021.07.09 |
[큐] 프로그래머스 42587문제 : 프린터 - 스위프트 (2) | 2021.07.07 |
[그리디] 백준 9237 문제 : 이장님 나무 심기 - 스위프트 (0) | 2021.07.06 |