๋‚ด ์ธ์ƒ์—์„œ ๋ฏฟ์„ ๊ฑด ์˜ค์ง ๋‚˜ ์ž์‹ ๋ฟ!

The only one you can truly trust is yourself.

๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[PCCP ๋ชจ์˜๊ณ ์‚ฌ#1] ์œ ์ „๋ฒ•์น™ (์Šคํƒ)

๐ŸŽฎinspirer9 2023. 3. 7. 13:58
728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

๋ฉ˜๋ธ์€ ์™„๋‘์ฝฉ์„ ์ด์šฉํ•˜์—ฌ 7๋…„๊ฐ„ ์‹คํ—˜ํ•œ ๊ฒฐ๊ณผ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋ฒ•์น™์„ ๋ฐœ๊ฒฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  1. ๋‘ฅ๊ทผ ์™„๋‘ ์ˆœ์ข…(RR)์„ ์ž๊ฐ€ ์ˆ˜๋ถ„, ์ฆ‰ ๊ฐ™์€ ์œ ์ „์ž๋ผ๋ฆฌ ๊ต๋ฐฐํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ ์„ธ๋Œ€์— ๋‘ฅ๊ทผ ์™„๋‘ ์ˆœ์ข… ํ˜•์งˆ๋งŒ ๋‚˜ํƒ€๋‚œ๋‹ค.
  2. ์ฃผ๋ฆ„์ง„ ์™„๋‘ ์ˆœ์ข…(rr)์„ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ ์„ธ๋Œ€์— ์ฃผ๋ฆ„์ง„ ์™„๋‘ ์ˆœ์ข… ํ˜•์งˆ๋งŒ ๋‚˜ํƒ€๋‚œ๋‹ค.
  3. ๋‘ ์ˆœ์ข…์„ ๊ต๋ฐฐํ•œ ์žก์ข…(Rr)์„ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•  ๊ฒฝ์šฐ, ๋‹ค์Œ ์„ธ๋Œ€์˜ ํ˜•์งˆ์€ RR:Rr:rr=1:2:1์˜ ๋น„์œจ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ์กฐ)

๋ฉ˜๋ธ์˜ ๋ฒ•์น™์„ ๊ณต๋ถ€ํ•œ ์ง„์†ก์ด๋Š”, ์ง์ ‘ ์™„๋‘์ฝฉ์˜ ์ž๊ฐ€ ์ˆ˜๋ถ„ ์‹คํ—˜์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง„์†ก์ด์˜ ์‹คํ—˜์—์„œ ์™„๋‘์ฝฉ ํ•œ ๊ฐœ๋ฅผ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ์™„๋‘์ฝฉ์€ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•ด์„œ ์ •ํ™•ํžˆ 4๊ฐœ์˜ ์™„๋‘์ฝฉ ํ›„์†์„ ๋‚จ๊ธด๋‹ค.
  2. ์žก์ข… ์™„๋‘์ฝฉ(Rr)์€ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•ด์„œ ์ฒซ์งธ๋Š” RR, ๋‘˜์งธ์™€ ์…‹์งธ๋Š” Rr, ๋„ท์งธ๋Š” rr ํ˜•์งˆ์˜ ํ›„์†์„ ๋‚จ๊ธด๋‹ค.
  3. ์ˆœ์ข… ์™„๋‘์ฝฉ(RR, rr)์€ ์ž๊ฐ€ ์ˆ˜๋ถ„ํ•ด์„œ ์ž์‹ ๊ณผ ๊ฐ™์€ ํ˜•์งˆ์˜ ํ›„์†์„ ๋‚จ๊ธด๋‹ค.

