๐Ÿงฉ Algorithm/SWEA

[SWEA] 1983. ์กฐ๊ต์˜ ์„ฑ์  ๋งค๊ธฐ๊ธฐ (Python/D2)

devCloud 2023. 11. 2. 01:39
728x90

 

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com


์„ค๋ช…

ํ•™์ ์ด A+ ๋ถ€ํ„ฐ D0๊นŒ์ง€ ์ด 10๊ฐœ์˜ ํ‰์ ์ด ์žˆ๋‹ค.  ์ด์ ์€ ์ค‘๊ฐ„๊ณ ์‚ฌ(35%) + ๊ธฐ๋ง๊ณ ์‚ฌ(45%) + ๊ณผ์ œ(20%) ๋น„์œจ๋กœ ๋ฐ˜์˜๋œ๋‹ค. 10๊ฐœ์˜ ํ‰์ ์„ ์ด์ ์ด ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋ถ€์—ฌํ•œ๋‹ค.(์ด๊ฒŒ ๋ณธ๋ฌธ์ œ) ๊ฐ๊ฐ์˜ ํ‰์ ์€ ๊ฐ™์€ ๋น„์œจ๋กœ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•™์ ์„ ์•Œ๊ณ ์‹ถ์€ K๋ฒˆ์งธ ํ•™์ƒ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ K๋ฒˆ์งธ ํ•™์ƒ์˜ ํ•™์ ์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.
ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ํ•™์ƒ์ˆ˜ N๊ณผ ํ•™์ ์„ ์•Œ๊ณ ์‹ถ์€ ํ•™์ƒ์˜ ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ๊ฐ๊ฐ์˜ ํ•™์ƒ์ด ๋ฐ›์€ ์‹œํ—˜ ๋ฐ ๊ณผ์ œ ์ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

ํ’€์ด

1. ํ•œ ๋ฆฌ์ŠคํŠธ์— ํ‰์ ์„ ๋‹ค ์ €์žฅํ•œ๋‹ค.
2. ์‹œํ—˜ ๋ฐ ๊ณผ์ œ ๋น„์œจ๋„ ์žˆ์œผ๋‹ˆ 100์  ๋งŒ์ ์œผ๋กœ ํ™˜์‚ฐํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์— ๋„ฃ๋Š”๋‹ค.

3. k๋ฒˆ์งธ์˜ ์ ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค. (์ •๋ ฌํ•˜๋ฉด k๋ฒˆ์งธ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋‹ˆ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ)
4. ํ™˜์‚ฐํ•œ ์ ์ˆ˜๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ๋ฅผ sort ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ •๋ ฌํ•œ๋‹ค. 
5. n์„ 10์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋‚˜์˜จ ๋ชซ์„ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค.

6. ์ ์ˆ˜ ๋ฆฌ์ŠคํŠธ์—์„œ k๋ฒˆ์งธ์˜ ์ ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ 5๋ฒˆ์—์„œ ๋„์ถœ๋œ ๋ชซ์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์ €์žฅํ•œ๋‹ค.
7. ํ•™์ ์ด ์ €์žฅ๋œ ๋ฆฌ์ŠคํŠธ์˜ k๋ฒˆ์งธ๋ฅผ ์ฐพ์•„ ์ถœ๋ ฅํ•œ๋‹ค.

 

TIL

• list.index(๊ฐ’) - ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Solution

t = int(input())
grade = ["A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"]
def calc_score(mid, fin, assi): #์ด์  ๊ณ„์‚ฐ
    return (0.35*mid) + (0.45*fin) + (0.2*assi) 

for i in range(1, t+1):
    n, k = map(int, input().split())
    store_score = [] #ํ™˜์‚ฐํ•œ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
    for j in range(n): #ํ•™์ƒ๋“ค ์ ์ˆ˜ ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›๊ธฐ
        mid, fin, assi = map(int, input().split()) #์ค‘๊ฐ„, ๊ธฐ๋ง, ๊ณผ์ œ
        store_score.append(calc_score(mid, fin, assi)) #๊ณ„์‚ฐํ•œ ์ด์ ์„ ๋ฆฌ์ŠคํŠธ์— ๋ชจ๋‘ ์ €์žฅ

    k_score = store_score[k-1] #k๋ฒˆ์งธ ์ ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ €์žฅ
    store_score.sort(reverse=True) #์ ์ˆ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

    value = n // 10 #๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง, ๋งŒ์•ฝ n= 20์ผ ๋•Œ 2๋ช…์”ฉ ๋™์ผํ•œ ์ ์ˆ˜๊ฐ€ ๋ถ€์—ฌ๋œ๋‹ค๋Š” ๊ฒƒ
    ans = store_score.index(k_score) // value #์ ์ˆ˜ ๋ฆฌ์ŠคํŠธ์—์„œ k๋ฒˆ์งธ์˜ ์ ์ˆ˜์˜ ์ธ๋ฑ์Šค๋ฅผ value๋กœ ๋‚˜๋ˆ”
    print("#"+str(i),grade[ans]) #๋“ฑ๊ธ‰ ์ค‘ k๋ฒˆ์งธ ์ธ๋ฑ์Šค์™€ ๋™์ผํ•œ ํ•™์ ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

