๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€1 ์Šคํƒ€ ์ˆ˜์—ด

by Fomagran ๐Ÿ’ป 2021. 11. 6.
728x90
๋ฐ˜์‘ํ˜•

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์Šคํƒ€ ์ˆ˜์—ด

 

programmers.co.kr


Solution

 

1. a์— ์žˆ๋Š” ์ˆซ์ž๋“ค์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์ค€๋‹ค.

 

์ˆซ์ž๋“ค์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์ฃผ๋Š” ์ด์œ ๋Š” ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆซ์ž๋กœ ์ •๋ ฌํ•˜์—ฌ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค.

 

func countNumbers(a:[Int]) -> [Int:Int] {
    var countDic:[Int:Int] = [:]
    for n in a {
        if countDic[n] == nil {
            countDic[n] = 1
        }else {
            countDic[n]! += 1
        }
    }
    return countDic
}

 

2. ๊ฐ ์ˆซ์ž๋“ค์˜ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๊ฐ ์ˆซ์ž๋“ค์˜ ์•ž ๋’ค๋ฅผ ๋น„๊ตํ•ด์ค๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ์•ž๊ณผ ๋’ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ ํ˜„์žฌ ์ˆซ์ž์™€ ๊ฐ™์ง€ ์•Š์€ ์ˆซ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด +2 ํ•ด์ค๋‹ˆ๋‹ค.

 

๊ทธ ๋‹ค์Œ ํ•ด๋‹น ์ˆซ์ž๋ฅผ ํ˜„์žฌ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.

 

func findLongSubsequence(n:Int,a:[Int]) -> Int {
    var numbers = a
    var length:Int = 0
    if a[0] == n && a[1] != n {
        length += 2
        numbers[1] = n
    }
    for i in 1..<numbers.count-1 {
        if a[i] == n {
            if numbers[i-1] != n {
                numbers[i-1] = n
                length += 2
            }else if numbers[i+1] != n  {
                numbers[i+1] = n
                length += 2
            }
        }
    }
    if numbers[a.count-1] == n && numbers[a.count-2] != n {
        length += 2
    }
    return length
}

 

3. ๊ฐ ์ˆซ์ž๋“ค์˜ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์‹œ๊ฐ„ ์ดˆ๊ณผ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋” ๋งŽ์€ ๊ฒƒ์œผ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ ์ˆœํ™˜์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ answer๋ณด๋‹ค ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜ * 2๊ฐ€ ๋” ์ž‘๋‹ค๋ฉด answer๋ณด๋‹ค ๋” ํด ์ˆ˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ  ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€์ค๋‹ˆ๋‹ค.

 

func findMaxLength(a:[Int]) -> Int {
    var answer:Int = 0
    let sortCounts = countNumbers(a: a).sorted{$0.value > $1.value}
    for dic in sortCounts {
        if dic.value * 2 < answer { continue }
        let length = findLongSubsequence(n:dic.key, a:a)
        answer = max(answer,length)
    }
    return answer
}

Source Code

 


P.S

 

์ฒ˜์Œ์—” ๊ฐ€์žฅ ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒƒ์˜ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค.

 

๊ทผ๋ฐ ๊ณ„์† ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 28๋ฒˆ์ด ํ‹€๋ ธ๋‹ค...

 

๊ทธ๋ž˜์„œ ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ํ†ตํ•ด ๋ดค๋”๋‹ˆ ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ a๊ฐ€ ์ฃผ์–ด์กŒ์„๊ฒฝ์šฐ -> [4, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 3]

 

1์ด ๊ฐ€์žฅ ๋งŽ์ง€๋งŒ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด์€ 0์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค...

 

๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ํ™•์ธํ•ด๋ด์•ผ ํ–ˆ์—ˆ๋‹ค..

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€