요즘 알고리즘 문제를 풀면서 문득 느낀 것이 있다. 평소 수학 문제를 풀거나 어떤 논리적인 풀이에 접근할 때 머리속으로는 그 논리가 굉장히 쉽게 도출되는데, 이걸 실제로 코드로 옮겨 쓰는 것은 상당히 어려운 것 같다.
이래서 요즘 개발자 채용할 때 컴퓨터적 사고(?)를 할 줄 아는 인재를 뽑겠다고 하는 것 같기도...
아직 내 뇌가 컴퓨터의 논리 방식을 익숙해하지 않고 있나보다...
그래도 어쨌든 해결 :)
* 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)
- set내에서 인덱스 넘버가 궁금한 경우 index(of: )를 이용해보자
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 3052번 Swift 알고리즘 연습 (0) | 2022.04.16 |
---|---|
백준 2577번 Swift 알고리즘 연습 (0) | 2022.04.15 |
백준 1110번 Swift 알고리즘 연습 (2) | 2022.03.30 |
백준 10952, 10951번 Swift 알고리즘 연습 (2) | 2022.03.29 |
백준 10871번 Swift 알고리즘 연습 (0) | 2022.03.29 |