[๐Ÿ“ iOS TIL] #14 ... Algorithm ๋ฌธ์ œ ํ’€์ด ๋ฐ ๊ฐ„๋‹จํ•œ Counter ์•ฑ

TaeUkยท2024๋…„ 3์›” 19์ผ
0

๐ŸŽ iOS TIL

๋ชฉ๋ก ๋ณด๊ธฐ
13/18
post-thumbnail

[level 1] ๋ถ€์กฑํ•œ ๊ธˆ์•ก ๊ณ„์‚ฐํ•˜๊ธฐ - 82612

  • ๋ฌธ์ œ ์„ค๋ช…
    ์ƒˆ๋กœ ์ƒ๊ธด ๋†€์ด๊ธฐ๊ตฌ๋Š” ์ธ๊ธฐ๊ฐ€ ๋งค์šฐ ๋งŽ์•„ ์ค„์ด ๋Š์ด์งˆ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋†€์ด๊ธฐ๊ตฌ์˜ ์›๋ž˜ ์ด์šฉ๋ฃŒ๋Š” price์› ์ธ๋ฐ, ๋†€์ด๊ธฐ๊ตฌ๋ฅผ N ๋ฒˆ ์งธ ์ด์šฉํ•œ๋‹ค๋ฉด ์›๋ž˜ ์ด์šฉ๋ฃŒ์˜ N๋ฐฐ๋ฅผ ๋ฐ›๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ฒ˜์Œ ์ด์šฉ๋ฃŒ๊ฐ€ 100์ด์—ˆ๋‹ค๋ฉด 2๋ฒˆ์งธ์—๋Š” 200, 3๋ฒˆ์งธ์—๋Š” 300์œผ๋กœ ์š”๊ธˆ์ด ์ธ์ƒ๋ฉ๋‹ˆ๋‹ค.
    ๋†€์ด๊ธฐ๊ตฌ๋ฅผ count๋ฒˆ ํƒ€๊ฒŒ ๋˜๋ฉด ํ˜„์žฌ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธˆ์•ก์—์„œ ์–ผ๋งˆ๊ฐ€ ๋ชจ์ž๋ผ๋Š”์ง€๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.
    ๋‹จ, ๊ธˆ์•ก์ด ๋ถ€์กฑํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ return ํ•˜์„ธ์š”.
import Foundation

func solution(_ price:Int, _ money:Int, _ count:Int) -> Int64{
    var val = (1...count).map{ $0 * price }.reduce(0, +)
    
    return Int64(val > money ? val - money : 0)
}

ํ•œ๋™์•ˆ Swift ๋ฌธ๋ฒ• ๊ฐ•์˜์™€ ๊ณผ์ œ ๊ตฌํ˜„์—๋งŒ ์‹ ๊ฒฝ์“ฐ๋‹ค๋ณด๋‹ˆ, ์˜ค๋žœ๋งŒ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜์˜€๋‹ค.

์—ฌ๋Ÿฌ ๊ฐ•์˜์™€ ๊ณผ์ œ ์‹ค์Šต์„ ๋•๋ถ„์—, ํด๋กœ์ €์™€ ๊ณ ์ฐจํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์ด ๋”์šฑ ํŽธํ•˜๊ฒŒ ๋Š๊ปด์ง„๋‹ค.

๋ฌธ์ œ ์„ค๋ช…์„ ๋ณธ ์ˆœ๊ฐ„, ๋ฐ”๋กœ map์œผ๋กœ ํšŸ์ˆ˜์— ๋”ฐ๋ฅธ ๋น„์šฉ์„ ์ถ”๋ก ํ•˜๊ณ  ์ดํ›„ reduce๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•˜์—ฌ ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค!

ํ™•์‹คํžˆ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋ช‡ ๋ฒˆ ์‹ค์Šตํ•ด๋ณด๋‹ˆ, ์กฐ๊ธˆ์”ฉ ์„ฑ์žฅํ•˜๋Š”๊ฑธ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค!

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ Int64 ํƒ€์ž…์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ์— solution() ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ๋ฌธ์ œ ์กฐ๊ฑด์— ์•Œ๋งž๋Š” ๋‹ต์„ ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.


[iOS] Counter App โฑ๏ธ

์ด์ „๊นŒ์ง€ ์ˆ˜๊ฐ•ํ•˜๋˜ ๋ฌธ๋ฒ• ์ฃผ์ฐจ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๊ณ , ์ด๋ฒˆ ์ฃผ๋ถ€ํ„ฐ๋Š” iOS ์•ฑ ๊ฐœ๋ฐœ ์ž…๋ฌธ ์ฃผ์ฐจ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๋‹ค!

๊ฐ•์˜์—์„œ Xcode๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์•ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •๊ณผ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์— ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค!

๊ฐ•์˜๋ฅผ ๋‹ค ๋“ฃ๊ณ  ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ข…ํ•ฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์นด์šด๋” ์•ฑ ๋งŒ๋“ค๊ธฐ๋ผ๋Š” ์ž‘์€ ๊ณผ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

