์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ตฌํ˜„

[๋ฐฑ์ค€ 3758 ๐Ÿฅˆ] KCPC

1eehyunji 2023. 10. 7. 18:55

๋ฌธ์ œ

๋‹น์‹ ์€ ์œ ๋ช… ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ์ธ KCPC(Korean Collegiate Programming Contest)์— ์ฐธ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๋Œ€ํšŒ์—์„œ ์ด k๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ ๋˜๋Š”๋ฐ, ์–ด๋–ค ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ’€์ด๋ฅผ ์„œ๋ฒ„์— ์ œ์ถœํ•˜๋ฉด ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•ด 0์ ์—์„œ 100์  ์‚ฌ์ด์˜ ์ ์ˆ˜๋ฅผ ์–ป๋Š”๋‹ค. ํ’€์ด๋ฅผ ์ œ์ถœํ•œ ํŒ€์˜ ID, ๋ฌธ์ œ ๋ฒˆํ˜ธ, ์ ์ˆ˜๊ฐ€ ์„œ๋ฒ„์˜ ๋กœ๊ทธ์— ์ œ์ถœ๋˜๋Š” ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋œ๋‹ค. ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ’€์ด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ์ตœ๊ณ  ์ ์ˆ˜๊ฐ€ ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ข… ์ ์ˆ˜๊ฐ€ ๋œ๋‹ค. (๋งŒ์•ฝ ์–ด๋–ค ๋ฌธ์ œ์— ๋Œ€ํ•ด ํ’€์ด๋ฅผ ํ•œ๋ฒˆ๋„ ์ œ์ถœํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ข… ์ ์ˆ˜๋Š” 0์ ์ด๋‹ค.) 

๋‹น์‹  ํŒ€์˜ ์ตœ์ข… ์ ์ˆ˜๋Š” ๊ฐ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ฐ›์€ ์ ์ˆ˜์˜ ์ดํ•ฉ์ด๊ณ , ๋‹น์‹ ์˜ ์ˆœ์œ„๋Š” (๋‹น์‹  ํŒ€๋ณด๋‹ค ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ํŒ€์˜ ์ˆ˜)+1 ์ด๋‹ค. 

์ ์ˆ˜๊ฐ€ ๋™์ผํ•œ ํŒ€์ด ์—ฌ๋Ÿฟ ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ ๊ทœ์น™์— ์˜ํ•ด์„œ ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ง„๋‹ค. 

  1. ์ตœ์ข… ์ ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, ํ’€์ด๋ฅผ ์ œ์ถœํ•œ ํšŸ์ˆ˜๊ฐ€ ์ ์€ ํŒ€์˜ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. 
  2. ์ตœ์ข… ์ ์ˆ˜๋„ ๊ฐ™๊ณ  ์ œ์ถœ ํšŸ์ˆ˜๋„ ๊ฐ™์€ ๊ฒฝ์šฐ, ๋งˆ์ง€๋ง‰ ์ œ์ถœ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅธ ํŒ€์˜ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค. 

๋™์‹œ์— ์ œ์ถœ๋˜๋Š” ํ’€์ด๋Š” ์—†๊ณ , ๋ชจ๋“  ํŒ€์ด ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ํ’€์ด๋ฅผ ์ œ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ผ. 

์„œ๋ฒ„์˜ ๋กœ๊ทธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‹น์‹  ํŒ€์˜ ์ˆœ์œ„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ํŒ€์˜ ๊ฐœ์ˆ˜ n, ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜ k, ๋‹น์‹  ํŒ€์˜ ID t, ๋กœ๊ทธ ์—”ํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜ m์„ ๋‚˜ํƒ€๋‚ด๋Š” 4 ๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ, 3 ≤ n, k ≤ 100, 1 ≤ t ≤ n, 3 ≤ m ≤ 10,000์ด๋‹ค. ๊ทธ ๋‹ค์Œ m๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ํ’€์ด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ œ์ถœ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ค„์—๋Š” ํŒ€ ID i, ๋ฌธ์ œ ๋ฒˆํ˜ธ j, ํš๋“ํ•œ ์ ์ˆ˜ s๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์—ฌ๊ธฐ์„œ 1 ≤ i ≤ n, 1 ≤ j ≤ k, 0 ≤ s ≤ 100์ด๋‹ค. 

์ถœ๋ ฅ

