블로그

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

주유소

 

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

카드2

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net

 

내 코드

from sys import stdin
from collections import deque

N = int(stdin.readline())
if N == 1:
    print(1)
else:
    deq = deque([i for i in range(1, N+1)])
    while True:
        deq.popleft()
        if len(deq) == 1:
            break
        deq.append(deq.popleft())
    print(deq.pop())
728x90

+ Recent posts