MUKER_DEV with iOS

[swift] λ°±μ€€ - 1541번: μžƒμ–΄λ²„λ¦° κ΄„ν˜Έ λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/BAEKJOON

[swift] λ°±μ€€ - 1541번: μžƒμ–΄λ²„λ¦° κ΄„ν˜Έ

MUKER 2023. 1. 22. 15:40
 

1541번: μžƒμ–΄λ²„λ¦° κ΄„ν˜Έ

첫째 쀄에 식이 주어진닀. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으둜 이루어져 있고, κ°€μž₯ 처음과 λ§ˆμ§€λ§‰ λ¬ΈμžλŠ” μˆ«μžμ΄λ‹€. 그리고 μ—°μ†ν•΄μ„œ 두 개 μ΄μƒμ˜ μ—°μ‚°μžκ°€ λ‚˜νƒ€λ‚˜μ§€ μ•Šκ³ , 5μžλ¦¬λ³΄λ‹€

www.acmicpc.net

문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

문제 μ„€λͺ…

주어진 식에 κ΄„ν˜Έλ₯Ό μ³μ„œ 이 μ‹μ˜ 값을 μ΅œμ†Œλ‘œ λ§Œλ“€μ–΄λΌ.

 

κ·Έλ ‡λ‹€λ©΄ μ΅œλŒ€ν•œ -뒀에 값듀을 ν¬κ²Œλ§Œλ“€μ–΄μ€˜μ•Ό

μ΅œμ†Œκ°’μ΄ λ‚˜μ˜¬ 수 μžˆκ² μŠ΅λ‹ˆλ‹€.

 

 


 

λ‚˜μ˜ 풀이

let input = readLine()!.split(separator: "-")
var a = input.map { $0.split(separator: "+").map { Int($0)! }.reduce(0,+) }
let firstNum = a[0]
print(a.reduce(firstNum*2, -))

 

μ΅œλŒ€ν•œ -뒀에 값을 크게 λ§Œλ“€κΈ° μœ„ν•΄μ„œ

-λ₯Ό κΈ°μ€€μœΌλ‘œ 숫자λ₯Ό λ‚˜λˆ  배열을 λ§Œλ“€μ–΄ μ€¬μŠ΅λ‹ˆλ‹€.

그러면 λ°°μ—΄μ˜ 값은 μˆ«μžμ™€ +만 λ‚¨κ²Œ λ˜λŠ”λ°μš”

 

+도 κΈ°μ€€μœΌλ‘œ 작고 λ‚˜λˆ μ„œ 배열을 ν•˜λ‚˜ 더 λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€.

그러면 μ˜¨μ „νžˆ 숫자만 μžˆλŠ” 2차원배열이 λ˜λŠ”λ°μš”.

 

reduceλ₯Ό μ‚¬μš©ν•˜μ—¬ 2차원에 μžˆλŠ” Int값듀을 λ”ν•΄μ€¬μŠ΅λ‹ˆλ‹€.

 

그리고 λͺ¨λ“  값을 λΉΌμ£ΌκΈ° μœ„ν•΄ reduceλ₯Ό μ‚¬μš©ν–ˆλŠ”λ°μš”.

 

첫번째 값은 μ–‘μˆ˜μ΄λ©° 기쀀이기 λ•Œλ¬Έμ—

μ²«λ²ˆμ§Έκ°’ * 2λ₯Ό ν•˜μ—¬

reduce기쀀을 μž‘μ•„μ€¬μŠ΅λ‹ˆλ‹€.

 

 


 

κ°œμ„ λœ 풀이

let input = readLine()!.split(separator: "-")
var a = input.map { $0.split(separator: "+").map { Int($0)! }.reduce(0,+) }
var firstNum = a[0]
for i in (1..<a.endIndex) { firstNum -= a[i] }
print(firstNum)

 

첫번째 ν’€μ΄μ˜ λ§ˆμ§€λ§‰ 뢀뢄인

reduceλ₯Ό μ‚¬μš©ν•΄ λͺ¨λ“  값을 λΉΌμ£ΌλŠ” λΆ€λΆ„μ—μ„œ

첫번째 값을 계산해주기 μœ„ν•΄

κ³±ν•˜κΈ° 2둜 기쀀을 μž‘μ„ 수 μžˆμ§€λ§Œ 

직관적이지 μ•Šμ•„

 

reduceλ₯Ό λΉΌκ³  for문으둜 μ½”λ“œλ₯Ό μ§œλ΄€μŠ΅λ‹ˆλ‹€.