Swift) 백준 #2577 + 고위함수

eelijus·2022년 6월 27일
0

백준

목록 보기
2/2


백준 2577번 문제 : 숫자의 개수

3개의 자연수를 입력받은 후, A x B x C 그 결과값에 0~9까지의 숫자가 각각 몇 번씩 쓰였는지 구하는 문제

참고 링크 : https://velog.io/@ryan-son/Swift-2577-숫자의-개수-백준-B2

map{}

import Foundation

let numbers: [Int] = [0, 1, 2, 3]
var doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers)

//OUTPUT [0, 2, 6, 8]

reduce()

import Foundation

let numbers: [Int] = [1, 2, 3, 4, 5]
var sum = numbers.reduce(0, +)
print(sum)

//OUTPUT : 15

filter{}

import Foundation

let numbers: [Int] = [10, 3, 20, 4, 15]
var filtered = numbers.filter{ $0 > 5}.sorted()
print(filtered)

//OUTPUT : [10, 15, 20]
let numbers: [Int] = [10, 3, 20, 4, 15]
    .filter { $0 > 5}
    .map { $0 * 10}

print(numbers)
//OUTPUT : [100, 200, 150]

compactMap

1차원 배열에서 nil을 제거하고 옵셔널 바인딩을 하고싶을 때 compactMap을 사용한다.

import Foundation

let randomValue = [1, nil, 3, nil, 5, 6, 7]
let compactMapArray = randomValue.compactMap { $0 }

print(compactMapArray)
//OUTPUT : [1, 3, 5, 6, 7]

풀이

var inputNumbers: [Int] = []
var counts: [Int] = []

for _ in 1...3 {
    inputNumbers.append(Int(readLine()!)!)
}

let multiplied = inputNumbers.reduce(1, *)
let splittedByDigit = String(describing: multiplied).compactMap { Int(String($0)) }

for i in 0...9 {
    let counted = splittedByDigit.filter { $0 == i }.count
    counts.append(counted)
}

counts.forEach { print($0) }

다른 풀이

let input1 = Int(readLine()!)!
let input2 = Int(readLine()!)!
let input3 = Int(readLine()!)!

let sum = String(input1 * input2 * input3)
var arr: [Character] = []

for i in sum {
    arr.append(i)
}
for i in 0...9 {
    var a = arr.filter{ Int(String($0))! == i}
    print(a.count)
}

4344

https://velog.io/@h0neydear/Swift-백준알고리즘-4344

import Foundation

let caseCount = Int(readLine()!)!

for _ in 1...caseCount {
    let input = readLine()!.split(separator: " ").map{Double(String($0))!}
    var average = 0.0
    for i in input[1...] {
        average += i
    }
    average /= input[0]
    let overAverageCnt = Double(input[1...].filter{$0 > average}.count)
    print(String(format: "%.3f", overAverageCnt / input[0] * 100) + "%")
}

긁어온 코드를 좀 더 내 스타일로 고쳤다

import Foundation

let caseCnt = Int(readLine()!)!

for _ in 1...caseCnt {
    let result = readLine()!.split(separator: " ").map{Double($0)!}
    let studentCnt = result[0]
    var totalScore = 0.0
    for i in result[1...] {
        totalScore += i
    }
    var average = totalScore / studentCnt
    let overAverageCnt = Double(result[1...].filter{$0 > average}.count)
    print(String(format: "%.3f", overAverageCnt / studentCnt * 100) + "%")
    
}
profile
sujileelea

0개의 댓글

관련 채용 정보