TIL/알고리즘 공부

백준 10818, 2562번 Swift 알고리즘 연습

여의도사노비 2022. 3. 31. 17:06
728x90

요즘 알고리즘 문제를 풀면서 문득 느낀 것이 있다. 평소 수학 문제를 풀거나 어떤 논리적인 풀이에 접근할 때 머리속으로는 그 논리가 굉장히 쉽게 도출되는데, 이걸 실제로 코드로 옮겨 쓰는 것은 상당히 어려운 것 같다.

이래서 요즘 개발자 채용할 때 컴퓨터적 사고(?)를 할 줄 아는 인재를 뽑겠다고 하는 것 같기도...

아직 내 뇌가 컴퓨터의 논리 방식을 익숙해하지 않고 있나보다...

그래도 어쨌든 해결 :)

 

* 10818번

 

1) 내 답안

var count = Int(readLine()!)!
var array = readLine()!.split(separator: " ").map{Int($0)!}

var max: Int = array[0]
var min: Int = array[0]

for i in 0...count - 1 {
    if array[i] >= max {
        max = array[i]
    }
    if array[i] <= min {
        min = array[i]
    }
}

print(min, max)

시행착오를 상당히 많이 거쳤다!

  • 처음 논리는 단순하지만 완벽했다. 집합 내 원소들을 하나하나 모든 원소들과 비교해준다. 이것을 for문과 if문에 접목한다.
  • 그런데 첫 시도에는 array[i]의 값을 쌩으로 비교하니 자꾸 값이 튀었다.
  • 그래서 max라는 변수에 모아놓고 제일 큰 수와 비교가 되도록 구성하였다.
  • 이 같은 방법을 똑같이 min에도 적용.
  • for문이 막혔을때 while로 해볼까 생각하기도 했는데 for가 더 논리적으로 와닿는 거 같아서 만족스럽다.

 

* 2562번

 

1) 내 답안

var input1 = Int(readLine()!)!
var input2 = Int(readLine()!)!
var input3 = Int(readLine()!)!
var input4 = Int(readLine()!)!
var input5 = Int(readLine()!)!
var input6 = Int(readLine()!)!
var input7 = Int(readLine()!)!
var input8 = Int(readLine()!)!
var input9 = Int(readLine()!)!

var max: Int = 0
var order: Int = 0
var array: [Int] = [input1, input2, input3, input4, input5, input6, input7, input8, input9]

for i in array {
    if i >= max {
        max = i
    }
}

print(max)
print(array.index(of: max)! + 1)

이 문제는 인덱스를 구하는 시간이 오래걸렸다

  • 2562번은 max 값을 구하는 것까진 정말 금방했다.
  • 위에서 max를 구하면서 성립된 논리 구조를 바탕으로 금방 값을 구해냈지만 문제는 index 넘버였다.
  • index 넘버를 아는 문법으로만 해결해보고자 하니 진짜 답이 안나오더라.. 아마 index(of: )라는 프로퍼티를 쓰지 않고도 구할 수 있는 방법이 있을것 같다.
  • 하지만 너무 오래 고민하다보니 힘들어서 그냥 Index 구하는 법을 찾아보았다.
  • 결국 엄청나게 간단하게 index(of: )라는 프로퍼티만 있으면 set내의 value를 기준으로 몇번째 인덱스인지 찾을 수 있었다.

 

 

정리(Today I Learned)

  1. set내에서 인덱스 넘버가 궁금한 경우 index(of: )를 이용해보자