๊ธฐ๋ก๋ฐฉ

BOJ_1548 : ๋ถ€๋ถ„ ์‚ผ๊ฐ ์ˆ˜์—ด ๋ณธ๋ฌธ

CodingTest/Python

BOJ_1548 : ๋ถ€๋ถ„ ์‚ผ๊ฐ ์ˆ˜์—ด

Soom_1n 2022. 9. 11. 23:17

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1548๋ฒˆ: ๋ถ€๋ถ„ ์‚ผ๊ฐ ์ˆ˜์—ด

์„ธ ์ˆ˜ x, y, z๊ฐ€ x+y>z, x+z>y, y+z>x์˜ ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜๋ฉด, ์„ธ ์ˆ˜๋Š” ์‚ผ๊ฐ๊ด€๊ณ„์— ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธธ์ด๊ฐ€ N์ธ ์ˆ˜์—ด B(b[0], b[1], ..., b[n-1])์˜ ๋ชจ๋“  b[i], b[j], b[k]๊ฐ€ ์‚ผ๊ฐ๊ด€๊ณ„์— ์žˆ์œผ๋ฉด ์ด ์ˆ˜์—ด์€ ์‚ผ๊ฐ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ž…๋ ฅ๋ฐ›์€ ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์‚ผ๊ฐ ์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๋””์ ์ธ ๊ด€์ ๊ณผ ๋ธŒ๋ฃจํŠธํฌ์Šค์˜ ์ ‘๊ทผ์ด ๋ชจ๋‘ ํ•„์š”ํ•˜๋‹ค.
    • ์ž…๋ ฅ๋ฐ›์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–ˆ์„๋•Œ, arr[i] + arr[i+1] > arr[n] ์„ ๋งŒ์กฑํ•˜๋ฉด i๋ถ€ํ„ฐ n ์‚ฌ์ด์˜ ๋ชจ๋“  ์ˆ˜๋“ค๋„ ์‚ผ๊ฐ๊ด€๊ณ„์ด๋‹ค. (๊ทธ๋ฆฌ๋””)
    • ๊ฐ€์žฅ ์•ž์ด๋‚˜ ๊ฐ€์žฅ ๋’ค๋ฅผ ๋นผ๊ฐ€๋ฉฐ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์‚ผ๊ฐ ์ˆ˜์—ด์„ ์ฐพ๋Š”๋‹ค. (๋ธŒ๋ฃจํŠธํฌ์Šค)
      • 0 ~ n-1 >> 1 ~ n-1 >> ... >> n-2 ~ n-1
      • 1 ~ n-2 >> 2 ~ n-2 >> ... >> n-3 ~ n-2
      • ์ˆœ์„œ๋Š” ๋’ค์—๊บผ ํ•˜๋‚˜๋นผ๋ณด๊ณ  ์•ž์—๊ฑฐ ํ•˜๋‚˜ ๋นผ๋ณด๊ณ ..(๋ฐ˜๋ณต)

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

n = int(input())
arr = list(map(int,input().split()))
arr.sort()

def solution(N, arr):
    for n in range(N, 0, -1):
        for i in range(N - n + 1):
            print(n, i)
            if n < 3 or arr[i]+arr[i+1] > arr[i+n-1]:
                return n

print(solution(n, arr))

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋’ค, ์•ž ์ˆœ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ค„์—ฌ๊ฐ€๋ณด๋ฉฐ ์‚ผ๊ฐ ์ˆ˜์—ด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์ตœ์ดˆ๋กœ ๋ฐœ๊ฒฌ๋œ ์‚ผ๊ฐ ์ˆ˜์—ด์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€๊ฐ’์ด๋‹ค.

 

๐Ÿ”ธ ์˜ค๋‹ต ์ฝ”๋“œ ๐Ÿ”ธ

##########################################
# dfs๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด : ์‹œ๊ฐ„์ดˆ๊ณผ
##########################################
n = int(input())
arr = list(map(int,input().split()))
arr.sort()

answer = 0
before = -1

def triple(b):
    for i in range(len(b)-1):
        for j in range(i+1,len(b)):
            for k in b:
                if b[i]+b[j] <= k:
                    return False
    return True

def dfs(d, b):
    global answer

    if n-d <= answer:
        return

    if triple(b):
        if answer < n-d:
            answer = n-d
        return

    for i in range(len(b)):
        if b[i] == b[i-1]:
            continue
        
        temp = b[:]
        temp.pop(i)
        dfs(d+1, temp)

dfs(0, arr)
print(answer)
##########################################

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ˆ˜ ๋งŽ์€ ์กฐํ•ฉ์„ dfs์˜ ์ธต์„ ํ•˜๋‚˜์”ฉ ๋‚ด๋ ค๊ฐ€๋ฉฐ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค.
  • ์˜ˆ์ œ๋Š” ๋ชจ๋‘ ์ •๋‹ต์ด ๋‚˜์˜ค์ง€๋งŒ ์ œ์ถœ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ธŒ๋ฃจํŠธํฌ์Šค๋ผ๊ณ  dfs ํ•˜๋‚˜๋งŒ ๊ณ„์† ํ™œ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋”๋‹ˆ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๋Š”๊ฑธ ๊ฐ„๊ณผํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.
  • dfs๋กœ ์‹œ๊ฐ„์„ ๊ฐ€๋Šฅํ•œ ์ค„์—ฌ๋ณด๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ํƒ๋„ ์—†๋Š”๊ฒƒ ๊ฐ™์•„์„œ ๊ฒฐ๊ตญ ํ’€์ด ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ํƒœ๊ทธ์— ๋ธŒ๋ฃจํŠธํฌ์Šค์™€ ๊ทธ๋ฆฌ๋””๊ฐ€ ๊ฐ™์ด ์จ์žˆ์—ˆ๋Š”๋ฐ, ์ €๋ฒˆ์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ์ค„ ์•Œ์•˜๋”๋‹ˆ ๋‘ ๊ฐœ๋…
    ๋ชจ๋‘ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.
  • ๋ฌธ์ œ ๋ถ„์„๋ถ€ํ„ฐ ์ž˜๋ชป ์ ‘๊ทผํ•œ ์ผ€์ด์Šค์ธ๋ฐ, 1์‹œ๊ฐ„ ์ œํ•œ์„ ๋‘๊ณ  ์ด๋Ÿฐ์ €๋Ÿฐ ์‹œ๋„๋ฅผ ํ•˜๋Š”๊ฑธ ๊ฒ๋‚ด์ง€ ๋ง์•„์•ผ๊ฒ ๋‹ค.

728x90

'CodingTest > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1012 : ์œ ๊ธฐ๋† ๋ฐฐ์ถ”  (0) 2022.09.15
Lv.2 : ํŠœํ”Œ  (0) 2022.09.12
BOJ_2961 : ๋„์˜์ด๊ฐ€ ๋งŒ๋“  ๋ง›์žˆ๋Š” ์Œ์‹  (0) 2022.09.10
BOJ_14620 : ๊ฝƒ๊ธธ  (0) 2022.09.10
BOJ_1037 : ์•ฝ์ˆ˜  (0) 2022.09.09