-
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์คํจ์จ Level1 (Swift)Algorithm 2022. 2. 1. 03:17
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์คํจ์จ
์คํจ์จ ์ํผ ๊ฒ์ ๊ฐ๋ฐ์ ์ค๋ ๋ฆฌ๋ ํฐ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ๊ทธ๋ ๊ฐ ๋ง๋ ํ๋์ฆ ์ค์ฒ์ฑ์ด ๋์ฑ๊ณต์ ๊ฑฐ๋์ง๋ง, ์์ฆ ์ ๊ท ์ฌ์ฉ์์ ์๊ฐ ๊ธ๊ฐํ ๊ฒ์ด๋ค. ์์ธ์ ์ ๊ท ์ฌ์ฉ์์ ๊ธฐ์กด ์ฌ์ฉ์ ์ฌ์ด์ ์ค
programmers.co.kr
๋ฌธ์ ํ์ด
- ํธ๋ ๋ฐ ์ ๋ง ์ค๋ ๊ฑธ๋ฆฐ ๋ฌธ์ ... ๋์ถฉ ๋จธ๋ฆฟ์์ผ๋ก ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ , while ๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค.
- ์ฒซ๋ฒ์งธ ์๊ฐ
- ๋จผ์ ์ ๋ ฅ์ผ๋ก ์ค๋ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ผ์ง!
- ๊ทธ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด์์ผ๋, ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ฒดํฌํ๋ฉด ๋๊ฒ ๋ค!
- [1, 2, 2, 2, 3, 3, 4, 6]์ ์์๋ก ๋ค์. 1๋จ๊ณ์ ๋จธ๋ฌผ๋ฌ์๋ ์ฌ๋์ ๋ฐฐ์ด์ 0๋ฒ์งธ ์ธ๋ฑ์ค 1๋ช ์ด๋ค. 2๋จ๊ณ์ ๋จธ๋ฌผ๋ฌ์๋ ์ฌ๋์ ๋ฐฐ์ด์ 1, 2, 3๋ฒ์งธ ์ธ๋ฑ์ค์ 3๋ช ์ด๋ค. 3๋จ๊ณ๋ ๋ฐฐ์ด์ 4, 5๋ฒ์งธ ์ธ๋ฑ์ค์ 2๋ช ์ด๋ค. 4๋จ๊ณ๋ ๋ฐฐ์ด์ 6๋ฒ์งธ ์ธ๋ฑ์ค์ 1๋ช ์ด๋ค. 5๋จ๊ณ๋ ์๋ฌด๋ ์๋ค. 6๋จ๊ณ๋ ์ด๋ฏธ 5๋จ๊ณ๋ฅผ ํต๊ณผํ๋ค๋ ๋ป.
- ์์ ๊ฒฝ์ฐ๋ฅผ while ๋ฌธ์์ ํ๋ํ๋ ์ฒ๋ฆฌํ๋ ค๋ ๋จธ๋ฆฌ๊ฐ ํฐ์ง๊ณ .. ํ๋์ ์์ ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ๋ค๋ฅธ ์์ ๊ฐ ํฐ์ง๊ณ ๋ฅผ ๋ฐ๋ณต. ๊ณ์ ์ด๋ด๋ฐ์๋ for๋ฌธ์ผ๋ก ์ฒ๋ฆฌํ์..! ⇒ ๋๋ฒ์งธ ์๊ฐ
- ๋๋ฒ์งธ ์๊ฐ
- ์ด์ค for๋ฌธ์ ์ด์ฉํด์ ํ๋ํ๋ ์ฒ๋ฆฌํ์
- ์คํ ์ด์ง ์๋งํผ for๋ฌธ์ ๋๋ฆฌ๋๋ฐ, ๊ฐ ์คํ ์ด์ง ๋ณ๋ก ๋ for๋ฌธ์ ๋๋ฆฐ๋ค.
- N = 5, stages = [1, 2, 2, 2, 3, 3, 4, 6]
- currentStageUserCount = ํด๋น ์คํ ์ด์ง์ ์์ง ๋จธ๋ฌผ๋ฌ ์๋ ์ ์ ์
- userCount = ์คํ ์ด์ง๋ฅผ ํ๋ ์ดํ ์ ์ ์ (์์ง ํด๋น ์คํ ์ด์ง๋ฅผ ์งํ ์ค์ธ ์ ์ ๋ ํฌํจ)
- ์คํจ์จ = currentStageUserCount / userCount
์คํ ์ด์ง ์คํ ์ด์ง ๋ฐฐ์ด currentStageUserCount userCount ์คํจ์จ (currentStageUserCount / userCount) ์คํ ์ด์ง 1 ⇒ ๋ฐฐ์ด์์ 1๋ง ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 1 8 1/8 ์คํ ์ด์ง 2 ⇒ ๋ฐฐ์ด์์ 2๋ง ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 3 8 - 1 = 7 3/7 ์คํ ์ด์ง 3 ⇒ ๋ฐฐ์ด์์ 3๋ง ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 2 7 - 3 = 4 2/4 ์คํ ์ด์ง 4 ⇒ ๋ฐฐ์ด์์ 4๋ง ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 1 4 - 2 = 2 1/2 ์คํ ์ด์ง 5 ⇒ ๋ฐฐ์ด์์ 5๋ง ์ฒดํฌ [1, 2, 2, 2, 3, 3, 4, 6] 0 1 0/1 = 0 - ์์ ๊ฐ์ด ํ๋ฅผ ๋ง๋ค๊ณ , for ๋ฌธ์ ํตํด์ ๊ตฌํํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ถํ๋ ํ ์คํธ 7์ ์ ์ธํ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํต๊ณผ..! ํ ์คํธ 7์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ๋ค๋ฅธ ๋ถ๋ค์ ์ง๋ฌธ์ ์ฐพ์๋ดค๋๋ฐ, 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ๋ฅผ ์กฐ์ฌํ๋ผ๋ ๋ง์ด ์์ด์ ๊ทธ ๋ถ๋ถ์ ๋ฐ๋ก ์์ธ์ฒ๋ฆฌํด์ฃผ์๋ค. ๊ทธ๋ฌ๋๋ ์ ๋ต..!
// ์์ ์ result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount) // ์์ ํ if currentStageUserCount == 0 { result[resultIndex].1 = 0 } else { result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount) } - ๊ณ ์ Level1์ด์ง๋ง,, ์๋ฆฐ์ด์ธ ๋๋ ์ด๊ฑธ ํธ๋๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค..๐ญ ๊ทธ๋๋ ์ค์ค๋ก ํ์๋ค๋ ๊ฒ์ ์์๋ฅผ ๋๊ธฐ๋ก!!!!! ์ด๋ ๊ฒ ๊พธ์คํ ํ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ ๋๊ฒ ์ง,,๐ฅบ ์๊ณ ๋ฆฌ์ฆ ๋งค์ผ๋งค์ผ ๋ฟ์ ๋ฟ์
์์ค ์ฝ๋ (Swift)
// // แแ ตแฏแแ ขแแ ฒแฏ.swift // Programmers // // Created by ์์ํฌ on 2022/02/01. // import Foundation func solution(_ N:Int, _ stages:[Int]) -> [Int] { var result = [(Int, Double)]() for i in 0..<N { result.append((i + 1, 0.0)) } let userState = stages.sorted() // 1 2 2 2 3 3 4 6 var userCount = stages.count // ์คํ ์ด์ง๋ฅผ ํ๋ ์ดํ ์ ์ ์ (์์ง ํด๋น ์คํ ์ด์ง๋ฅผ ์งํ ์ค์ธ ์ ์ ๋ ํฌํจ) var currentStageUserCount = 0 // ํด๋น ์คํ ์ด์ง์ ์์ง ๋จธ๋ฌผ๋ฌ ์๋ ์ ์ ์ var stateIndex = 0 // userState ๋ฐฐ์ด์์ ์ฌ์ฉํ ์ธ๋ฑ์ค var resultIndex = 0 // result ๋ฐฐ์ด์์ ์ฌ์ฉํ ์ธ๋ฑ์ค for i in 1...N { // ์คํ ์ด์ง ์ฒดํฌ for j in stateIndex..<stages.count { if userState[j] == i { currentStageUserCount += 1 stateIndex += 1 } } if currentStageUserCount == 0 { result[resultIndex].1 = 0 } else { result[resultIndex].1 = Double(currentStageUserCount) / Double(userCount) } userCount -= currentStageUserCount // ์ ์ ์ ๊ตฌํ๊ธฐ resultIndex += 1 // ๋ค์ ์คํ ์ด์ง currentStageUserCount = 0 // ์ด๊ธฐํ } return result.sorted { $0.1 > $1.1 }.map { $0.0 } }'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ Level1 (Swift) (0) 2022.02.06 [Algorithm] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Swift/C++) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์์ ์ํธ Level 1 (Swift) (0) 2022.01.31 [Algorithm] ๋ฐฑ์ค 1157 ๋จ์ด ๊ณต๋ถ (Swift/C++) (0) 2022.01.31 [Algorithm] ๋ฐฑ์ค 10809 ์ํ๋ฒณ ์ฐพ๊ธฐ(Swift/C++) (0) 2022.01.30