파이썬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. 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
파이썬2020. 2. 4. 16:41
728x90

파이썬의 기본 자료형은 int, string, float입니다.

그 중 string 즉, 문자열과 관련된 명령어에 대해 알아보겠습니다.

 

파이썬은 문자를 선언할 때, int a이런식으로 하지 않아도 돼서 좋더라구요!

mystring = 'hello world'라고 입력하면 자동으로 mystring의 타입은 string으로 지정됩니다.

 

1) len()

  : 문자열의 길이 구하기

위와 같이 입력하면 결과창에 11이 나타나는 것을 알 수 있습니다.

공백을 포함해서 h,e,l,l,o, ,w,o,r,l,d 총 11자가 맞죠?

 

2) .split()

  : 문자열 나누기

split함수는 괄호 안에있는 문자를 기준으로 문자열을 나눕니다.

그리고 리스트로 반환하기 때문에 [0], [1], [2] 등 인덱스를 이용할 수 있습니다.

('리스트'는 나중에 배울 것이기 때문에 그냥 그렇구나~하고 넘어가시면 됩니다!)

 

공백을 기준으로 문자열을 나누려면 split(' ')을 이용하면 됩니다.

hello world를 공백을 기준으로 나누면 hello와 world겠죠?

따라서 출력을 해보면 다음과 같습니다.

 

3) +

  : 문자열 병합

파이썬에서는 간단히 '+' 기호로 문자열을 병합할 수 있습니다.

이렇게 a + 공백 + b를 하면 hello world가 출력되는 것을 알 수 있습니다.

 

4) join()

  : 리스트의 문자열 병합

괄호 내의 문자를 넣어서 리스트의 모든 문자열을 병합합니다.

mylist라는 리스트에 First, Second, Third가 있습니다.

순서대로 "공백", "<>", "/"를 기준으로 병합했습니다.

join 결과창

위와 같이 문자열 사이에 지정한 문자(공백, <>, /)가 들어간 것을 확인 할 수 있습니다.

 

5) 문자열[ 시작 : 끝 ]

  : 슬라이싱 연산자

문자열 index

문자열의 인덱스를 위와 같이 생각하면 이해하기 쉬울 것입니다.

 

예를 들어 mystr[1]을 하면 1이 시작되는 위치인 e가 나오는 것을 알 수 있습니다.

 

여러 문자를 출력하고 싶다면 mystr[1:4]와 같이 범위를 지정해주면 됩니다.

1부터 4까지

1부터 4까지 하면 e,l,l이 선택됩니다. 따라서 결과창에는 ell이 나오게 되겠죠?

만약 4번부터 끝까지 출력하고 싶다면 mystr[4:]를,

처음부터 4번까지 출력하고 싶다면 mystr[:4]를 하면 됩니다.

이때,  : index 0으로 생각하면 이해하기 쉬울 것입니다.

mystr[:4]는 0~4로 생각하면 쉽습니다.

따라서 결과는 hell이 되겠죠?

 

mystr[4:]는 4~끝 으로 생각하면 쉽습니다.

따라서 o world가 출력됩니다.

실제 결과창은 다음과 같습니다.

 

오른쪽부터 읽어오고 싶다면 음수 인덱스를 이용하면 됩니다.

예를 들어 mystr[-3]을 해보겠습니다.

따라서 r이 출력됩니다.

 

음수 인덱스 역시 mystr[-2:], mystr[:-2] 이렇게 이용 가능합니다.

mystr[-2:]는 -2 ~ 0을 의미합니다.

따라서 ld가 출력됩니다.

 

mystr[:-2]는 0 ~ -2를 의미합니다.

따라서 hello wor가 출력됩니다.

 

------------------------------------------------------------------------------------------------------------------------------

 

아래 사이트에 연습문제와 설명이 잘 나와있으니 참고하시는 것도 좋을 듯 합니다!

다들 파이팅!!

https://wikidocs.net/2843

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

문의사항이나 수정사항 있으면 댓글 부탁드립니다:)

반응형
Posted by mminky