파이썬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. 22. 18:33
728x90

학교에서 3d 프린터 교육기 개최되어 다녀왔습니당!

반응형
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  (0) 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
파이썬2021. 4. 16. 01:17
728x90

* CodeUp 6097

h,w=map(int,input().split())
#이중배열
arr = [[0 for j in range(w)] for i in range(h)]

n=int(input())

for k in range(n):
    l,d,x,y=map(int,input().split())

#print(l,d,x,y)

    if(d==0):  #가로
        for k in range(l):
            arr[x-1][y+k-1]=1
    else:
        for k in range(l):
            arr[x+k- 1][y-1] = 1

    # if(d==1):  #가로
    #     for k in range(l):
    #         arr[x][y+k]=1


for i in range(h):
    for j in range(w):
        print(arr[i][j], end=' ')
    print()

 

계속 에러가 났는데 arr[x+k-1][y-1]=1로 고치니 해결되었다 (편--안)

 

반응형
Posted by mminky