TIL/알고리즘 공부

백준 2581번 Swift 알고리즘 연습

여의도사노비 2022. 8. 30. 18:16
728x90

백준 1978번 문제와 거의 유사하다.

소수를 찾아내고, 소수 중 가장 작은 값, 소수를 전부 더한 값 등을 출력하면된다.

1978번을 풀고 바로 풀어서 그런지 정말 금방 풀었다.

 

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. 처음 값과 마지막 값을 입력받고
  2. 그 사이에 있는 Int 값들을 전부 저장한다.
  3. 그 안에 있는 값들을 기준으로 소수 값인지를 판단한다.
  4. 소수 값이 맞다면 array2에 append 해준다.
  5. array2에는 소수값만 모여있는 배열이 완성된다.
  6. 배열에 값이 존재하지 않으면 -1 출력
  7. 배열에 값이 존재한다면 배열 내 원소들의 총합과 최소값을 출력한다.

 

 

* 2581번

let bottom = Int(readLine()!)!
let ceiling = Int(readLine()!)!
var array: Array<Int> = []
var array2: Array<Int> = []
var count = 0
var check = true

for i in bottom...ceiling {
    array.append(i)
}

for i in 0..<array.count {
    if array[i] == 1 {
        check = false
    }else {
        for j in 2..<array[i] {
            if array[i] % j == 0 {
                check = false
            }
        }
    }
    if check == true {
        array2.append(array[i])
    }
    check = true
}

var total = array2.reduce(0, +)

if array2.count == 0 {
    print(-1)
} else {
    print(total)
    print(array2.min()!)
}

 

 

정리(Today I Learned)

  1. reduce는 배열 안에 원소들의 사칙연산을 행하기 좋은 함수이다. 알고리즘 문제 풀던 초기에 썼었던 것으로 기억하는데... 그 후로 안쓰다보니 또 까먹었다. 유용하지만 자주 까먹을 수 있는 함수들은 따로 정리를 해두어야겠다.