IF문 좀 대신 써줘

시간초과 코드

from sys import stdin

N, M = map(int, stdin.readline().strip().split())

powers = []
titles = []

for _ in range(N):
    title, power = map(str, stdin.readline().strip().split())
    power = int(power)
    powers.append(power)
    titles.append(title)

for _ in range(M):
    userPower = int(stdin.readline().strip())
    for idx in range(len(powers)):
        if userPower <= powers[idx]:
            print(titles[idx])
            break

 

성공 코드

from sys import stdin

N, M = map(int, stdin.readline().strip().split())

powers = []

for _ in range(N):
    title, power = map(str, stdin.readline().strip().split())
    powers.append([title, int(power)])


powers.sort(key=lambda x: x[1]) # 오름차순 정렬

for _ in range(M):
    power = int(stdin.readline().strip())
    start = 0
    end = len(powers)-1

    while start <= end:
        mid = (start+end) // 2
        if power > powers[mid][1]:
            start = mid + 1
        else:
            end = mid - 1

    print(powers[start][0])
728x90

타노스

 

내코드

from sys import stdin

# 사전순 가장 빠른 것을 출력해야 하기 때문에
# 1은 왼쪽에서 부터 삭제, 0은 오른쪽에서부터 삭제
s = stdin.readline().strip()

count0 = s.count("0")//2
count1 = s.count("1")//2

while count0 > 0 or count1 > 0:
    if count1 > 0:
        idx1 = s.index("1")
        s = list(s)
        s[idx1] = ''
        s = "".join(s)
        count1 -= 1
    if count0 > 0:
        idx0 = s.rindex("0")
        s = list(s)
        s[idx0] = ''
        s = "".join(s)
        count0 -= 1

print("".join(s))
728x90

블로그

https://www.acmicpc.net/problem/21921

 

21921번: 블로그

첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다

www.acmicpc.net

 

내 코드

시간초과 코드

시간초과 났던 이유

- 인덱싱 + sum 함수사용

- 처음 0~X일까지의 구간합을 구한 다음 거기에 다음 인덱스에서 필요한 값을 빼고, 더해주는 방식으로 수정

from sys import stdin

N, X = map(int, stdin.readline().split())
visited = list(map(int, stdin.readline().split()))

maxVisit = 0
maxVisitCount = 0
for i in range(N - X + 1):
    sliceVisit = visited[i: i+X]
    if maxVisit < sum(sliceVisit):
        maxVisit = sum(sliceVisit)
        maxVisitCount = 1
    elif maxVisit == sum(sliceVisit):
        maxVisitCount += 1
    else:
        pass

if maxVisit == 0:
    print("SAD")
else:
    print(maxVisit)
    print(maxVisitCount)

 

성공 코드

from sys import stdin

N, X = map(int, stdin.readline().split())
visited = list(map(int, stdin.readline().split()))


intervalSum = sum(visited[0: X])
maxVisit = intervalSum
maxVisitCount = 1

for i in range(1, N - X + 1):
    intervalSum = intervalSum - visited[i-1] + visited[i+X-1]
    if intervalSum > maxVisit:
        maxVisit = intervalSum
        maxVisitCount = 1
    elif intervalSum == maxVisit:
        maxVisitCount += 1

if maxVisit == 0:
    print("SAD")
else:
    print(maxVisit)
    print(maxVisitCount)
728x90

영단어 암기는 괴로워

 

20920번: 영단어 암기는 괴로워

첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단

www.acmicpc.net

 

내 코드

from sys import stdin

N, M = map(int, stdin.readline().split())
# print(N, M)
dicList = []
dic = {}


for _ in range(N):
    word = stdin.readline().strip()
    if len(word) >= M:
        dicList.append(word)
# print(dicList)

for word in dicList:
    if not word in dic:
        dic[word] = 1
    else:
        dic[word] += 1

keys = dic.keys()
# print(dic)
dic = sorted(dic.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))
for word, count in dic:
    print(word)
728x90

+ Recent posts