[백준] 수학3 #2, 스택

ddalkigum·2020년 12월 9일
2

알고리즘

목록 보기
3/15
post-thumbnail

수학3

백준 2609 최대공약수와 최소공배수

문제

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

풀이

n,m = list(map(int, input().split()))
b=0

for i in range(m, 0, -1):
    if m%i == 0 and n%i ==0:
        b =i
        break
a = m*n / b

print(b)
print(int(a))

for문을 역순으로 돌려서 조건이 만족할때 break
최소 공배수 = 두수를 곱한 수에서 최대 공약수를 나눠주면 된다.


백준

문제

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

풀이

N = int(input())
arr = list(map(int, input().split()))
a = 0

for i in range(len(arr)):
    if i == 0:
        pass
    else:
        for j in range(arr[i], 0, -1):
            if arr[0]%j ==0 and arr[i]%j ==0:
                a = j
                top = int(arr[0]//a)
                bottom = int(arr[i]//a)
                print("%d/%d" % (top,bottom))
                break;

제일 처음 수와 각 자리수의 최대공약수를 각각 구해주고,
최대공약수를 이용해 12와 각 자릿수를 나누어준 몫을 구해줘서 출력


스택

백준 10828 스택

문제

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

풀이

import sys

N = int(sys.stdin.readline())
arr= []

for _ in range(N):
    word = input()
    if "push" in word:
        word = word[4:]
        arr.append(int(word))
    elif word =="pop":
        if len(arr)==0:
            print(-1)
        else:
            print(arr[-1])
            del arr[-1]
    elif word =="size":
        print(len(arr))
    elif word =="empty":
        if len(arr) == 0:
            print(1)
        else:
            print(0)
    elif word =="top":
        if len(arr) == 0:
            print(-1)
        else:    
            print(arr[-1])

그렇다.. 시간제한문제다
이렇게 무턱대고 막써버리면 무조건 시간 초과가 난다.
시간복잡도에 대해서 공부를 해야겟다

조금더 고민해봐야 할 것같다...
어떻게 시간을 줄일지


백준 10773 제로

문제

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

풀이

N = int(input())
arr=[]

for i in range(N):
    number = int(input())
    if number != 0:
        arr.append(number)
    else:
        del arr[-1]
print(sum(arr))

처음 보고 응? 했던 문제다
돈 관리는 재현이 같은애가 해야된다
그래야 이런 문제가 안나오지 😡😡😡😡

문제에 나와있듯이 조건이 너무나 확실하게 나와있어서
있는 그대로 풀어줬다.


백준 9012 괄호

문제

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

풀이

N = int(input())

for _ in range(N):
    a_count = 0
    b_count = 0
    arr =str(input())
    if arr[-1] =="(":
        print("NO")
    elif arr[0] ==")":
        print("NO")
    else:
        for i in arr:
            if i == "(":
                a_count += 1
            elif i == ")":
                b_count += 1
            if a_count < b_count:
                break
        if a_count == b_count:
            print("YES")
        else:
            print("NO")

이 문제에서는 서로 짝을 이루기 때문에 두개의 숫자가 같아야 한다
첫 조건을 서로 반대의 방향을 보는 조건을 제외시켜주고

두개의 숫자를 세는데 여기서 "(" 의 갯수가 ")"의 갯수보다
적어지게 되면 쌍을 이루지 않게 되니까
멈추고 프린트를 해줫다


쉬운문제를 위주로 좀 풀어보려고하는데,
아직은 어려운 문제를 풀면 멘붕이 너무 자주와서
다시 감 좀 찾고 어려운 문제에 도전해보겠습니다.... 🐒🐒

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

2개의 댓글

comment-user-thumbnail
2020년 12월 15일

Hello, I enjoy reading all of your article. I like to write a little comment to support you.JOKER123

1개의 답글