파이썬2021. 5. 31. 00:34
728x90

[ 문제 ]

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

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

[ 코드 ]

#시간초과 시 추가하면 좋은 구문
# https://www.acmicpc.net/board/view/44990
import sys
input=sys.stdin.readline

n = int(input()) #명령의 수
stack=[]

def push(x):
    #리스트의 마지막에 추가
    stack.append(x) #딱히 int(x)할 필요는 없을 듯

def pop():
    if(len(stack)==0):
        print(-1)
    else:
        print(stack.pop())

def size():
    print(len(stack))

def empty():
    if(len(stack)==0): #비면
        print(1)
    else: #안 비면
        print(0)

def top():
    if(len(stack)==0):
        print(-1)
    else:
        print(stack[-1])


for i in range(n):
    command=input().split() #push 1 같은 애들 분리
    if(command[0] == 'push'):
        push(command[1])
    if (command[0] == 'pop'):
        pop()
    if (command[0] == 'size'):
        size()
    if (command[0] == 'empty'):
        empty()
    if (command[0] == 'top'):
        top()

 

 

[ 결과 ]

반응형

'파이썬' 카테고리의 다른 글

[ Python ] 백준 11729 - 시간초과 해결!!  (0) 2021.06.06
[ Python ] 백준 13300 파이썬  (0) 2021.05.31
[ Python ] 백준 1735 파이썬  (0) 2021.05.31
[ Python ] 백준 1475 파이썬  (0) 2021.05.31
[ Python ] 백준 1453 파이썬  (0) 2021.05.31
Posted by mminky
파이썬2021. 5. 31. 00:28
728x90

[ 문제 ]

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

 

1735번: 분수 합

첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.

www.acmicpc.net

 

 

[ 코드 ]

 

import sys
input=sys.stdin.readline

a1,a2=map(int,input().split()) #a1/a2 분수
b1,b2=map(int,input().split())

#최소공배수 구하기
def lcm(x,y):
    for i in range(x,(x*y)+1): # x ~ x*y
        if(i%x==0 and i%y==0):
            return i
#최대공약수 구하기
def gcd(x,y):
    #y가 0될 때 까지
    while y:
        x,y  = y, x%y
    return x

#분모 denominator
denom = lcm(a2,b2)

#분자 numerator
num = a1*(denom/a2) + b1*(denom/b2)

#분자분모의 최대공약수로 나눌거임
div = gcd(num,denom)
denom /= div
num /= div

print(int(num),int(denom))

 

 

[ 결과 ]

반응형

'파이썬' 카테고리의 다른 글

[ Python ] 백준 13300 파이썬  (0) 2021.05.31
[ Python ] 백준 10828 파이썬  (0) 2021.05.31
[ Python ] 백준 1475 파이썬  (0) 2021.05.31
[ Python ] 백준 1453 파이썬  (0) 2021.05.31
[ Python ] 문자열 replace로 swap 하기  (0) 2021.05.29
Posted by mminky
파이썬2021. 5. 31. 00:17
728x90

[ 문제 ]

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

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

 

 

[ 코드 ]

 

n = input() #다솜이 방번호를 string으로
card=[0]*10 #0~9까지 번호
card_6n9 = 0

for i in n:
    if(i=='6' or i=='9'): #6,9 동일취급
        card_6n9 += 1
    else:
        card[int(i)] += 1

#6, 9 개수 결정
if(card_6n9 % 2 == 0):
    card_6n9 = card_6n9//2
else:
    card_6n9 = card_6n9//2 + 1

card[6] = card_6n9

#card에 있는 것들 중 최대값이 세트의 개수
print(max(card))


#n = int(input()) #다솜이 방번호
# card=[0]*9 #0~8까지 번호 (9는 따로)
# card_6n9 = 0
#
# while(n!=0):
#     a= n % 10
#     if(a==6 or a==9): #6이랑 9랑 같이 취급
#         card_6n9 += 1
#     else:
#         card[a] += 1
# #    n_arr.append(a)
#     n = n//10
#
# #n_arr.sort() #같은애들끼리 모음
#
# #01234578: 한 세트에 한 개
# #6 9 : 한 세트에 두 개 -> 올림
# if(card_6n9%2 == 0):
#     card_6n9 = card_6n9//2
# else:
#     card_6n9 = card_6n9//2 + 1
#
# set=max(max(card) , card_6n9)
# print(set)

 

 

[ 결과 ]

반응형
Posted by mminky
파이썬2021. 5. 31. 00:12
728x90

[ 문제 ]

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

 

1453번: 피시방 알바

첫째 줄에 손님의 수 N이 주어진다. N은 100보다 작거나 같다. 둘째 줄에 손님이 들어오는 순서대로 각 손님이 앉고 싶어하는 자리가 입력으로 주어진다.

www.acmicpc.net

 

[ 코드 ]

 

n=int(input()) #손님 수 n
seat=map(int,input().split()) #손님 별 원하는자리
pc=[0]*101 #1~100 컴퓨터
reject_cus = 0 #거절당하는 손님

for a in seat:
    if(pc[a]==0): #손님 원하는 자리 비어있으면
        pc[a] += 1
    else:
        reject_cus +=1

