티스토리 뷰

파이썬/파이썬 문제

구현-(문제1)

백수진 2021. 8. 1. 19:57

1.럭키 스트레이트

=>반으로 나누어 동일한 합을 가지면 LUCKY 출력

n = input()
m = len(n)//2

sum=0
sum2=0

for i in range(0,m):
    sum += int(n[i])

for i in range(m,len(n)):
    sum2 += int(n[i])
 

if sum==sum2:
    print("LUCKY")
else:
    print("READY")

2. 문자열 재정렬

=> 알파벳은 정렬하고 숫자는 숫자끼리 합쳐서 가장 마지막에 넣기

s = input()
s2=[]
sum=0

for i in range(0,len(s)):
    if s[i]>='A' and s[i]<='Z':
         s2.append(s[i])
    else:
        sum += int(s[i])

s2.sort()
s2.append(str(sum))


for i in range(0,len(s2)-1):
    s2[i+1] = s2[i]+s2[i+1]

s3=s2[len(s2)-1]
print(s3)

3. 문자열 압축문제

5번케이스 런타임에러

https://programmers.co.kr/learn/courses/30/lessons/60057?language=python3 => 문제 사이트

 

def solution(s):
    
    answer = 0
    len_list=[]
    max_len = len(s)//2
    
    for i in range(1,max_len+1):
        j=0
        cnt=1
        s2=""
        count = len(s)//i-1
        while True:
            if j>count*i:
                    s2 += s[j:len(s)]
                    len_list.append(len(s2))
                    break
            else:
                if s[j:j+i]==s[j+i:j+2*i]:
                    cnt+=1
                    j=j+i
                else:
                    if cnt==1:
                        s2 += s[j:j+i]
                    else:
                        s2 += str(cnt)+s[j:j+i]
                    cnt=1
                    j=j+i
        
    
    answer = min(len_list)
    return answer

 => 런타임에러를 해결할 필요가 있어보임


알고리즘 스터디 중 해결

채점 결과 정확성 100

def solution(s):
    len_list=[]
    max_len = len(s)//2
    answer = 0
    
    for i in range(1,max_len+2):
        j=0
        cnt=1
        s2=""
        count = len(s)//i-1
        while True:
            if j>count*i:
                    s2 += s[j:len(s)]
                    #print(s2)
                    len_list.append(len(s2))
                    break
            else:
                if s[j:j+i]==s[j+i:j+2*i]:
                    #print(s[j:j+i],end =' ')
                    cnt+=1
                    j=j+i
                else:
                    if cnt==1:
                        s2 += s[j:j+i]
                    else:
                        s2 += str(cnt)+s[j:j+i]
                        #print("#")
                    cnt=1
                    j=j+i
        
    
    answer = min(len_list)
    return answer

a 를 넣었을 때 max_len 은 0이 되기때문에 => range(1,1)가 됨. 때문에 for문을 돌지 않았던 이전 코드 => max_len+1에서 +1을 하여 입력한 값이 하나의 문자였을 때도 for문을 돌 수 있게 해줌.

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

greedy-(2)  (0) 2021.08.01
greedy-(1)  (0) 2021.08.01
그리디 알고리즘-2  (0) 2021.07.19
그리디 알고리즘 -(1)  (0) 2021.07.18
2644 - 촌수계산  (0) 2021.04.01