위니브 엠버서더

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

하양 :) 2024. 7. 30. 16:18
반응형

열심히 해야하는데...

쉽지 않다.

 

프로그래밍 언어도 영어공부처럼 잠깐 쉬면 그새 까먹는 것 같다.

학습량이 적더라도 지속적으로 하는 것이 중요하다는 생각이 든다.

 

그러니 포기하지 말고 이어서 시작!

 

 

4주차 공부 기록

 

 

저번에 이어서 39번부터 차근차근 문제를 확인하며 내가 메모하고 싶은 문제들만 정리해보았다.

 

==========================================================================================

 

문제 39번.

 

 

문제를 딱 보자마자 replaceall이 떠올랐는데, python에서는 어떤 메소드를 사용하는지 가물가물했다.

 

**********************************

 

1. 기본적인 방법 (메서드 체인)

data = input()

data.replace('q', 'e').replace('b','n')

 

 

2. 정규표현식 사용 (sub 메소드로 대체)

import re

data = re.sub('q', 'e', data)
# print(re.sub('b', 'n', data))

 

 

==========================================================================================

 

 

 

문제 40번.

 

제한무게 = int(input('제한 무게를 입력해주세요.'))

친구수 = int(input('총 친구의 수를 입력해주세요.'))
친구들몸무게 = []
x = 0

for i in range(친구수):
    친구들몸무게.append(int(input('몸무게 입력해주세요.')))

for i in range(len(친구들몸무게)):
    x += 친구들몸무게[i]
    if x > 제한무게:
        print('{}명까지 탑승할 수 있습니다.'.format(i))
        break

 

어떤 방식으로 접근해야하나 고민이 됐었는데

친구들 몸무게를 리스트에 받아준 뒤 순서대로 하나씩 더해나가다가,

조건문에 해당될 때 멈춰서 명수를 체크하는 방법으로 풀어나가는 것을 보고..

 

너무 어렵게 고민했다는 생각이 들었다.

 

처음부터 완벽한 방법을 생각해내려고 했던 접근이 좀 아쉬웠다.

 


==========================================================================================

 

 

 

문제 41번.

 

소수의 정의가 무엇인지부터 생각해서 접근해야하는 문제다.

 

소수는 나누었을 때 나머지가 0이 될 때가 "1과 자기 자신"일 때만 있어야 한다.

 

 

# 1. 내가 혼자 구현해본 방법

입력값 = int(input('값을 입력해주세요.'))
count = 2
Flag = True

if 입력값 <= 1:
	print("NO")

while count < 입력값:
    if 입력값 % count == 0:
        Flag = False
        print('NO')
        break
    count += 1
    
if Flag:
    print('YES')
    
    
    ===================================================
    
    
 # 2. 강의에서 알려준 방법
 
 x = int(input())
 for i in range(x):
 	if x <=1:
    	print('소수가 아닙니다.')
     
    elif x == 2:
    	print('소수입니다.')
        break
        
    elif x % i == 0:
    	print('소수가 아닙니다.')
        break
    
    else:
    	print('소수입니다.')
        
        
 ---> 이 경우에는 진짜 각각 조건의 경우를 나눠서 하는 방법임
 
     ===================================================
    

# 3. 함수로 만들기

def check_prime(n):
	if n <= 1:
		return "NO"
    
    i = 2
    소수 = True
    
    while (i**2) < n:
    	if n % i == 0:
        	소수 = False
            break
        i += 1
    if 소수:
    	return "YES"
    else:
    	return "NO"

 

 

내가 혼자 짜본 방법은 강의에서 함수로 비슷하게 구현하였다.

 

아주 기초적인 문제긴 하지만, 혼자 생각해냈다는 데 의의를 두고 뿌듯했다. 😍

 


==========================================================================================

 

 

문제 42번.

 

 

 

datetime 모듈을 사용하는 문제

 

# datetime 메소드 
# datetime.datetime (datetime 모듈에서 datetime 객체를 생성)
# datetime.datetime.time() (datetime 객체에서 시간 속성만 뽑겠다)


import datetime

def findDay(a, b):
    day = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
    
    # weekday() : 요일 반환 , {월:0, 화:1, 수:2, 목:3, 금:4, 토:5, 일:6}    
    return day[datetime.date(2024, a, b).weekday()]


# 실제 함수 적용
m, d = map(int, input().split())

print(findDay(m, d))


==================================================================



# 2. 리스트 대신 strftime() 메소드 사용

def findDay2(a, b):
       
    # weekday() : 요일 반환 , {월:0, 화:1, 수:2, 목:3, 금:4, 토:5, 일:6}    
    day = datetime.date(2024, a, b)
    
    # strftime() 은 weekday대신 바로 전환해줌 ('%Y': 4자리 연도, '%m' : 2자리 월, '%d' : 2자리 일, '%H' : 2자리 시간, ...)
    return day.strftime('%A')

m, d = map(int, input().split())

print(findDay2(m, d))

 

 

 

 


==========================================================================================

 

 

문제 43번.

 

 

# 1. bin 메소드 사용

bin(13)

# 2. 나누기로 직접 계산

a = int(input())
b = []

while a : # a가 2 미만이 되면 int(a//2)가 0이 되면서 false==0가 됨
    print(a)
    
    # b에는 나머지 (0or1) 순서대로 저장
    b.append(str(a%2))
    
    # a 는 몫을 다시 대입
    a = int(a//2)
  
# 뒷자리부터 순서대로 리스트에 들어가있으므로 reverse 해줘야 함
print(b.reverse())

# 이진수로 리스트 값을 붙여서 표현
print(''.join(b))




# 문제 44 (각 자리수의 합)
data = input()
s = 0

for i in data:
    s += int(i)

print(s)

 


==========================================================================================

 

 

문제 44번.

 

 

data = input()
s = 0

for i in data:
    s += int(i)

print(s)


# 문제 45 (현재 년도 초 단위로 계산)

import time

# 현재 시간을 초 단위로 나타내줌 (1970년 0시 0분 기준으로부터 얼마나 흘렀는지)
t = time.time()

# 1년을 초단위로 계산해서 나눠주면 몇년이 흘렀는지 계산 가능
t = t // (365*24*60*60) + 1970

print(int(t))

 

 


==========================================================================================

 

 

문제 50번.

 

 

버블정렬 문제.. 

 

정보처리기사에서 다 짜여져있는 코드를 출력값만 구하는 연습은 몇번 해본적이 있어서 익숙했지만,

막상 내가 처음부터 안 보고 짜보려고 하니 

머리가 멈췄다.

 

친절한 강사님이 빈칸만 뚫린 문제를 주셔서..

그나마 수월했다.

 

def bubble(n, data):
    for i in range(n-1):
        for j in range(n-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
    
    
    for i in range(n):
        print(data[i], end=" ")

 n = int(input())
 data = list(map(int, input().split()))

print(bubble(n,data))

 

 

 

=========================================================================================

 

 

 

점점 난도가 올라가고 있는 느낌이 든다.

 

이제 강의 해설을 봐야 짤 수 있는 문제들이 조금씩 늘어나고 있다.

 

 

 

 

 

<해당 강의 링크>

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형