์ถœ๋ ฅ์€ ํ‘œ์ค€์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฃผ์–ด์ง„ ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋‹น์‹  ํŒ€์˜ ์ˆœ์œ„๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • ๊ฐ ํŒ€ ๋ณ„๋กœ ์ด ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ์ œ์ถœ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœ ๊ตฌํ˜„์œผ๋กœ ํ’€์–ด์ฃผ๋ฉด ๋œ๋‹ค.
    • ์ œ์ถœ ํšŸ์ˆ˜์™€ ์ œ์ถœ ์‹œ๊ฐ„์€ team_info์— ์ €์žฅ๋œ ๊ฐ ํŒ€์˜ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ +1ํ•ด์ฃผ๊ณ , ์ƒˆ๋กœ์šด ์ œ์ถœ์‹œ๊ฐ„์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ฃผ๋ฉด ๋˜๊ณ , ๊ฐ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„  ๋” ๋†’์€ ์ ์ˆ˜๊ฐ€ ์ตœ์ข… ์ ์ˆ˜์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด ์ ์ˆ˜๊ฐ€ ๋” ๋†’๋‹ค๋ฉด ๊ธฐ์กด์˜ ํ•ด๋‹น ๋ฌธ์ œ์˜ ์ ์ˆ˜๋ฅผ ์ด ์ ์ˆ˜์—์„œ ๋นผ์ค€ ๋’ค์—, ์ƒˆ๋กœ์šด ์ ์ˆ˜๋ฅผ ๋”ํ•ด์ค€๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋ฌธ์ œ๋‹น ์ ์ˆ˜์—” ์ƒˆ๋กœ์šด ์ ์ˆ˜๋ฅผ ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 
  • ์ˆœ์œ„๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์€ ์ด ์ ์ˆ˜ ๋‚ด๋ฆผ์ฐจ์ˆœ, ์ œ์ถœ ํšŸ์ˆ˜ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ œ์ถœ ์‹œ๊ฐ„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์„œ ์šฐ๋ฆฌ ํŒ€์˜ ์ˆœ์œ„๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ฒ˜์Œ์— ๋‚˜๋Š” ์ˆœ์œ„๋ฅผ ์ฐพ๋Š” ๊ฒƒ์„ ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ ์šฐ๋ฆฌ ํŒ€์˜ ์ด ์ ์ˆ˜, ์ œ์ถœ ํšŸ์ˆ˜, ์ œ์ถœ ์‹œ๊ฐ„์„ ์ €์žฅํ•ด๋†“๊ณ , ์šฐ๋ฆฌ ํŒ€๋ณด๋‹ค ์ด ์ ์ˆ˜๊ฐ€ ๋†’์€ ํŒ€์„ ์ฐพ์œผ๋ฉด +1, ์ด ์ ์ˆ˜๋Š” ๊ฐ™์ง€๋งŒ ์ œ์ถœ ํšŸ์ˆ˜๊ฐ€ ๋” ์ ์€ ํŒ€์„ ์ฐพ์œผ๋ฉด +1, ์ด ์ ์ˆ˜์™€ ์ œ์ถœ ํšŸ์ˆ˜๋Š” ๊ฐ™์ง€๋งŒ ์ œ์ถœ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅธ ํŒ€์„ ์ฐพ์œผ๋ฉด +1 ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆœ์œ„๋ฅผ ์ฐพ์•„์„œ ์ถœ๋ ฅํ–ˆ๊ณ , ์ด ๋ฐฉ์‹๋„ ํ†ต๊ณผ๋ฅผ ๋ฐ›๊ธด ํ–ˆ๋‹ค!
  • ๊ทธ๋ž˜๋„ ์ด ๋ฌธ์ œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๊ฐ€ ์ •๋ ฌ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ณ , ์ •๋ ฌ์„ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์‹œ ์ œ์ถœํ–ˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ sort()๋ฅผ ํ•  ๋•Œ, key ๊ฐ’์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์ค„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„๋ž˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์„ ๋• -๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค. 
team_info=[0,0,0,[0]*(k)]*n
  • ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€, ์ฒ˜์Œ์— [0,0,0,[0]*k] ํ˜•ํƒœ์˜ ๋ฐฐ์—ด์€ ํŒ€์˜ ๊ฐœ์ˆ˜๋งŒํผ ์„ ์–ธํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ list comprehension์ด ์•„๋‹ˆ๋ผ ์œ„์™€ ๊ฐ™์ด *์„ ์ด์šฉํ•œ ๋ณต์‚ฌ ํ˜•ํƒœ๋กœ ์„ ์–ธํ–ˆ์—ˆ๋‹ค.
  • ์ด๋Ÿฌ๋ฉด ๊ฐ ๋ฐฐ์—ด์˜ ์ฐธ์กฐ๊ฐ’๋“ค๋„ ํ•จ๊ป˜ ๋ณต์‚ฌ๋˜์–ด team_info[1][0]=1์„ ์ €์žฅํ•ด์ฃผ๋ฉด team_info[0][0], team_info[2][0]๊นŒ์ง€ ๋ชจ๋‘ 1๋กœ ์ €์žฅ๋˜๋Š” ํ˜„์ƒ์ด ์ผ์–ด๋‚ฌ๋‹ค. ๊ตฌ๊ธ€๋งํ•ด๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธ€์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค!
  • https://sogogi1000inbun.tistory.com/33
 