t = int(input())
grade = ["A+", "A0", "A-", "B+", "B0", "B-", "C+", "C0", "C-", "D0"]
ans = [] #๊ฒฐ๊ณผ๊ฐ’
def calc_score(mid, fin, assi):
    prev_score = 0
    prev_score = round((0.35*mid) + (0.45*fin) + (0.2*assi), 1) #์†Œ์ˆ˜์  ์ฒซ์งธ์ž๋ฆฌ๊นŒ์ง€๋งŒ ๋ฐ˜์˜ฌ๋ฆผํ•˜๊ณ  ๋‚˜๋จธ์ง„ ๋ฒ„๋ฆผ
    return prev_score #์ƒ๊ฐํ•ด๋ด์•ผ ํ•  ์ , ์ •์ˆ˜๋กœ ๊ณ„์‚ฐํ•˜๋А๋ƒ ์†Œ์ˆ˜์ ๊นŒ์ง€ ๊ณ„์‚ฐํ•˜๋А๋ƒ

def rating_score(score): #ํ•™์  ๋ถ€์—ฌ
    if k == 1:
        return grade[0]
    else:
        score[0] = grade[0]  # ์ฒซ ๋ฒˆ์งธ ํ•™์  ๋ฏธ๋ฆฌ ๋ถ€์—ฌ
        for i in range(len(grade)):
            cnt = 0
            for key, value in score.items():
                if value == k: #๋งŒ์•ฝ value๋ž‘ k๋ž‘ ๊ฐ™์„ ๋•Œ
                    return grade[i]
                elif score[key-1][value-1] == score[key][value]: #๋งŒ์•ฝ ์ด์ „๊ณผ ๋™์ผํ•œ ์ ์ˆ˜๊ฐ€ ์•„๋‹ ๋•Œ
                    score[j] = grade[i] #ํ˜„์žฌ ํ•™์ ์„ ๋ถ€์—ฌํ•˜๊ณ  break
                    break #๋‘ ๋ฒˆ์งธ for๋ฌธ ๋๋‚ด๊ธฐ
                else: #์ด์ „๊ณผ ๋™์ผํ•œ ์ ์ˆ˜์ด๋ฉด
                    score[j] = score[j-1] #์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ถ€์—ฌ
                    break

for i in range(1, t+1):
    n, k = map(int, input().split())
    store_score = [] #ํ™˜์‚ฐํ•œ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ
    for j in range(n): #ํ•™์ƒ๋“ค ์ ์ˆ˜ ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›๊ธฐ
        mid, fin, assi = map(int, input().split()) #์ค‘๊ฐ„, ๊ธฐ๋ง, ๊ณผ์ œ
        store_score.append(calc_score(mid, fin, assi)) #๊ณ„์‚ฐํ•œ ์ด์ ์„ ๋ฆฌ์ŠคํŠธ์— ๋ชจ๋‘ ์ €์žฅ
        #[74.6, 92.6, 88.8, 99.5, 72.3, 85.9, 96.2, 69.0, 85.5, 85.8]
    dict_score = {int:k for k, int in enumerate(store_score)} #๋ฆฌ์ŠคํŠธ๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๊ณ  ์ธ๋ฑ์Šค ๊ฐ’ ๋ถ€์—ฌ=๋”•์…”๋„ˆ๋ฆฌ ์ปดํ”„๋ฆฌํ—จ์…˜)
    #{74.6: 0, 92.6: 1, 88.8: 2, 99.5: 3, 72.3: 4, 85.9: 5, 96.2: 6, 69.0: 7, 85.5: 8, 85.8: 9}
    score = sorted(dict_score.items(), reverse=True) #items() : ๋”•์…”๋„ˆ๋ฆฌ key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
    #[(99.5, 3), (96.2, 6), (92.6, 1), (88.8, 2), (85.9, 5), (85.8, 9), (85.5, 8), (74.6, 0), (72.3, 4), (69.0, 7)]
    #๋”•์…”๋„ˆ๋ฆฌ๋„ ํ•จ์ˆ˜ ์ธ์ž๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค
    print("#"+str(i),rating_score(score))

 

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

 

728x90