print(reject_cus)

 

 

[ 결과 ]

 

 

반응형
Posted by mminky
파이썬2021. 5. 29. 21:58
728x90

* 파이썬의 장점 SWAP!!

a,b = b,a 이렇게 입력하면

a값은 b에, b값은 a에 들어가게 된다. 이런 것을 swap 이라고 한다.

 

문자열은 이렇게 할 수 없을까 찾아봤는데 특별한 방법은 없는 것 같다.

하지만 이렇게 하면 된다!

 

예를 들어 a는 b로 , b는 a로 바꾸고 싶다면

다음과 같이 replace를 이용하면 된다.

 

[ 코드 ]

s='a1 < b < a2'
s_=s.replace('a','@').replace('b','a').replace('@','b')
print(s_)

 

[ 결과 ]

 

 

* 만약 s.replace('a','b').replace('b','a')를 하게 되면 원치 않는 결과가 나온다.

    a1<b<a2

-> b1<b<b2  #a가 모두 b로 바뀜ㅠ

-> a1<a<a2   #b가 모두 a로 바뀜

 

 

* 따라서 나는 a를 안 쓰는 문자 '@'로 변경한 후, b를 a로 변경했다. 그리고 @를 b로 변경했다.

    a1<b<a2

-> @1<b<@2  #a를 @로 바꿈

-> @1<a<@2  #b를 a로 바꿈

-> b1<a<b2    #@를 b로 바꿈

 

 

 

 

 

- 참고 -

더보기

[ 코드 ]

s='box.__high_x<self.__low_x or self.__high_x<box.__low_'
s_=s.replace('self','@').replace('box','self').replace('@','box')
print(s_)

 

 

[ 결과 ]

 

반응형
Posted by mminky
파이썬2021. 5. 26. 13:58
728x90

* 문제

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

 

2445번: 별 찍기 - 8

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

* 풀이

n=int(input())
for i in range(1, n+1): #1~2n
    print('*' * i + ' ' * (n - i) + ' ' * (n - i) + '*' * i)
for i in range(n-1, 0, -1): # n-1 ~ 1
    print('*' * i + ' ' * (n - i) + ' ' * (n - i) + '*' * i)

 

 

* 결과

반응형
Posted by mminky
파이썬2021. 4. 12. 15:09
728x90

* 리스트 추가

.append()

 

* 리스트 원소 삭제

.pop

.remove

del

 

 

* 리스트 슬라이싱

 

1) 이용방법

 

이렇게 이용하면 (시작)~(끝-1)까지의 항목들이 담긴다.

리스트명[시작:]

 

이런 리스트가 있다고 가정해보자.

n_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

n_list=[]
for i in range(15):
    n_list.append(i)

print(n_list)

 

* 0에서 4까지 분할

[0, 1, 2, 3, 4]

s_list1=n_list[0:5]
print(s_list1)

 

 

2) 간격

 

리스트명[시작::간격]

 

* 간격2로 분할

[2, 4, 6, 8, 10]

#간격 (2부터 11까지 2 간격)
s_list4=n_list[2:11:2]
print(s_list4)

 

 

3) 역순

 

리스트명[시작::-1]

 

* 역순 출력

[10, 9, 8, 7, 6]

#역순출력 (10부터 6까지 역순으로)
s_list5=n_list[10:5:-1]
print(s_list5)

 

* 역순, 간격 2

[10, 8, 6, 4, 2]

#10부터 2까지 역순, 간격2
s_list6=n_list[10:1:-2]
print(s_list6)

 

 

반응형
Posted by mminky
파이썬2021. 4. 2. 12:45
728x90

[ 문제 ]

다음의 파일의 내용을 띄어쓰기를 기준으로 읽어들인 후

리스트에 저장해서 정렬 후

각 값을 a, b, c에 저장하고자 한다.

2.inp 내용

 

[ 주요 요점 ]

 

* 문자열.split()을 하면 파이썬에서는 리스트로 변환된다.

 

with open('2.inp','r') as f:
    f_line=f.readline() #파일 한 줄 읽어오기
    f_list=f_line.split() #그 줄을 list에 저장
    print(f_list)

 

문자열 리스트로 출력됨

 

 

* 문자열 리스트(f_list) 를 정수 리스트로 변환

f_list=list(map(int,f_list))
print(f_list)

 

정수 리스트로 출력됨

 

 

* 리스트 정렬

f_list.sort()
print(f_list)

 

정렬 된 정수 리스트로 출력됨

 

 


[ 전체 코드 ]

with open('2.inp','r') as f:
    f_line=f.readline() #파일 한 줄 읽어오기
    f_list=f_line.split() #그 줄을 list에 저장

    #정수list로 변환
    f_list=list(map(int,f_list))

    #a<b<c 정렬
    f_list.sort()

	#a,b,c에 각 값을 저장
    a= f_list[0]
    b= f_list[1]
    c= f_list[2]
    
    #결과 출력
    print(str(a)+' '+str(b)+' '+str(c))

 

[ 결과 ]

출력이 잘 되었다 :)

 

 

반응형
Posted by mminky