문제 1. 럭키 스트레이트 (난이도 1, 풀이시간 5분/20분, 정답)
#4:45
N = input()
left_list = list(map(int,N[:(len(N)+1)//2]))
right_list = list(map(int,N[(len(N)+1)//2:]))
left_sum = sum(left_list)
right_sum = sum(right_list)
if left_sum == right_sum:
print('LUCKY')
else:
print('READY')
- 나눗셈(/) 연산 후엔 정수형이 아니라 실수형이라는 걸 명심해두길
문제 2. 문자열 재정렬 (난이도 1, 풀이시간 20분/20분, 정답)
#4:58
S = list(input())
num = 0
for x,y in enumerate(S):
if ord('0')<= ord(y) <= ord('9'):
num += int(y)
S = [x for x in S if not ord('0')<= ord(x) <= ord('9')]
S = sorted(S, key= lambda x: x[0])
res = ''
for i in S:
res += i
res += str(num)
print(res)
- for문에서 pop하니까 특정 index가 씹히는 현상이 있음, 그냥 따로 숫자끼리 더하고 문자열 저장 리스트를 만드는게 편한 듯
- isalpha() : 알파벳 확인 함수
- ''.join(list) : 리스트 문자열화
문제 3. 문자열 압축 (난이도 1.5, 풀이시간 1시간30분/30분, 풀이참고 정답)
#6:00
def solution(s):
num = 1
min = 1e9
if len(s) == 1:
return 1
while num <= len(s)//2:
i = 0
res = []
cnt = 1
while num*(i+2) <= len(s):
now = s[num*(i):num*(i+1)]
next = s[num*(i+1):num*(i+2)]
if now == next:
cnt += 1
elif cnt == 1:
res.append(now)
cnt = 1
else:
res.append(str(cnt))
res.append(now)
cnt = 1
i += 1
i -= 1
if now == next:
res.append(str(cnt))
res.append(next)
else:
res.append(next)
res.append(s[num*(i+2):])
res_str = ''.join(res)
if min > len(res_str):
min = len(res_str)
#print(res_str)
num += 1
return min
- 문제 자체를 제대로 이해 못 하던 중에 조건에 무조건 일정단위로 단어를 잘라야한다는 조건을 발견하고 풀이 가능
- 입력 길이가 1일 때 제대로 동작하지 않아서 따로 처리해줘야했음, 다음부터는 입력값의 범위 전체가 내가 생각한 코드에서 동작하는지 생각해볼 것 (1 따로 처리 전에는 2부터 동작 가능)