728x90
안녕하세요 코코종입니다....
또 알고리즘이랑 싸우다가 왔습니다.... 백준은 인간적으로 예제에 대한 설명좀 자세히 달아라 진짜 ㅡㅡ
//
// main.swift
// BackJoon
//
// Created by kokojong on 2023/04/18.
//
import Foundation
// 백준 1027 고층 건물 완탐 골4
let n = Int(readLine()!) ?? 0
let arr: [Double] = readLine()!.split(separator: " ").map { Double(String($0))! }
var answer = 0
func findLeft(x1: Int) -> Int { // 기준점의 왼쪽에 몇개가 되는지
var leftCnt = 0
let y1 = arr[x1]
var maxD: Double = Double(Int.max)
for l in 1...x1 {
let x2 = x1 - l
let y2 = arr[x2]
let d = Double(y2 - y1) / Double(x2 - x1)
if d < maxD { // 기울기는 양수, 그 중 최근에 나온 가장 큰 기울기보다 작은 기울기가 나와야만 가능
leftCnt += 1
maxD = d
} else {
return leftCnt
}
}
return leftCnt
}
func findRight(x1: Int) -> Int { // 기준점의 오른쪽에 몇개가 되는지
var rightCnt = 0
let y1 = arr[x1]
var minD: Double = Double(Int.min)
for l in x1+1..<n {
let x2 = l
let y2 = arr[x2]
let d = Double(y2 - y1) / Double(x2 - x1)
if d > minD { // 기울기는 음수, 그 중 최근에 나온 가장 작은 기울기보다 큰 기울기가 나와야만 가능
rightCnt += 1
minD = d
} else {
return rightCnt
}
}
return rightCnt
}
for i in 0..<n {
var left = 0
var right = 0
if i > 0 {
left = findLeft(x1: i)
}
if i < n-1 {
right = findRight(x1: i)
}
answer = max(left + right, answer)
}
print(answer)
아아아아아무리 봐도 맞는데 말이죠... 틀렸대요...ㅜㅜ 문제를 찾느라 너무 힘들었습니닷...
문제는 바로 left, right에서 else return을 해준게 문제였는데요,,,,
예제 1번 입력인
15
1 5 3 2 6 3 2 6 4 2 5 7 3 1 5
경우에 원하는 값은 7이 되어야 하는데 저는 6이 나오더라구요...? index 5의 경우높이가 6인데 쩌기 오른쪽에 7도 있죠?
그래서 왼쪽에서는 1, 5, 3, 2가 보이고 오른쪽에서는 3, 2 (쭉안보이다가) 7이 보이는겁니다...
제가 멍충인게 자기보다 낮은 건물이라고 생각했네요.... 하하... 진짜 멍충인가...안보이는 건물이 보인다고 멈추면 안됩니다!!! 다들 참고하세요 ㅜㅜ
//
// main.swift
// BackJoon
//
// Created by kokojong on 2023/04/18.
//
import Foundation
// 백준 1027 고층 건물 완탐 골4
let n = Int(readLine()!) ?? 0
let arr: [Double] = readLine()!.split(separator: " ").map { Double(String($0))! }
var answer = 0
func findLeft(x1: Int) -> Int { // 기준점의 왼쪽에 몇개가 되는지
var leftCnt = 0
let y1 = arr[x1]
var maxD: Double = Double(Int.max)
for l in 1...x1 {
let x2 = x1 - l
let y2 = arr[x2]
let d = Double(y2 - y1) / Double(x2 - x1)
if d < maxD { // 기울기는 양수, 그 중 최근에 나온 가장 큰 기울기보다 작은 기울기가 나와야만 가능
leftCnt += 1
maxD = d
}
}
return leftCnt
}
func findRight(x1: Int) -> Int { // 기준점의 오른쪽에 몇개가 되는지
var rightCnt = 0
let y1 = arr[x1]
var minD: Double = Double(Int.min)
for l in x1+1..<n {
let x2 = l
let y2 = arr[x2]
// if x2 - x1 == 0 { continue }
let d = Double(y2 - y1) / Double(x2 - x1)
if d > minD { // 기울기는 음수, 그 중 최근에 나온 가장 작은 기울기보다 큰 기울기가 나와야만 가능
rightCnt += 1
minD = d
}
}
return rightCnt
}
for i in 0..<n {
var left = 0
var right = 0
if i > 0 {
left = findLeft(x1: i)
}
if i < n-1 {
right = findRight(x1: i)
}
// print(left, right)
answer = max(left + right, answer)
}
print(answer)
조건을 쪼금만 바꿨더니 되는 이런... 허헣ㅎ.ㅎ.ㅎ.
다들 저처럼 실수하지 마세요 ㅎ..
728x90
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 11724 연결 요소의 개수 (0) | 2023.04.20 |
---|---|
[Swift 알고리즘] 백준 11724 연결 요소의 개수 (3) | 2023.04.19 |
[Swift 알고리즘] 백준 12919 A와 B 2 (1) | 2023.04.17 |
[Swift 알고리즘] 백준 1992 쿼드트리 (0) | 2023.04.16 |
[Swift 알고리즘] 백준 1189 컴백홈 (2) | 2023.04.12 |