TIL/알고리즘 공부

백준 2753, 14681, 2884번 Swift 알고리즘 연습

여의도사노비 2022. 3. 21. 17:39
728x90

주말 중에 if단계를 전부 끝낼까 싶었는데... 아무리 생각해봐도 주말에는 스트레스 없이 쉬는 시간이 필요할 것 같아 그냥 평일에만 알고리즘을 연습하고자 한다...

 

* 2753번

 

1)

let insertKey = readLine()!

if Int(insertKey)! % 400 == 0  {
    print("1")
} else if Int(insertKey)! % 4 == 0 && Int(insertKey)! % 100 != 0 {
    print("1")
} else {
    print("0")
}

윤년의 개념은 배울때마다 새로운듯

  • 윤년 문제의 경우 다양한 풀이방식이 있겠지만, 나는 if문을 쓸 때 순서를 파악하는 것이 가장 중요하다고 생각했다.
  • 4의 배수, 100의 배수, 400의 배수 등 여러가지 기준이 한 번에 제시되기 때문에 이를 효율적인 순서에 맞게 배치하고자 했다.

 

* 14681번

 

1)

let a = readLine()!
let b = readLine()!

if Double(a)! > 0 && Double(b)! > 0 {
    print("1")
} else if Double(a)! < 0 && Double(b)! > 0 {
    print("2")
} else if Double(a)! < 0 && Double(b)! < 0 {
    print("3")
} else if Double(a)! > 0 && Double(b)! < 0 {
    print("4")
} else {
    print("0.0")
}

케이스 문으로 풀려다가 그냥 if문이 더 쉽길래..

  • 머리 속으로는 (+, +), (-, +) 등의 사분면 개념을 기준으로 케이스를 적용하면 어떨까 했는데, 오히려 4가지 케이스를 정의 내리는 과정이 더 걸릴 거 같아서 그냥 if 문으로 진행했다.

 

* 2884번

 

1)

var a: [Int]
var b = readLine()!.split(separator: " ").map { Int(String($0))! }
a = b

if a[0] == 0 && a[1] < 45 {
    print("23", a[1] + 60 - 45)
} else if a[0] != 0 && a[1] < 45 {
    print(a[0] - 1, a[1] + 60 - 45)
} else {
    print(a[0], a[1] - 45)
}

0시 30분 일때 알람이 23시로 바뀐다는 것을 깜빡하여 한 번 틀림...

  • 첫 번째 if문에서 "23"을 그대로 프린트한게 뭔가 마음에 크게 걸린다. 저걸 어떻게든 바꿔 넣고 싶은 충동...
  • if 단계 알고리즘 문제가 다 끝나고 전반적으로 최종 리뷰할때 다시 풀어봐야겠다.

 

정리(Today I Learned)

  1. readLine은 기본적으로 string? 형태인데, map을 적용하면 int 형태로도 사용 가능하다는 것을 잊지말자!
  2. 입력 1줄 -> split or components(speratedBy), 입력 2줄 -> readLine() * 2