01/08 TIL
알고리즘/파이썬 과제
문제4.
#확인코드
customer1 = Customer()
customer1.join_customer("Alice", "alice@example.com", 100)
customer1.add_points(50)
customer1.reduce_points(20)
customer1.reduce_points(150) # 포인트 부족 상황 테스트
오답
class Customer():
name = None
email = None
point = 0
def join_customer(self, name, email, point):
self.name = name
self.email = email
self.point = point
print(f"{name}님의 회원가입이 완료되었습니다. 이메일은 {email}이며, 포인트는 {point}입니다.")
def add_points(self, amount):
self.point = self.point + amount
print(f"{name}님의 포인트는 {point}점 입니다.")
def reduce_points(self, amount):
if self.point >= amount:
self.point = self.point - amount
print(f"{name}님의 포인트는 {point}점 입니다.")
else:
self.point = self.point
print("포인트가 부족합니다")
이랬더니 계속 name이 정의되지 않았다는 에러메시지가 뜸
정답
class Customer():
name = None
email = None
point = 0
def join_customer(self, name, email, point=0):
self.name = name
self.email = email
self.point = point
print(f"{name}님의 회원가입이 완료되었습니다. 이메일은 {email}이며, 포인트는 {point}입니다.")
def add_points(self, amount):
self.point = self.point + amount
print(f"{self.name}님의 포인트는 {self.point}점 입니다.")
def reduce_points(self, amount):
if self.point >= amount:
self.point = self.point - amount
print(f"{self.name}님의 포인트는 {self.point}점 입니다.")
else:
self.point = self.point
print("포인트가 부족합니다")
C:\Users\neddy\Desktop\sparta_python\venv\Scripts\python.exe C:/Users/neddy/Desktop/sparta_python/문제4.py
Alice님의 회원가입이 완료되었습니다. 이메일은 alice@example.com이며, 포인트는 100입니다.
Alice님의 포인트는 150점 입니다.
Alice님의 포인트는 130점 입니다.
포인트가 부족합니다
Process finished with exit code 0
파이썬의 문법에 익숙해지면서 개별 문제 난이도 자체는 점점 쉬워졌던듯.
class를 응용할 수 있는지 실습해보는 차원의 문제였던 것 같다.
문제에서 따로 요구한 것은 아니지만, 답을 다 작성한 뒤 혹시나 해서 point의 디폴트 값을 0으로 추가 설정했다.
덧붙여,
클래스의 관건은 self를 붙여줘서 '어떤' 포인트인지를 정확하게 명시해 주는 것!
같은 숫자는 싫어(강의 실습문제)
https://school.programmers.co.kr/learn/courses/30/lessons/12906
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
*예시
arr = [1, 1, 3, 3, 0, 1, 1]
arr = [4, 4, 4, 3, 3]
오답
def solution(arr):
answer = []
answer.append(arr[0])
for i, num in enumerate(arr):
if arr[i] == arr[i-1]:
pass
else:
answer.append(num)
print(answer)
arr1 = [1, 1, 3, 3, 0, 1, 1]
arr2 = [4, 4, 4, 3, 3]
solution(arr1) #[1, 3, 0, 1]
solution(arr2) #[4, 4, 3]
[1, 3, 0, 1]
[4, 4, 3]
=>if문을 추가하는 방식 등으로 답을 쓸 순 있겠지만 비효율적
정답
def solution(arr):
answer = []
answer.append(arr[0])
for num in arr:
if num == answer[-1]:
pass
else:
answer.append(num)
print(answer)
arr1 = [1, 1, 3, 3, 0, 1, 1]
arr2 = [4, 4, 4, 3, 3]
solution(arr1) #[1, 3, 0, 1]
solution(arr2)
과제 : 올바른 괄호
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
s = "()()"
s = "()()"
s = "(())()"
s = ")()("
s = "(()("
solution(s)
def solution(s):
temp = []
for a in s:
if a == '(':
temp.append(a)
else:
temp.remove(a)
if temp == []:
return True
else:
return False
첫 시작이 ")"일 수 있다는 것을 생각하지 못해서 처참하게 실패했다..
def solution(s):
temp = []
for a in s:
try:
if a == '(':
temp.append(a)
else:
temp.remove(a)
except:
return False
return False
if len(temp) == 0:
return True
else:
return False
else의 temp에 있지도 않은 a를 지우라고 명령하는 꼴이어서 마찬가지로 처참히 실패했다.
def solution(s):
temp = []
if s[0] == ')':
return False
for a in s:
if a == '(':
temp.append(a)
elif a == ')':
temp.remove("(")
if temp == []:
return True
else:
return False
이렇게 했더니 예시만 통과하고 최종 채점은 실패함;;;
정답1
def solution(s):
temp = 0
for a in s:
if a == '(':
temp = temp +1
elif a == ')':
temp = temp - 1
if temp < 0: #음수가 되는 순간 "("보다 "0"가 먼저 나왔다는 의미
return False
if temp == 0:
return True
else:
return False
주요 포인트
-문제의 예시와 문제 해결을 위해 설정한 임의의 리스트/수를 일치시킬 필요가 없음
-기준점을 0으로 잡았으니 0보다 작아지는 순간 False가 됨을 숙지해야함
다른 풀이
def solution(s):
temp = []
for a in s:
if a == '(':
temp.append(a)
elif a == ')':
if temp == ["("]: #두번째 예시 같은 경우 [(, (]인 상황이 있기에 조건에 걸림
temp.remove("(")
else:
return False
if temp == []:
return True
else:
return False
2번째 경우가 fail
이유 : 두번째 예시 같은 경우 [(, (]인 상황이 있기에 조건에 걸림
def solution(s):
temp = []
for a in s:
if a == '(':
temp.append(a)
elif a == ')':
if '(' in temp:
temp.remove("(")
else:
return False
if temp == []:
return True
else:
return False
정답은 맞으나 런타임 에러로 실패
정답2
def solution(s):
temp = []
for a in s:
if a == '(':
temp.append(a)
elif a == ')':
if '(' in temp:
temp.pop() #remove('(')로 작성하면 효율성 테스트에서 탈락!
else:
return False
return not temp
이렇게 정답이 나오긴 했다만, 사실 pop()과 remove의 차이가 무엇인지는 잘 모르겠다. 튜터님에게 여쭤야할 부분인듯.
알고리즘 코드카타
문제9. 짝수의 합
정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/120831
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(n):
sum = 0
for a in range(2, n, 2):
sum = sum + a
return sum
range(a, b, c)
-a에서 시작해서 b까지, c씩 커짐
-최댓값은 b 직전 값!
def solution(n):
sum = 0
for a in range(2, n+2, 2):
sum = sum + a
return sum
예시는 맞았는데 7개의 케이스 테스트 중 2개가 실패했다..
정답
def solution(n):
temp = []
for a in range(n+1):
if a%2 == 0:
temp.append(a)
return sum(temp)
range함수 활용법
https://blog.naver.com/freeegg/223151139489
[파이썬] Range 함수를 알아보자 - range / for문
안녕하세요 알상무입니다. 오늘은 파이썬의 대표적인 함수 중 하나인 Range 함수에 대해 알아보도록 하겠...
blog.naver.com
TMI
-지난 주 말부터 파이썬 개인과제 하면서 하루종일 굴렀더니 그래도 기본기는 익숙해진 모양. 전에 손조차 댈 수 없던 문제들이 술술 풀리니 꽤 잼난듯.
-주말에 약속 빽빽하게 있고서 이사 준비하니 죽을맛....오늘은 푹 자야겠다.