โœ๏ธ App ๊ตฌํ˜„ ์š”๊ตฌ์‚ฌํ•ญ

  • ๋ ˆ์ด์•„์›ƒ ์š”๊ตฌ์‚ฌํ•ญ

    1. UILabel์ด ๊ฐ€์šด๋ฐ ์œ„์น˜ํ•˜๊ฒŒ ํ•ด ์ฃผ์„ธ์š”.
    2. UILabel์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋‹จ์—๋Š” ๊ฐ์†Œ ๋ฒ„ํŠผ, ์•„๋ž˜์—๋Š” ์ฆ๊ฐ€ ๋ฒ„ํŠผ์„ ์œ„์น˜์‹œ์ผœ ์ฃผ์„ธ์š”.
    3. UILabel๊ณผ UIButton์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์€ 16px๋กœ ์„ค์ •ํ•ด ์ฃผ์„ธ์š”.
    4. AutoLayout์„ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”.

  • ๋กœ์ง ์š”๊ตฌ์‚ฌํ•ญ

    1. count์˜ ์‹œ์ž‘์€ 0์œผ๋กœ ์‹œ์ž‘ํ•ด ์ฃผ์„ธ์š”.
    2. ๊ฐ์†Œ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, -1์”ฉ ๊ฐ์†Œ์‹œ์ผœ UILabel์— ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”.
    3. ์ฆ๊ฐ€๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, +1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ UILabel์— ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”.

simple Counter App โฑ๏ธ

ํ•ด๋‹น ๊ณผ์ œ๋„ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์ดˆ์ ์„ ๋‘๊ณ  ์„ค๊ณ„ํ•ด๋ณด์•˜๋‹ค!

์šฐ์„  ๊ณผ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์š”์†Œ ์ค‘ ๋ ˆ์ด์•„์›ƒ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ถฉ์กฑ์‹œ์ผœ์ฃผ์—ˆ๋‹ค.

  • Xcode Swift Storyboard

Swift Storyboard์— Drag&Drop์œผ๋กœ ์‚ฌ์šฉํ•  Label๊ณผ Button์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๊ณ , AutoLayout์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ๊ฐ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ ๋ฐฐ์น˜ํ•˜์˜€๋‹ค.

// ViewController.swift

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var CounterLabel: UILabel!
    
    private var countData: Int = 0
    
    override func viewDidLoad() {
        super.viewDidLoad()
        resetDisplay()
    }

    @IBAction func counterAdd(_ sender: Any) {
        self.countData += 1
        resetDisplay()
    }
    
    @IBAction func counterSub(_ sender: Any) {        
    	self.countData -= 1
        resetDisplay()
    }
    
    func resetDisplay() {
        self.CounterLabel.text = "\(self.countData)"
    }
}

๋‹ค์Œ์œผ๋กœ ๊ฐ ์š”์†Œ๋ฅผ ViewController์—์„œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก, Drag&Drop์œผ๋กœ IBOutlet๊ณผ IBAction์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ฆ๊ฐ€, ๊ฐ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด countData์˜ ๊ฐ’์ด 1 ์”ฉ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋นผ์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฐ’์„ CounterLabel์— ๋ฌธ์ž๋ณด๊ฐ„๋ฒ•์„ ํ†ตํ•ด ์ €์žฅํ•˜์—ฌ ํ•จ์ˆ˜ํ™”์‹œ์ผฐ๋‹ค.

๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ฐ’์ด ์ˆ˜์ •๋˜๋ฉด, ๋™์‹œ์— CounterLabel๋„ ์ €์žฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด Count๋ฅผ ์ฆ๊ฐ€ ๋˜๋Š” ๊ฐ์†Œ์‹œ์ผฐ๋‹ค.

๋งˆ๋ฌด๋ฆฌ! ๐Ÿ›Ž๏ธ

๋ง‰์ƒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์žˆ์„ ๋•Œ๋Š” ๊ฐ„๋‹จํ•ด๋ณด์˜€์ง€๋งŒ, ์‹ค์ œ๋กœ ๋งˆ์šฐ์Šค์™€ ํ‚ค๋ณด๋“œ๋ฅผ ์›€์ง์—ฌ ๋ฌด์–ธ๊ฐ€ ๋งŒ๋“ค๋ ค๊ณ  ์‰ฝ์ง€ ์•Š์•„ ๋‹นํ™ฉํ–ˆ๋‹ค...๐Ÿฅฒ

๊ทธ๋ž˜๋„ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์กฐ๊ธˆ์”ฉ ๊ตฌํ˜„ํ•ด๋ณด๋‹ˆ ํฅ๋ฏธ๊ฐ€ ๋”์šฑ ๋ถ™๋Š”๊ฑฐ ๊ฐ™๋‹ค!!

0๊ฐœ์˜ ๋Œ“๊ธ€