본문 바로가기

Algorithm

백준 - 1차원 배열

728x90

4단계인 .. 1차원 배열을 풀면서 느낀 점과 .. 기록할 것들임 ..

 

입력값과 출력값을 잘보자.

만약 소수점이라면 손가락에 힘을 풀고 잠시 생각하자.

또 습관적으로 var value: Int = 0 이러지 말고 .. 제발 ..

 

> 소수점을 다루는 연산을 할 때는 Int 대신에 Float 또는 Double을 사용하자. 

 

 

고차함수를 잘 활용하자.

근데 이건 정말 매번 느끼는 것임 .. 근데 매번 나는 쓰는 것만 씀 .. ㅇㅉ ..

 

관련 문제는 8958번임 문제 링크 ㄱ ㄱ

 

내 풀이 .. 는 사실 좀 구리지만 아래와 같고,

let count: Int = Int(readLine()!)!

var result = 0
var results: [Int] = []
var counts: [Int] = []

for _ in 1...count {
    let arr = readLine()!.map { $0 }
    
    for item in arr {
        if item == "O" { result += 1 }
        else { result = 0 }
        
        results.append(result)
    }
    
    counts.append(results.reduce(0, +))
    result = 0
    results.removeAll()
}

print(counts.map { String($0) }.joined(separator: "\n"))

 

보고 와싀 쩐당; 이라고 느낀 것은 이것임 ..

let count: Int = Int(readLine()!)!

for _ in 0..<count {
    print(readLine()!.split(separator: "X").reduce(0) {
        $0 + ($1.count * ($1.count + 1) / 2)
    })
}

 

+ 이건 왜 틀린걸까? 제발 알려종.

4344번 평균은 넘겠지. 문제인데 .. 처음 풀이가 틀려서 .. 도대체 난 왜 틀렸는지 모르겠지만 .. 일단 틀렸다길래 조금 바꿔서 다시 풀었음 .. 근데 이유를 모르겠어서 혹시 안다면 댓글 ㄱ ㄱ 

 

문제는 아래와 같고 ..

 

이 문제에 대해서 처음 푼 풀이는 ..

import Foundation

let total = Int(readLine()!)!
var resultArr: [Float] = []

func calculate(count: Int, values: [Int]) -> Float {
    let average = (values.reduce(0, +) - values[0]) / count
    var result: Int = 0
    
    for item in values {
        if item > average { result += 1 }
    }
    
    return Float(result)/Float(count) * 100
}

for _ in 1...total {
    let values = readLine()!.split(separator: " ").map { Int($0)! }
    resultArr.append(calculate(count: values[0], values: values))
}

print(resultArr.map { String(format: "%.3f", $0) + "%" }.joined(separator: "\n"))

이거였는데 틀렸다 그래서 ..

 

import Foundation

let total = Int(readLine()!)!

for _ in 0...total - 1 {
    var scoreArr = readLine()!.split(separator: " ").map { Int($0)! }
    let studentNum: Int = scoreArr[0]
    scoreArr.removeFirst()
    
    var count: Int = 0
    
    for score in scoreArr {
        if score > (scoreArr.reduce(0, +) / studentNum) {
            count += 1
        }
    }
    
    print(String(format: "%.3f", Float(count) / Float(studentNum) * 100), "%", separator: "")
}

이렇게 풀기는 했는데 위의 풀이가 틀린 것이 왜일까 .. ? 

진짜 모르겠어 흑흑 🫠

'Algorithm' 카테고리의 다른 글

[백준] 1157번: 단어 공부  (0) 2022.09.11
[백준] 2675번: 문자열 반복  (0) 2022.09.11
백준 - 1110번 (더하기 사이클)  (0) 2022.08.23
백준 - 10951번  (0) 2022.08.23
백준 - 구구단  (0) 2022.08.20