Neoself의 기술 블로그

알고리즘 지식 정리(10월 23일)[백준 아이언...?] 본문

개발지식 정리/알고리즘

알고리즘 지식 정리(10월 23일)[백준 아이언...?]

Neoself 2024. 10. 23. 13:52

 

위 이미지는 제 현재 프로필 이미지입니다... 잘은 모르겠지만, 일단 롤로치면 아이언 5이지 않을까요? 오늘부터 백준으로 알고리즘 루틴을 아예 바꿔볼 생각입니다.

 

A+B

import Foundation
let input = readLine()!
let arr = input.components(separatedBy:" ")
print("\(Int(arr[0])!+Int(arr[1])!)")

확실히 프로그래머스에 비해선 많이 불친절한것같습니다. 날것의 맛이 좀 있는 듯하네요...! readLine 함수서부터 시간을 생각보다 많이 쓰게될줄은 몰랐습니다...

 

A-B

import Foundation
let input = readLine()!
let arr = input.components(separatedBy:" ")
print(String(Int(arr[0])!-Int(arr[1])!))

 

A/B

import Foundation
let input = readLine()!
let arr = input.components(separatedBy:" ")
print(String(Double(arr[0])!/Double(arr[1])!))

*소수점 자리까지 모두 결과값에 나오도록 나누기 연산자를 사용하고자 할 경우, 대상값 Double타입으로 꼭 변환해주기

 

??!

print("\(readLine()!)??!")

 

1998년생인 내가 태국에서는 2541년생?!

print(String(Int(readLine()!)!-543))

readLine 함수의 반환값 역시 옵셔널이기 때문에, 강제 래핑을 해줘야합니다만, 일반적인 상황의 경우 guard문이나 If문을 통해 예외처리해줘야합니다..!

 

시험성적

switch Int(readLine()!)! {
    case 90...100:
        print("A")
    case 80...89:
        print("B")
    case 70...79:
        print("C")
    case 60...69:
        print("D")
    default:
        print("F")
}

자료구조

스택

let N = Int(readLine()!)!
var arr: [Int] = []
for _ in 0..<N {
    let str = readLine()!.components(separatedBy:" ")
    switch str[0]{
    case "push":
        arr.append(Int(str[1])!)
    case "pop":
        if arr.isEmpty {
            print("-1")
        } else {
            print(String(arr[arr.count-1]))
            arr.removeLast()
        }
    case "size":
        print(String(arr.count))
    case "empty":
        print(arr.isEmpty ? "1" : "0")
    default:
        print(arr.isEmpty ? "-1" : String(arr[arr.count-1]))
    }
}

많은 대응 케이스가 존재하기에 가독성을 위해 Switch문으로 변경해주었습니다.

 

감사합니다.