Post

[SWEA] 13038. ๊ตํ™˜ํ•™์ƒ(python)

๐Ÿ“Œ๋ฌธ์ œ

Alt text

๐Ÿ’ช์•„์ด๋””์–ด

  1. ์ˆ˜์—…์‹œ์ž‘์ผ ์ •ํ•˜๊ธฐ
    ์–ด๋–ค ์š”์ผ์— ์ˆ˜์—…์ด ์‹œ์ž‘ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋จธ๋ฌด๋ฅด๋Š” ๊ธฐ๊ฐ„์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜์—…์ด 1์ธ ๋‚ ์— ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ด ๋จธ๋ฌด๋ฅด๋Š” ๊ธฐ๊ฐ„์„ ๊ตฌํ•˜์˜€๋‹ค.

    โ€“> ๋ณด์™„ํ• ์ 
    ๋ฌธ์ž์—ด์žฌ๋ฐฐ์น˜
    : ์ฃผ์— ์ˆ˜์—…์ด ์‹œ์ž‘ํ•˜๋Š” ์š”์ผ์ด ํ•˜๋‚˜์ด๊ณ  ์ด๋ฏธ input_day[0]==โ€™1โ€™์ด๊ฑฐ๋‚˜ ๋ชจ๋“  ์š”์ผ์— ์ˆ˜์—…์„ ํ•˜๋ฉด ๋ฌธ์ž์—ด ์žฌ๋ฐฐ์น˜๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋จ

  2. ์ด ๋จธ๋ฌด๋Š” ๊ธฐ๊ฐ„ ๊ณ„์‚ฐํ•˜๊ธฐ
    ์ผ์ฃผ์ผ์— ์—ด๋ฆฌ๋Š” ์ˆ˜์—… ์ˆ˜ ๋งŒํผ ์ผ์ฃผ์ผ์”ฉ ๋จธ๋ฌผ์–ด์•ผํ•œ๋‹ค. ์ด๋Š” ์ด ๋“ค์–ด์•ผํ•˜๋Š” ์ˆ˜์—…์˜ ๊ฐœ์ˆ˜ // ์ผ์ฃผ์ผ์— ์—ด๋ฆฌ๋Š” ์ˆ˜์—… ์ˆ˜ ๋กœ ๋ช‡ ์ฃผ ๋จธ๋ฌด๋Š”์ง€ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    ์ด ๋“ค์–ด์•ผ ํ•˜๋Š” ์ˆ˜์—…์˜ ๊ฐœ์ˆ˜ % ์ผ์ฃผ์ผ์— ์—ด๋ฆฌ๋Š” ์ˆ˜์—… ์ˆ˜๋งŒํผ ๋ฉฐ์น  ๋” ๋จธ๋ฌผ๊ฑด์ง€ ์„ผ๋‹ค. ๋‚˜๋จธ์ง€ 0์ด๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์ˆ˜์—…์ด ํ•ด๋‹น ์ฃผ ์–ธ์ œ ๋๋‚˜๋Š๋ƒ์— ๋”ฐ๋ผ ๋จธ๋ฌด๋Š” ์ผ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ชซ์—์„œ 1์„ ๋นผ์ค€๋‹ค. ๋“ค์–ด์•ผํ•˜๋Š” ์ˆ˜์—… ์ˆ˜ ๋งŒํผ ์ผ์ฃผ์ผ์— ์ˆ˜์—…์—ด๋ฆฌ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉด์„œ ๋ฉฐ์น  ๋จธ๋ฌด๋Š” ์ง€ ๊ณ„์‚ฐํ•œ๋‹ค.

๐Ÿฅ‚์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def cnt_minimum_stay(n,course_per_week,course_open_days,answer):
    week = n//course_open_days # ์ˆ˜์—…์„ ๋“ฃ๋Š” ์ตœ๋Œ€ ์ฃผ
    remaining_days=n%course_open_days
    if remaining_days==0: 
        week-=1
        remaining_days = course_open_days
    total= 7*week
    for chk in course_per_week:
        if chk=='1': remaining_days-=1
        total+=1
        if remaining_days==0: break

    if answer>total: answer=total
    return answer

T = int(input()) # ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ˆ˜ ์ž…๋ ฅ๋ฐ›๊ธฐ
for tc in range(1,T+1):
    n=int(input())
    input_days=input().split()
    answer=float('inf')
    course_open_days = input_days.count('1')#์ฃผ ์ˆ˜์—…์ผ ์„ธ๊ธฐ
    #ํ•™๊ต์— ์ตœ์†Œ๋กœ ๋จธ๋ฌผ๋Ÿฌ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์—…์ด ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์š”์ผ์— ํ•™๊ต์— ๋จธ๋ฌผ๊ธฐ ์‹œ์ž‘ํ•ด์•ผํ•จ.
    for i,chk in enumerate(input_days):
        if chk=='1': #์ˆ˜์—… ์‹œ์ž‘์ผ 
            course_days = input_days[i:]+input_days[:i]
            answer = cnt_minimum_stay(n,course_days,course_open_days,answer)
    print('#{} {}'.format(tc,answer))
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.