์žก์ข… ์™„๋‘์ฝฉ(Rr) 1๋Œ€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ ๊ฐ€๊ณ„๋„๋กœ ๊ทธ๋ ค๋ณด๋ฉด ๊ทธ๋ฆผ 2์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ง„์†ก์ด๋Š” ์ด๋Ÿฌํ•œ ์™„๋‘์ฝฉ์˜ ์ž๊ฐ€ ์ˆ˜๋ถ„ ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์„ธ๋Œ€๋ฅผ ๊ฑฐ๋“ญํ• ์ˆ˜๋ก, ์™„๋‘์ฝฉ์˜ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ ธ ๋ชจ๋“  ๊ฐ€๊ณ„๋„๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ์ง„์†ก์ด๋Š” ๊ฐ€๊ณ„๋„๋ฅผ ์ „๋ถ€ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ ๋Œ€์‹ , ์™„๋‘์ฝฉ์˜ ์„ธ๋Œ€์™€ ํ•ด๋‹น ์„ธ๋Œ€์—์„œ ๋ช‡ ๋ฒˆ์งธ ๊ฐœ์ฒด์ธ์ง€๋ฅผ ์•Œ๋ฉด ํ˜•์งˆ์„ ๋ฐ”๋กœ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ์„ธ๋Œ€์—์„œ ๋งจ ์™ผ์ชฝ ๊ฐœ์ฒด๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ, ...๊ฐœ์ฒด๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ทธ๋ฆผ 2์—์„œ 2์„ธ๋Œ€์˜ ๋„ค ๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์€ "rr"์ด๋ฉฐ, 3์„ธ๋Œ€์˜ 9๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์€ "RR"์ž…๋‹ˆ๋‹ค.

ํ˜•์งˆ์„ ์•Œ๊ณ  ์‹ถ์€ ์™„๋‘์ฝฉ์˜ ์„ธ๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ n๊ณผ, ํ•ด๋‹น ์™„๋‘์ฝฉ์ด ์„ธ๋Œ€ ๋‚ด์—์„œ ๋ช‡ ๋ฒˆ์งธ ๊ฐœ์ฒด์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ p๊ฐ€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด queries์˜ ์›์†Œ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. queries์— ๋‹ด๊ธด ์ˆœ์„œ๋Œ€๋กœ n์„ธ๋Œ€์˜ p ๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์„ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์— ๋‹ด์•„์„œ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 1 ≤ queries์˜ ๊ธธ์ด(์ฟผ๋ฆฌ์˜ ๊ฐœ์ˆ˜) ≤ 5
  • queries์˜ ์›์†Œ๋Š” [n, p] ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
    • 1 ≤ n ≤ 16
    • 1 ≤ p ≤ 4n-1

์ž…์ถœ๋ ฅ ์˜ˆ

queries result
[[3, 5]] ["RR"]
[[3, 8], [2, 2]] ["rr", "Rr"]
[[3, 1], [2, 3], [3, 9]] ["RR", "Rr", "RR"]
[[4, 26]] ["Rr"]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 3์„ธ๋Œ€์˜ 5๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด RR์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 3์„ธ๋Œ€์˜ 8๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด rr์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 2์„ธ๋Œ€์˜ 2๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด Rr์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 3์„ธ๋Œ€์˜ 1๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด RR์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 2์„ธ๋Œ€์˜ 3๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด Rr์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณธ๋ฌธ์˜ ๊ฐ€๊ณ„๋„๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด 3์„ธ๋Œ€์˜ 9๋ฒˆ์งธ ๊ฐœ์ฒด์˜ ํ˜•์งˆ์ด RR์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #4

  • 4์„ธ๋Œ€์˜ 26๋ฒˆ์งธ ๊ฐœ์ฒด๋Š” 3์„ธ๋Œ€์˜ 7๋ฒˆ์งธ ๊ฐœ์ฒด(Rr)์˜ ๋‘˜์งธ ํ›„์†์œผ๋กœ, ํ˜•์งˆ์€ Rr์ด ๋ฉ๋‹ˆ๋‹ค.

