Algorithm

โ˜… [BoJ][Python] 11655 ROT13

jihuSunbae 2024. 7. 25. 17:36

๋ชฉ์ฐจ

    ๐Ÿซก Overview

    ์ฒด๊ฐ ๋‚œ์ด๋„: โ˜…โ˜†โ˜†โ˜†โ˜†

    ์†Œ์š”์‹œ๊ฐ„: 20๋ถ„

    ๋ฌธ์ œ ๋ ˆ๋ฒจ: ๊ณจ๋“œ4 / ๋ฌธ์ œ ์œ ํ˜•: ๋‹จ์ˆœ๊ตฌํ˜„
    ํ’€์ด ์ƒํƒœ: ์Šค์Šค๋กœ ํ•ด๊ฒฐ
    ์ถ”ํ›„: ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ

     


    ๋ฌธ์ œ ๋งํฌ

    https://www.acmicpc.net/problem/11655

     

    ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

    ๋ฌธ์ œ ๋ถ„์„
    ROT13: ์˜์–ด ์•ŒํŒŒ๋ฒณ(๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž)๋งŒ 13๊ธ€์ž ๋ฐ€์–ด์„œ ๋งŒ๋“ค๊ธฐ
    
    ์ž…๋ ฅ: ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž, ์†Œ๋ฌธ์ž, ๊ณต๋ฐฑ, ์ˆซ์ž๋งŒ ์ฃผ์–ด์ง
    S์˜ ๊ธธ์ด๋Š” 100 ์ดํ•˜
    """์—ฃ์ง€ ์ผ€์ด์Šค
    - ๊ณต๋ฐฑ์œผ๋กœ๋งŒ ์ด๋ค„์ง„ ๋ฌธ์žฅ
    - ์ˆซ์ž๋กœ๋งŒ ์ด๋ค„์ง„ ๋ฌธ์žฅ 
    - ๊ณต๋ฐฑ+์ˆซ์ž๋กœ๋งŒ ์ด๋ค„์ง„ ๋ฌธ์žฅ 
    - ์•ŒํŒŒ๋ฒณ a,A,z,Z
    - ๋ฌธ์ž์™€ ์ˆซ์ž๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ๊ฒฝ์šฐ
    
    """

    ๋‚˜์˜ ์ฝ”๋“œ

    • ์•ŒํŒŒ๋ฒณ์—์„œ 13์„ ๋”ํ–ˆ์„ ๋•Œ, ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ 
      • ์˜ˆ๋ฅผ ๋“ค์–ด, Z(90)์—์„œ 13์„ ๊ฑด๋„ˆ๋›ฐ๋ฉด M(77)์ด ๋‚˜์˜ค๊ธธ ๋ฐ”๋ž€๋‹ค. 
        • ๊ทธ์น˜๋งŒ, ์•„์Šคํ‚ค ์ฝ”๋“œ ์ƒ์—์„œ Z(90)+13 = 103์œผ๋กœ g์™€ ๋งค์นญ๋œ๋‹ค. 
    • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ: A(65)~Z(90)์„ A(0)~A(25)๋กœ ๋งค์นญ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 
    0     1 2 .... 						25
    A(65) B C D E F G H I Z K L M N O P Q R S T U V W  X Y Z(90)

     

     

    • ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 
      • ๋Œ€๋ฌธ์ž์ผ ๋•Œ (ord ๊ฐ’์ด 65~90)
        • ๋จผ์ € ์‹œ์ž‘ ํฌ์ธํŠธ 65๋ฅผ ๋นผ์ค˜์„œ 0~25์˜ ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜ํ•จ (ord(c) -65 + 13)%26 +65
        • ์ดํ›„ 13์„ ๊ฑด๋„ˆ ๋›ฐ์–ด์คŒ (ord(c) -65 + 13)%26 +65
        • ๊ทธ๋ฆฌ๊ณ  A~Z ๋Œ€๋ฌธ์ž ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด %26์„ ์—ฐ์‚ฐํ•ด์ค€๋‹ค. (ord(c) -65 + 13)%26 +65 
        • ์›์ƒ ๋ณต๊ท€๋ฅผ ์œ„ํ•ด ๋‹ค์‹œ 65๋ฅผ ๋”ํ•ด์คŒ (ord(c) -65 + 13)%26 +65 
    if 65 <=ord(c) <= 90: # ๋Œ€๋ฌธ์ž์˜ ๊ฒฝ์šฐ 65~90
        next_num = (ord(c) -65 + 13)%26 +65 # ๋‹ค์Œ ์ˆซ์ž ๋ฒˆํ˜ธ

     

     

    ์ „์ฒด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

    S = list(input())
    for i, c in enumerate(S):
        # ์ˆซ์ž๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ ์ œ์™ธ
        if c.isdigit() or c == ' ': continue
        # ์•ŒํŒŒ๋ฒณ
        next_num = 0
        if 65 <=ord(c) <= 90: # ๋Œ€๋ฌธ์ž์˜ ๊ฒฝ์šฐ 65~90
            next_num = (ord(c) -65 + 13)%26 +65 # ๋‹ค์Œ ์ˆซ์ž ๋ฒˆํ˜ธ
        elif 97 <=ord(c) <= 122: # ์†Œ๋ฌธ์ž์˜ ๊ฒฝ์šฐ 97~122
            next_num = (ord(c) -97 + 13)%26 +97 # ๋‹ค์Œ ์ˆซ์ž ๋ฒˆํ˜ธ
        S[i] = chr(next_num)
    print(''.join(S))

     

    ์ฐธ๊ณ  ์ฝ”๋“œ

    • ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค์€ 13์„ ๋”ํ•ด๋„ ๋ฒ—์–ด๋‚˜๋Š” ๋ฒ”์œ„/ ์•„๋‹Œ ๋ฒ”์œ„๋กœ ๋‚˜๋ˆ ์„œ ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค!
    • ๊ฐ™์ด ์Šคํ„ฐ๋”” ํ•˜์‹œ๋Š” ์ˆ˜๋ฏผ๋‹˜์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค!
    # abcdefghijklm / nopqrstuvwxyz
    S = input()
    ans = []
    
    for i, c in enumerate(S):
        if 'a'<=c<='m' or 'A'<=c<='M':
            ans.append(chr(ord(c)+13))
        elif 'n'<=c<='z' or 'N'<=c<='Z':
            ans.append(chr(ord(c)-13))
        
        else:
            ans.append(c)
    
    print("".join(ans))

     

     


    ๋ฐฐ์šด ๊ฒƒ 

    - ์ž๊พธ ํ—ท๊ฐˆ๋ฆฌ๋Š”๋ฐ ์™ธ์šฐ์ž.. ์•ŒํŒŒ๋ฒณ์€ 26๊ฐœ..abcdefghijklmnopqrstuvwxyz

     


    ๋ ˆํผ๋Ÿฐ์Šค 

    • .... 

     

     

    #๋ฐฑ์ค€ #์ฝ”๋”ฉํ…Œ์ŠคํŠธ #์•Œ๊ณ ๋ฆฌ์ฆ˜ #python #ํŒŒ์ด์ฌ