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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์กฐ์ด์Šคํ‹ฑ Swift

by Fomagran ๐Ÿ’ป 2020. 4. 9.
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA

์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ–ฒ - ๋‹ค์Œ ์•ŒํŒŒ๋ฒณ โ–ผ - ์ด์ „ ์•ŒํŒŒ๋ฒณ (A์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด Z๋กœ) โ—€ - ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ (์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ์ปค์„œ) โ–ถ - ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ JAZ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์œ„๋กœ 9๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ J๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. - ์กฐ์ด์Šคํ‹ฑ์„ ์™ผ์ชฝ์œผ๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ ์ปค์„œ๋ฅผ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. - ๋งˆ์ง€๋ง‰ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์•„๋ž˜๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ Z๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 11๋ฒˆ ์ด๋™์‹œ์ผœ "JAZ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ๊ฐ€ ์ตœ์†Œ ์ด๋™์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ด๋ฆ„ name์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ด๋ฆ„์— ๋Œ€ํ•ด ์กฐ์ด์Šคํ‹ฑ ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • name์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • name์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

name return
JEROEN 56
JAN 23

ํ’€์ด: ์šฐ์„  ์ƒํ•˜๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ• A~M๊นŒ์ง„ ์œ„๋กœ ์˜ฌ๋ ค์•ผ ๋” ์ž‘๊ณ  O~Z๊นŒ์ง€๋Š” ์•„๋ž˜๋กœ ๋‚ด๋ ค์•ผ ๋” ์ž‘๋‹ค. (N์€ ๊ฐ€์šด๋ฐ์ด๋ฏ€๋กœ ์ƒ๊ด€์—†๋‹ค.)

๊ทธ๋ฆฌ๊ณ  ์ขŒ์šฐ๋ฅผ ์ตœ์†Œ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 

1.A์˜ ๊ฐ€์žฅ ํฐ ์ง‘๋‹จ์ด ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ(1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ~) ex) BAAAAAABB

2.A์˜ ๊ฐ€์žฅ ํฐ ์ง‘๋‹จ์ด ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒฝ์šฐ ex)BBAAAAA

3.A์˜ ๊ฐ€์žฅ ํฐ ์ง‘๋‹จ์ด ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” ๊ฒฝ์šฐex)BBAAAAAB

 

1์˜ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์ผ ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์™ผ์ชฝ์œผ๋กœ๋งŒ ์›€์ž‘์—ฌ์„œ A์ง‘๋‹จ์ด ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€ ์›€์ง์ธ ์ˆ˜์™€ ๊ฐ ์•ŒํŒŒ๋ฒณ์˜ ์ƒํ•˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

2์˜ ๊ฒฝ์šฐ ์™ผ์ชฝ์œผ๋กœ ์›€์ง์ด ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ์œผ๋กœ๋งŒ ์›€์ง์—ฌ A์ง‘๋‹จ์ด ๋‚˜์˜ค๊ธฐ ์ „๊นŒ์ง€ ์›€์ง์ธ ์ˆ˜์™€ ๊ฐ ์•ŒํŒŒ๋ฒณ์˜ ์ƒํ•˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

3์˜ ๊ฒฝ์šฐ๋Š” A์ง‘๋‹จ ์ „๊นŒ์ง€์™€ ํ›„ ์ค‘์— ๋” ์งง์€ ๊ณณ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ex) BBAAAAABBBBBBB <- ์ „์ด ๋” ์งง์€ ๊ฒฝ์šฐ BBBBBAAAAAAABB <- ํ›„๊ฐ€ ๋” ์งง์€ ๊ฒฝ์šฐ

3์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์›€์ง์˜€์„ ๋•Œ๋ณด๋‹ค ๋” ์งง์€๊ณณ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋˜๋Œ์•„์™€์„œ A์ง‘๋‹จ ์ „๊นŒ์ง€ ์›€์ง์ธ ๊ฒƒ๊ณผ ๋น„๊ต๋ฅผ ํ•ด์„œ 

๋” ์ž‘์€ ์ˆ˜๊ฐ€ ์•ŒํŒŒ๋ฒณ์˜ ์ƒํ•˜ ์ˆ˜์™€ ๋”ํ•ด์ง€๊ฒŒ ๋œ๋‹ค.

ex) BBBBBBBAAABBBBBBB <- A์ง‘๋‹จ์ด ๊ฐ€์šด๋ฐ์— ์žˆ๊ธดํ•˜์ง€๋งŒ ํ•œ ์ชฝ์œผ๋กœ ๊ฐ”๋‹ค๊ฐ€ ๋˜๋Œ์•„์˜ค๋Š” ๊ฒƒ๋ณด๋‹ค ๊ทธ๋ƒฅ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ญ‰ ๊ฐ€๋Š”๊ฒŒ ๋” ์งง๋‹ค.

ex) BBAAAAAAABB <- A์ง‘๋‹จ์ด ๊ฐ€์šด๋ฐ์— ์žˆ๊ณ  A์ง‘๋‹จ ์ „๊นŒ์ง€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์™ผ์ชฝ์œผ๋กœ A์ง‘๋‹จ ์ „๊นŒ์ง€ ์›€์ง์ด๋ฉด ํ•œ ์ชฝ์œผ๋กœ ์ญ‰ ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์งง๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
func solution(_ name:String-> Int {
    var answer = 0
    var start = 0
    var zero = [[Int]]()
    let n = name.utf8.map{$0-64}
    for i in 0..<n.count{
        if n[i] < 15 {
                answer += Int(n[i]) - 1
        }else{
            answer += 27 - Int(n[i])
        }
    }
    if name.contains("A"){
        if name == "A" {
            return 0
        }
    for i in 0..<n.count{
        if n[i] == 1 && i > 0{
            if start == 0 {
            start = i+1
            }
        }else{
            if start != 0 {
                zero.append([start,i])
                start = 0
            }else{
                continue
            }
        }
    }
    if start != 0 {
    }
    let max = zero.map{$0.reduce(0){$1-$0}}
    for i in 0...max.count-1{
        if max[i] == max.max(){
            if zero[i][0== 2 {
               answer += n.count - zero[i][1]
                break
            }else if zero[i][1== n.count{
                answer += zero[i][0- 2
 
            }else{
                let middleanswer = answer + name.count - 1
                if zero[i][0]-1 > name.count - zero[i][1]{
                    answer += (name.count - zero[i][1]) * 2 + zero[i][0- 2
                }else{
                    answer += (zero[i][0- 2* 2 + name.count - zero[i][1]
                }
 
                if answer > middleanswer {
                    return middleanswer
                }
            }
 
        }
    }
        return answer
    }else{
        return answer + name.count-1
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€