[python] 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์š”์†Œ ๋ณ€๊ฒฝํ•˜๋Š” ์ฐจ์ด

BFSํ•˜๋ฉด์„œ ์ƒ์„ฑํ•œ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋ผ์„œ ํ•œ์ฐฝ ๊ณ ๋ฏผํ–ˆ์—‡๋”ฐ. ๋ฐ”๋กœ 39,40 ์—ฐ์‚ฐ์—์„œ ๊ฐ’์ด ์ด์ƒํ•˜๊ฒŒ ์‚ฝ์ž…๋˜๋Š”๊ฑฐ๋‹ค..!!! ์ฒ˜์Œ์— ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €๋ ‡๊ฒŒ ์„ ์–ธํ–ˆ๋Š”๋ฐ, ๋””๋ฒ„๊น…ํ•˜๋ฉด์„œ ๋ณด๋‹ˆ๊นŒ, 0,

sogogi1000inbun.tistory.com

team_info=[[0,0,0,[0]*(k),t_id] for t_id in range(n)]
  • ๊ฒฐ๋ก  : ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, list comprehension์„ ์‚ฌ์šฉํ•˜์ž
import sys

t=int(sys.stdin.readline())
for _ in range(t):
    n,k,t,m=map(int, sys.stdin.readline().split(' '))
    # n๊ฐœ์˜ ํŒ€์— ๋Œ€ํ•œ ์ •๋ณด ๋ฐฐ์—ด
    # ์ด ์ ์ˆ˜, ์ œ์ถœํšŸ์ˆ˜, ์ œ์ถœ์‹œ๊ฐ„, ๋ฌธ์ œ๋ฒˆํ˜ธ๋ณ„ ์ ์ˆ˜
    team_info=[[0,0,0,[0]*(k),t_id] for t_id in range(n)]
    for time in range(m):
        team, pnum, score = map(int, sys.stdin.readline().split(' '))
        # ์ œ์ถœ ํšŸ์ˆ˜, ์ œ์ถœ ์‹œ๊ฐ„ ๊ฐฑ์‹ 
        team_info[team - 1][1] += 1
        team_info[team-1][2] = time
        # ํ•ด๋‹น ๋ฌธ์ œ์˜ ํ˜„์žฌ ์ ์ˆ˜๋ณด๋‹ค ์ƒˆ๋กœ์šด ์ ์ˆ˜๊ฐ€ ๋” ๋†’๋‹ค๋ฉด, ์ ์ˆ˜ ๊ฐฑ์‹ 
        if team_info[team-1][3][pnum-1]<score:
            team_info[team-1][0]-=team_info[team-1][3][pnum-1]
            team_info[team-1][0]+=score
            team_info[team-1][3][pnum-1]=score

    team_info.sort(key=lambda x:(-x[0], x[1], x[2]))
    for rank in range(n):
        if team_info[rank][4]==t-1:
            print(rank+1)
            break
            
    # ์ง์ ‘ ๊ตฌํ˜„
    # mscore,mnum,mtime,mpros =team_info[t-1]
    # ans=1
    # for idx in range(n):
    #     if idx==t-1:
    #         continue
    #     ts, tm, tt, tp=team_info[idx]
    #     # ์šฐ๋ฆฌํŒ€ ์ ์ˆ˜๋ณด๋‹ค ๋†’์€ ์ ์ˆ˜์ผ ๊ฒฝ์šฐ
    #     if ts>mscore:
    #         ans+=1
    #     # ์šฐ๋ฆฌํŒ€ ์ ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค๋ฉด, ์ œ์ถœ ํšŸ์ˆ˜๊ฐ€ ๋” ์ ์€์ง€ ํ™•์ธ
    #     elif ts==mscore:
    #         if tm<mnum:
    #             ans+=1
    #         elif tm==mnum:
    #             # ์ œ์ถœ ํšŸ์ˆ˜๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด, ์ตœ์ข… ์ œ์ถœ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅธ์ง€ ํ™•์ธ
    #             if tt<mtime:
    #                 ans+=1
    # print(ans)