ํ’€์ด

  • gen = 1์ผ ๋•Œ, Rr
  • gen = 2์ผ ๋•Œ, ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜[๊ฐœ์ฒด๋ฒˆํ˜ธ-1]
    • ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜ = [RR,Rr,Rr,rr]
  • gen = 3์ผ ๋•Œ, 3์„ธ๋Œ€ ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜[๊ฐœ์ฒด๋ฒˆํ˜ธ-1]
    • ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜ = [RR,RR,RR,RR] [RR,Rr,Rr,rr] [RR,Rr,Rr,rr] [rr,rr,rr,rr]
  • ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค๋ฉด...
    • 1<= n <= 16, 4์˜ 16์ œ๊ณฑ....
    • 1<= p <= 4**(n-1) ใ…Žใ…Žใ…Ž
    • ๋ฏธ๋ฆฌ ๋ชป ๋งŒ๋“ฌ. ๊ทœ์น™์„ ์•Œ์•„๋‚ด์•ผ ํ•˜๋„ค...
  • ๊ทœ์น™์€ ์‹ฌํ”Œํ•ด๋ณด์ธ๋‹ค.
    • gen > 2์ผ ๋•Œ, (๊ฐœ์ฒด๋ฒˆํ˜ธ-1)๋ฅผ 4๋กœ ๋‚˜๋ˆˆ ๋ชซ์œผ๋กœ ์ด์ „ ์„ธ๋Œ€์˜ ์…€ํ”„ํด๋ฆฌ๋„ค์ด์…˜ ๋ฐฐ์—ด์˜ ์œ ์ „์ž๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ.
      • ์˜ˆ) 3์„ธ๋Œ€, 4๋ฒˆ ๊ฐœ์ฒด๋Š” RR์ž„.
        • ๊ฐœ์ฒด๋ฒˆํ˜ธ-1 (4-1) / 4 = 0
        • 2์„ธ๋Œ€ 0๋ฒˆ ๊ฐœ์ฒด = RR
    • 4์„ธ๋Œ€, ๊ฐœ์ฒด๋ฒˆํ˜ธ 64
      • 3์„ธ๋Œ€, 15 (63/4 = 15.75)
        • 2์„ธ๋Œ€, 3.75 (2์„ธ๋Œ€ 3์€ rr)
    • 4์„ธ๋Œ€, ๊ฐœ์ฒด๋ฒˆํ˜ธ 32
      • 31/4 = 7.75 (3์„ธ๋Œ€, 7)
        • 7/4 = 1.75 (2์„ธ๋Œ€, 1) = Rr
  • ๊ทผ๋ฐ RR, Rr, rR, rr์ด ์•„๋‹ˆ๋ผ RR, Rr, Rr, rr์ด๋ผ์„œ ๋ญ”๊ฐ€ ์‚ฝ์งˆํ–ˆ๋‹ค.
    • ์žฌ๊ท€ํ˜ธ์ถœ๋กœ ํ•ด๋ณด๋ ค๋‹ค๊ฐ€ ์•ˆ๋˜์„œ ์Šคํƒ๊ณผ while ๋ฌธ์œผ๋กœ... ๋Œ€๋ถ€๋ถ„ ์ด๋ ‡๊ฒŒ ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค.
def solution(queries):
    answer = []
    
    def find(gen, individual):
        stack = []

        while gen > 1:
            gen -= 1
            individual, mod = divmod(individual,4)
            stack.append(mod)

        while len(stack) > 0:
            mod = stack.pop()
            if mod == 0:
                return "RR"
            if mod == 3:
                return "rr"
        return "Rr"

    for q in queries:
        g, i = q[0],q[1]-1
        answer.append(find(g, i))
    
    return answer
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.4MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.02ms, 9.93MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.1MB)
  • ๊ณ ์ˆ˜์˜ ํ’€์ด
    • ์™€ ์‹ ๋ฐ•ํ•˜๋‹ค.
def solution(queries):
    cdict = ['RR', 'Rr', 'Rr', 'rr']
    answer = []
    for q in queries:
        if q[0] == 1:
            answer.append('Rr')
        val = q[1]-1
        for i in range(q[0], 1, -1):
            mok = val// (4**(i-2))
            if mok == 0:
                answer.append('RR')
                break
            elif mok == 3:
                answer.append('rr')
                break
            if i == 2:
                answer.append(cdict[mok])
                break
            val %= (4**(i-2))
    return answer
์ •ํ™•์„ฑ  ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰	ํ†ต๊ณผ (0.02ms, 10.2MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.3MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.1MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰	ํ†ต๊ณผ (0.01ms, 10.2MB)
728x90
๋ฐ˜์‘ํ˜•