새로운 카테고리 게시 시작!
!
연산!
나는 직업을 얻기 위해 천천히 그리고 점진적으로 발전하려고 노력하고 있습니다.
과거에 Python으로 해결하는 것을 중단했지만 Swift를 다시 사용하기 시작했습니다!
백준의 브론즈를 먼저 풀어봤는데 정말 짜증나더라구요 ^____^
(오늘의 이슈)
브론즈 3 문제
하지만 비참…
아니 브론즈3인데 저게 뭔데
1톤
import Foundation
var cnt = Int(readLine()!
)!
var nums: (Int) = readLine()!
.components(separatedBy: " ").map { Int($0)!
}
var maxN = nums(0)
var minN = nums(0)
for i in 1..<cnt {
maxN = max(maxN, nums(i))
minN = min(minN, nums(i))
}
print("\(minN) \(maxN)")
2t
import Foundation
var cnt = Int(readLine()!
)!
var nums: (Int) = readLine()!
.components(separatedBy: " ").map { Int($0)!
}
var sortedNums = nums.sorted()
print("\(sortedNums(0)) \(sortedNums(cnt-1))")
3t
import Foundation
var cnt = Int(readLine()!
)!
var nums: (Int) = readLine()!
.components(separatedBy: " ").map { Int($0)!
}.sorted()
print("\(nums.first!
) \(nums.last!
)")
지금까지 해봤는데 잘 모르겠어서 구글링 해봤습니다.
components()에 문제가 있었습니다…
그래서 답이 나왔다
import Foundation // 사실 얘도 없어도 됨
var cnt = Int(readLine()!
)!
var nums: (Int) = readLine()!
.split(separator: " ").map { Int($0)!
}
print("\(nums.min()!
) \(nums.max()!
)")
split() 및 components()가 작동하지 않는 이유!
!
!
!
둘의 차이점이 궁금했는데
그래서 다시 구글링을 해보니 꽤 명료했다.
첫 번째 구성요소()공식 문서 v
먼저, components() Foundation은 import를 해야 합니다.
공식 문서를 보면 입력 값이 하나만 있습니다.
구분자: 문자열
·
통해 분리문자열 값에 따라 구분할 문자열을 결정합니다.
(나는 항상 Swift가 매우 읽기 쉽다고 느낀다)
·
반환 값은 (끈)
따라서 알고리즘을 풀 때
import Foundation
var nums = readLine()!
.components(seperatedBy: " ").map { Int($0)!
}
공백으로 구분된 문자열을 분할하려면 입력 값으로 ” “를 입력합니다.
(나중에 map 함수를 사용하여 반환 값을 String에서 Int로 변환합니다.
)
·
·
·
그리고 분할()공식 문서 v
이것은 기본적으로 Swift와 함께 제공되는 자식이므로 별도로 가져올 필요가 없습니다.
그리고 입구는 3개!
(필수 자식은 구분 기호입니다)
구분자: 본인. 요소
maxSplits: 정수
OmitEmptySubsequences: 부울
구성품과 비슷합니다 구분자값을 기준으로 분류할 항목을 지정합니다.
그러나 구성 요소와 달리 유형은 Self.Elements입니다.
split()은 어떤 배열에 사용됩니까?
배열 요소의 유형을 말합니다!
!
따라서 타입이 (String)이면 Self.Elements는 String 타입이 되고,
유형(Int)인 경우 Self.Elements는 Int 유형입니다.
·
다음 입력 최대 분할 최대 분할 수를 입력으로 사용
공식 문서에는 maxSplits: Int = Int.max ,
즉, 기본값은 Int.max이며 int 유형에서 가장 큰 숫자로 나타납니다!
즉, 입력값을 주지 않으면 최대한 쪼개지는 것 같죠?
·
다음 EmptySubsequences 생략 하지만
이것은 생략(생략) void(빈) 하위 시퀀스(하위 문자열)입니다.
즉, 분할 결과에 빈 문자열이 포함되어야 합니까? 이것은
입력값이 “1 2 3 4 5″인 경우(공백 3개 사용)
참이면 (“1”, “2”, “3”, “4”, “5”)
틀렸다면 (“1”, “2”, “3”, “”, “”, “4”, “5”) (공백 3개 사이에 “”가 2개 들어있기 때문에)
이 반환 값을 얻습니다.
기본적으로 참!
·
반환 값은 (셀프 에피소드) ~처럼
자신의 배열 요소로 구성된 배열로 생각할 수 있습니다!
(Subsequence의 정확한 의미를 아시는 분은 댓글 부탁드립니다…)
components()에서 작동하지 않는 이유를 말하면 split()에서 작동한 것입니다!
그 이유는 EmptySubsequences 생략 그것 때문인 것 같아요!
components() 및 split()을 사용한 예제의 결과는 다음과 같습니다.
import Foundation
var nums = "1 2 3 4 5"
print(nums.components(separatedBy: " ")) // ("1", "2", "3", "", "", "5")
print(nums.split(separator: " ")) // ("1", "2", "3", "4", "5")
components()도 단어 “”를 생성하기 때문에 .map() 함수를 사용하여 강제로 int 유형으로 압축을 풀면 컴파일 오류가 발생합니다!
그런데 여기서 이상한 일이 벌어지는데…
import Foundation
var nums = "1 2 3 4 5"
print(nums.components(separatedBy: " ").map { Int($0)!
}) // 컴파일 에러
이렇게 실행하면 위에서 쓴 것처럼 컴파일러 오류가 발생합니다.
에러 자체는 이상하지 않지만,
구성요소 사용() 10818: 최소, 최대 문제를 풀 때
‘Wrong’ 또는 ‘Compile Error’가 아니라 ‘Timeout’입니다.
음 원래 백준이는 컴파일 오류를 타임아웃으로 취급하는데…
인터넷 검색 후 시간 복잡도에 차이가 없는 것 같지만 그 이유는 무엇입니까?
그래서 이렇게 함으로써 구성요소() 그리고 분할()차이를 식별하면 완성!
(원천)