엠베서더 마지막 활동인데..
100제를 기간 안에 끝내지 못한 부분 .....
너무 속상하지만, 활동은 끝나도 문제는 끝까지 풀기로 다짐!
6주차 공부 기록
저번에 이어서 내가 메모하고 싶은 문제들만 정리해보았다.
==========================================================================================
문제 58번. (콤마 찍기)
해당 문제는 format 함수를 쓰니 너무 쉽게 끝나버려서 약간 허탈했지만,
이 문제가 꼬아져서 나오면 재귀함수로 풀어내야하기 때문에 반드시 다른 방식의 내용도 알아둬야 한다고 생각이 들었다.
## 1) 재귀함수
def 정산1(price):
if len(price) <= 3:
return price
else:
print(len(price))
return 정산1(price[:-3]) + ',' + price[-3:]
정산1(price)
==================================================================
## 2) format 함수
format(int(price), ',')
==========================================================================================
문제 59번. (빈칸 채우기)
나는 그냥 단순하게 함수를 만들어서 풀었다.
## 1) 내가 푼 방법
s = "hello"
def 빈칸채우기(s):
기호개수 = (50-len(s))//2
return '='*기호개수 + s + '='*(50-기호개수-len(s))
a = 빈칸채우기(s)
print(a)
print(len(a))
근데 더 쉬운 방법이 있었다...!
## 2) 정렬 format 이용
s = 'hello'
print("{0:=^50}".format(s))
==========================================================================================
문제 60번. (enumerate)
enumerate는
각 리스트의 항목들을 인덱스와 함께 튜플 형태로 묶어주는 함수이다.
## 1) 반복문 사용
student = ['강은지', '김유정', '박현서', '최성훈', '홍유진', '박지호', '권윤일', '김채리', '한지호', '김진이', '김민호', '강채연']
l = sorted(student)
for n, name in enumerate(l):
print('번호 : {} , 이름 : {}'.format(n, name) )
==========================================================================================
문제 61번. (문자열 압축하기)
이 문제는 앞에서 배운 것들을 토대로 나름 쉬운 편에 속했지만,
정규표현식을 사용한 방법도 있다는 것을 배울 수 있었다.
s = input()
count = 0
string = s[0]
result = ''
for i in s:
if i == string:
count += 1
else:
result += str(count) + string
string = i
count = 1
result += str(count) + string
print(result)
***********************************
>> 정규표현식 사용
## 2) 정규표현식 사용
import re
input_user = input()
rule = re.compile('[a-c]+')
one = re.findall('b', input_user)
two = re.findall(rule, input_user)
three = re.findall('(\\w)(\\1*)', input_user)
print(one)
print(two)
print(three)
s = ''
for i, j in three:
print(i,j)
s += str(len(j) + 1) + i
print(s)
==========================================================================================
문제 62번. (20190923 출력하기)
이 문제는 제약 조건들 때문에 굉장히 어렵게 생각하고 고민했는데,
강의에서 알려주신 방법으로 이마를 탁! 쳤다.
그냥 print로 일일이 출력하셨다...
s = 'abbcccddddddddd'
print(s.count('b'), end='') #2
print(s.count('e'), end='') #0
print(s.count('a'), end='') #1
print(s.count('d'), end='') #9
print(s.count('e'), end='') #0
print(s.count('d'), end='') #9
print(s.count('b'), end='') #2
print(s.count('c'), end='') #3
==========================================================================================
문제 63번. (앞글자만 줄임말)
이 문제는 어렵지 않아서 혼자 푼 것과 강의의 풀이가 비슷했다.
문장 = input().split(' ')
def 줄임말(s):
total = ''
for i in s:
total += i[0]
return total
줄임말(문장)
==========================================================================================
문제 64번. (정량 N 에 맞춰야하는 엘레베이터)
이 문제도 내 풀이와 강의가 크게 다르진 않았다.
강의에선 while문 안에 모두 다 넣었고, 나는 if 문으로 7의 배수일 때와 아닐 때를 나눈 뒤 반복조건문을 사용했다.
N = int(input())
count = 0
# 7의 배수이면 바로 count 확정
if (N % 7) // 3 == 0 :
count = (N // 7) + (N - (N//7)) // 3
print(count)
# 아닐 경우, 3을 하나씩 빼면서 배수 확인
else:
while True:
N -= 3
count +=1
if (N % 7) == 0:
count += (N // 7)
print(count)
break
if N < 2:
print(-1)
break
=========================================================================================
문제 65번. (리스트 번갈아 섞어서 출력)
해당 문제는 풀이 방법이 여러가지여서 모두 기록해 놓고자 한다.
>> 1. for문( 내가 풀었던 방식)
## 1번) for 문 방식
a = [1, 2, 3, 4]
b = ['a', 'b', 'c', 'd']
list(enumerate(zip(a,b)))
result = []
for i in range(len(a)):
if i % 2 == 0:
result.append([a[i], b[i]])
else:
result.append([b[i], a[i]])
print(result)
>> 2. enumerate 사용 후 (반복문 or 리스트 컴프리헨션) 방식
## 2번) 리스트 컴프리헨션 방식
a = [1, 2, 3, 4]
b = ['a', 'b', 'c', 'd']
result = [[x, y] if i % 2 == 0 else [y, x] for i, (x, y) in enumerate(zip(a, b))]
print(result)
## 2-1번) 2번을 for문으로 풀어서 작성
a = [1, 2, 3, 4]
b = ['a', 'b', 'c', 'd']
result = []
for i, (x, y) in enumerate(zip(a,b)):
if i % 2 ==0:
result.append([x,y])
else :
result.append([y,x])
print(result)
>> 3. enumerate 없이 for 문 (강의 방식)
## 3) enumerate 없이 작성
a = [1, 2, 3, 4]
b = ['a', 'b', 'c', 'd']
result = []
count = 0
for x, y in zip(a,b):
if count % 2 == 0:
result.append([x,y])
else :
result.append([y,x])
count += 1
print(result)
=========================================================================================
비록 3개월 동안 많은 시간을 투자하지 못해서 70% 정도만 완료한 상태이지만,
남은 30%도 완료해서 알고리즘과 좀 더 친해질 수 있는 하양이 되도록 하겠습니다....
강의를 들으면서 내가 고민했던 방식과, 알려주시는 방식의 차이를 느끼며
굉장히 도움이 많이 됐고 더 다양한 방법이 존재할 것이라는 생각에 알고리즘 공부는 끝이 없구나 라는 것을 깨달았다.
답을 찾는 것보다 어떻게 해결해나갈 수 있을지 다양한 방식을 고민하고 효율적인 방법을 찾아내는 능력을 기를 때까지
노력해야겠다! 😊
<해당 강의 링크>
'위니브 엠버서더' 카테고리의 다른 글
[위니브 엠베서더 3기] 제주 하간디 이신 데이터들 Python으로 몬딱 분석해불게 수강후기 (0) | 2024.08.29 |
---|---|
[위니브 엠버서더 3기] 파이썬 코딩테스트 기초 입문 강의 5주차 도전 (2) | 2024.08.27 |
[위니브 엠버서더 3기] Python 엑셀 프로그래밍 - with xlsxwriter 수강 후기 (0) | 2024.08.23 |
[위니브 엠버서더 3기] 파이썬 코딩테스트 기초 입문 강의 4주차 도전 (0) | 2024.07.30 |
[위니브 엠버서더 3기] 아주 쉽다 클라우드! AWS Lightsail 자습서! 인프런 클라우드 강의 수강 후기 (13) | 2024.07.30 |