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

영단어 암기는 괴로워

 

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

주유소

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

 

내 코드

from sys import stdin

N = int(stdin.readline())
kmList = list(map(int, stdin.readline().split()))
oilList = list(map(int, stdin.readline().split()))
pay = 0
curIdx = 0

while True:
    # print(curIdx)
    if curIdx >= len(oilList)-1:
        break

    # 현재 주유소에서 나보다 주유소 가격이 싼경우 전까지 다 사야함
    nextIdx = curIdx + 1
    for idx in range(curIdx +1, len(oilList)):
        if idx == len(oilList) - 1:
            nextIdx = idx
        if oilList[idx] < oilList[curIdx]:
            nextIdx = idx
            break
    # print("nextId", nextIdx)

    # 구매한 km oil 계산
    for idx in range(curIdx, nextIdx):
        pay += oilList[curIdx] * kmList[idx]

    curIdx = nextIdx
    # print("pay", pay)
    # print()
print(pay)
728x90

+ Recent posts