파이썬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. 5. 10. 21:32
728x90

# 1602
입력된 n의 절대값을 출력한다.
실수값일 경우 불필요한 0을 출력하지 않는다.
 
-> 불필요한 0을 출력하지 않는다. 부분이 힘들었던 것 같다.
보통 파이썬에서는 {:g}.format(10) 이런 식으로 이용하는 것 같은데 다음과 같이 '%.10g'로도 이용하는 것 같다.
'%g'로만 했더니 7자리에서 e가 뜨는 오류가 발생했다. 따라서 최대자리수를 늘려주었다.(%.10g)
 
[ 코드 ]
 

def fun_abs(n):
    abs_n=abs(n)
    print('%.10g'%abs_n)

a=float(input())
fun_abs(a)

 
(문제) codeup.kr/problem.php?id=1602


 
# 1610
첫째 줄에 문자열이 공백없이 입력된다.(문자열은 100글자 이하)
둘째 줄에 문자열의 시작위치와 글자 개수가 입력된다.
(첫글자는 시작위치가 0이다. 글자개수는 시작위치부터 출력할 글자 수를 의미한다.)
 
* print 할 때 줄바꿈 하지 않는 방법 : print(~~,end='')
 
[ 코드 ]
 

def mysubstr(word,start,count):
    for i in range(count):
        #끝이 개행문자x 띄어쓰기x (cde처럼 바로 뒤에 출력)
        print(word[start+i],end='')
w=input()
s,c=map(int,input().split())
mysubstr(w,s,c)

 
(문제) codeup.kr/problem.php?id=1610
 
 
 
# 1615
[ 틀린코드 ]

더보기
def self(start,fin):
    set_have_gen = set()

    for n in range(1,fin+1): #1부터 fin까지 (1+1 = 2)
        n_1000 = n//1000
        n = n%1000

        n_100 = n // 100
        n = n % 100

        n_10 = n // 10
        n_1 = n % 10

        generator = n_1 + n_10 + n_100 + n_1000 + n

        if(start <= generator <= fin):
            set_have_gen.add(generator)
    return set_have_gen


#값 입력
a,b = map(int, input().split())

set_total = set()
for i in range(a,b+1):
    set_total.add(i)
    # #int(generator가질 때), none type(self일 때)
    # if(type(self(i,a,b)) == int):
    #     sum_gen += self(i,a,b)

    # sum_total += i

set_self = set_total - self(a,b)
print(set_self)
print(sum(set_self))

 
[ 코드 ]
(미해결)
 
 
# 1620
[ 코드 ]

n=int(input())

div=1
s=0
while(s==0 or s>=10): #두자리 수일 때만 돌기
    s=0
    while(n>0):
        s+=int(n%10)
        n = int(n/10)
    n=s

print(s)

 
(문제) codeup.kr/problem.php?id=1620
 

 

반응형
Posted by mminky
파이썬2021. 4. 30. 10:32
728x90

* 파이썬 2차원 리스트 0으로 초기화

 #리스트 초기화 , list[세로][가로] arr = [[0 for col in range(m)] for row in range(n)]


* range 역방향
5,4,3,2,1 하고 싶으면 range(5,0,-1)

 for i in range(m,0,-1): #m ~1 역방향 출력


* 달팽이 직사각형 배열

with open('1.inp','r') as f: n,m=map(int,f.readline().split()) #n가로 m세로 #리스트 초기화 , list[세로][가로] arr = [[0 for col in range(m)] for row in range(n)] x,y=0,-1 num=1 #넣을 번호 add=1 #+1 or -1 for i in range(m,0,-1): #m ~1 역방향 출력 j= i +(n-m-1) for _ in range(i): y += add arr[x][y]=num num += 1 for _ in range(j): x += add arr[x][y]=num num += 1 add *= -1 #방향변경 #출력 확인 코드 for i in range(m+2): print(arr[i]) 

y=-1 로 두는 이유는 0부터 시작해야하기 때문이다.
x는 1부터 시작해야해서 x+=add 코드를 비슷하게 쓰려고 하면 y는 -1로 초기화 해준 후
y+=add를 통해서 0부터 시작할 수 있다.

x,y 한 번 씩 돈 후에는 add*=-1을 통해 방향을 변경한다.

반응형
Posted by mminky
파이썬2021. 4. 16. 03:55
728x90

[ 조건 ]

반드시 연속해서 반복해야 한다.

caggcaggatg는 cagg 반복이다.

caggatgcaggcagg 반복이 아니다.

 

 

[ 코드 ]

with open('input.txt','r') as f:
    s=f.readline()

#더 긴 문자열을 넣을 곳이므로 초기화는 짧은 문자열(빈문자열)로 한다.
tmp=''

for i in range(len(s)):
    for j in range(len(s)):
    
        #i~j 문자열(길이 j-i)과 j+1~(j+1)+(j-i)을 비교
        # 						-> 동일 길이끼리 비교
        if s[i:j+1]==s[j+1:(j+1)+(j-i)+1]:
            new_tmp=s[i:j+1]
            
            #문자 더 긴 걸로 tmp 바꿔주기(update)
            if(len(new_tmp)>len(tmp)):
                tmp=new_tmp
                
print(tmp)

 

주어진 문자열을 [0:1], [0:2], [0:3] ... [1:1], [1:2] ... [마지막:마지막] 이런 식으로 다 쪼갰다.

그리고 동일한 길이 만큼 더한 문자열과 같은지 비교했다.

같다면 new_tmp에 넣는다.

 

길이가 가장 긴 반복 문자열을 찾는 과정이기 때문에 len()을 이용해서 비교해 주었다.

 

 

 

※ 제 글이 도움이 되었다면 공감 부탁드려요 :)

반응형

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

[ Python ] 코드업 1602, 1610, 1615, 1620  (3) 2021.05.10
[ Python ] 달팽이 2차원 배열  (0) 2021.04.30
[ Python ] 6097  (0) 2021.04.16
[ 미해결 ] 6096  (0) 2021.04.16
CodeUp 6083 시간초과 문제 (해결)  (0) 2021.04.14
Posted by mminky