본문 바로가기
✨ Club/Ec.crew 코딩 스터디

𝗘𝗰.𝗰𝗿𝗲𝘄 2기 5회차 문제 풀기

by 정람지 2022. 9. 29.

오늘은 시험 전 마지막 문제풀이 시간이었다.

시험이 끝나고는 주마다 알고리즘을 공부할 계획이기 때문에

간단하게 디버깅과 시간복잡도에 대한 개념을 이야기해 보았다.


<솔민 1173번 운동>

from sys import stdin
N,m,M,T,R = map(int,stdin.readline().split())
time = 0
runtime = 0
heart = m
while (runtime != N):
    if (m+T>M):
        time = -1
        break

    if (heart+T <= M):
        time += 1
        runtime += 1
        heart += T
    else:
        time += 1
        heart-=R
        if (heart < m):
            heart = m

print(time)

시간 초과가 나서 시간복잡도 문제인 줄 알았는데 값이 나올 수 없을 때 -1이 나와야 한다는 조건 빼먹은 걸 모르고 있었다..

시간 초과 말고 틀렸습니다로 나오면 더 좋았을 텐데..


<정민 - 20113번 긴급 회의>

임포스터는 누구인가?

from sys import stdin
N = int(stdin.readline())
list = list(map(int,stdin.readline().split()))
Nlist = [0 for _ in range(N+1)]
for cha in list:
    Nlist[cha] += 1 

del Nlist[0]
re = max(Nlist)
count = 0

for cha in Nlist:
    if cha == re:
        count += 1

if count == 1:
    print(Nlist.index(re)+1)
else:
    print("skipped")

<은채 - 15894번 수학은 체육과목이다>

from sys import stdin
N = int(stdin.readline())
print(N*4)

이런 문제 좋다~


<정화 - 2783번 삼각김밥>

from sys import stdin
X, Y = map(int,stdin.readline().split())
a = X/Y
N = int(stdin.readline())
reList = [a]
for _ in range(N):
    a, b = map(int,stdin.readline().split())
    reList.append(a/b)

result = min(reList)
print(1000*result)

<소은 - 1453번 피씨방 알바>

from sys import stdin
N = int(stdin.readline())
Nlist = list(map(int,stdin.readline().split()))
reList = [0 for _ in range(N+1)]
result = 0
for cha in Nlist:
    if reList[cha] == 0:
        reList[cha] = 1
    else:
        result += 1
print(result)

시간 초과 나서 왜지..했는데

from sys import stdin
N = int(stdin.readline())
Nlist = list(map(int,stdin.readline().split()))
Nlist = set(Nlist)

print(N-len(Nlist))

아니 이런 간단한 방법이

sort 활용은 맨날 까먹는다

 

set은 sort외 달리 재할당 필요

N = set(N)

N.sort()


<수연 2609번 최대공약수와 최소공배수>

 

[Python] 최소공배수, 최대공약수란? 파이썬 알고리즘으로 쉽게 구현하기 / for문, 유클리드 호제법

최대공약수란 ? GCD (Greatest Common Divisor) Common Divisor -> 라는 이름에서 알 수 있듯이 두 수 혹은 그 이상의 여러 수의 공통인 약수 중, 최대인 것. 즉, 수들의 각각의 약수 중 공통이며 가장 큰 수를..

codingpractices.tistory.com

from sys import stdin
N,M= map(int,stdin.readline().split())

#최대공약수/큰것부터보기/둘 다 나뉘어지는거/가장 큰 거는 두 수 중 하나/1까지는 무조건 하나 있음
for i in range(min(N,M),0,-1): #1까지
    if N%i == 0 and M%i==0:
        print(i)
        break

#최소공배수/작은것부터보기/둘 다 나뉘어지는거/둘 중 하나가 가장 작은 것 후보/둘이 곱한 것까지는 무조건 하나 있음
for i in range(max(N,M),(N*M)+1): 
    if i%N == 0 and i%M==0:
        print(i)
        break

시간 초과????

 

백준 - 2609 (Python) - 최대공약수와 최소공배수

백준 2869 최대공약수와 최소공배수 앞서 포스팅했던 []**

velog.io

유클리드 호제법..?

import math

a, b = map(int, input().split())

print(math.gcd(a, b))
print(math.lcm(a, b))

파이썬 모듈 짱!


<은솜 - 1817번 짐 챙기는 숌>

은솜이 솜이라서 숌 가져온 거 귀엽다

from sys import stdin
N, M = map(int,stdin.readline().split())
Nlist = list(map(int,stdin.readline().split()))
if N == 0:
    print(0)
else:    
    result = 0
    box = 0
    for cha in Nlist:
        box += cha
        if (M < box):
            result += 1
            box = cha
            
    print(result+1)

<다예 - 1874 스택 수열>

ㅜ...오늘은 거의 힐링 문제였지만 이건 어려워.. 구글링하기

 

[백준] 1874번 스택 수열 (Python 파이썬)

www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6,..

hongcoding.tistory.com

from sys import stdin
N = int(stdin.readline())
stack = []
cha = 1
for i in range(1,N+1): # 1부터 N까지
    
    num = int(stdin.readline())
    while(cha<=num):#수 나올떄까지 스택 쌓기
        print("+")
        stack.append(cha)
        cha += 1
    if stack[-1] == num:# 같을 때 
        stack.pop()
        print("-")
    else:
        print("NO")
        break

틀림

from sys import stdin
N = int(stdin.readline())
stack = []
answer = []
cha = 1
k = True
for i in range(1,N+1): # 1부터 N까지
    
    num = int(stdin.readline())
    while(cha<=num):#수 나올때까지 스택 쌓기
        answer.append("+")
        stack.append(cha)
        cha += 1
    if stack[-1] == num:# 같을 때 
        stack.pop()
        answer.append("-")
    else:
        k = False
        print("NO")
        break
if k == True:
    for cha in answer:
        print(cha)

No일 때 + - 나오다가 NO 나오는구나..ㅎㅎ 

괜히 내 생각대로 하다가 망했었군

고수님의 코드는 다 이유가 있는 거였어


모두들 시험공부 화이팅!

시험기간엔 정기모임은 없지만 번개 스터디를 열 계획이다.

 

그리고 실버 2 진입!

오옝

 

그리고 한글날을 맞아서.. 글씨도 한글

손 제스처도 EC 말고 ㅇㅆ 로 했다~