위니브 엠버서더

[위니브 엠버서더 3기] 파이썬 코딩테스트 기초 입문 강의 6주차 도전

하양 :) 2024. 8. 30. 16:09
반응형

엠베서더 마지막 활동인데..

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%도 완료해서 알고리즘과 좀 더 친해질 수 있는 하양이 되도록 하겠습니다....

 

 

 

강의를 들으면서 내가 고민했던 방식과, 알려주시는 방식의 차이를 느끼며 

굉장히 도움이 많이 됐고 더 다양한 방법이 존재할 것이라는 생각에 알고리즘 공부는 끝이 없구나 라는 것을 깨달았다.

 

답을 찾는 것보다 어떻게 해결해나갈 수 있을지 다양한 방식을 고민하고 효율적인 방법을 찾아내는 능력을 기를 때까지

노력해야겠다! 😊

 

 

 

 

 

 

<해당 강의 링크>

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-100%EC%A0%9C-%EC%A0%9C%EC%A3%BC%EC%BD%94%EB%94%A9%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%BA%A0%ED%94%84#

 

제주코딩베이스캠프 Code Festival: Python 100제 강의 | 제주코딩베이스캠프 - 인프런

제주코딩베이스캠프 | 이 강좌를 통해 문법을 보다 명확하게 이해하시고, 문제 풀이에 대한 자신감을 얻으시길 바랍니다., [사진]     [사진] 안녕하세요! 제주코딩베이스캠프입니다 :) 이번에는

www.inflearn.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형