동아리 파이썬스터디를 위해서 공부한것 위주로 정리합니다.
https://www.acmicpc.net/problem/2884
H, M = map(int,input().split())
if M >= 45 :
print(H, M-45)
else :
if H > 0 :
print(H-1, M+15)
else :
print(23, M+15)
> 45분 일찍 맞추는 문제.
M이 45보다 큰 경우 그냥 빼주면 되지만, 45보다 작을 경우 H를 1빼주고 M에 15를 더해주어야 한다.
H가 0이면서 M이 45 미만인 경우에는 H를 23으로 지정해 주는것이 포인트.
> 프린트할때 값을 수정하지 않고 if를 활용해 값을 바꾼 뒤 프린트해주는 경우에는 원하는 값을 못 얻을 수도 있다..!
https://www.acmicpc.net/problem/1330
A, B = map(int,input().split())
if A > B:
print(">")
if A < B:
print("<")
if A == B:
print("==")
https://www.acmicpc.net/problem/11021
T = int(input())
for i in range(T):
A, B = map(int,input().split())
print(f"Case #{i+1}: {A+B}")
> f-string 짱짱맨. format 많이 쓰시던데 저는 이게 너무 좋아요...
https://www.acmicpc.net/problem/15552
import sys
T = int(sys.stdin.readline())
count = 0
for i in range(T) :
a, b = map(int, sys.stdin.readline().split())
print(a+b)
count =+ 1
if count == T :
break
> 어떻게 하는지 몰라서 구글링해서 풀었다.
분명 같은 코드인데 코랩 상에서는 invalid literal for int() with base 10이라는 오류가 계속 뜨더라.
??? 싶어 파이참에 실행해 보니 아무 오류가 안뜬다... 백준에서도 정답이라고 해줬다.
이처럼 코랩에서는 오류가 나는 경우가 종종 있다더라.
https://www.acmicpc.net/problem/1110
N = int(input())
n = N
count=0
while True :
total = (n//10) + (n%10)
newtotal = ((n%10)*10) + (total%10)
count = count+1
if newtotal == N :
break
n = newtotal
print(count)
> 잘 못쓰면 시간초과난다. 핵심은 "입력값을 바꾸지 않을 것"(가령 n=N이라고 n을 만들지 않고 N으로만 쓴다면 무한루프가 일어난다)과 "변수에 값을 제대로 할당해 줄 것"(if-break 뒤에 n을 쓴 이유)이다.
저게 없다면 초기의 n(N)값을 바탕으로 계속적으로 계산하는 매우 이상한 식이 되기 때문!
https://www.acmicpc.net/problem/10951
while True:
try:
A, B = map(int, input().split())
print(A+B)
except:
break
> 아무 생각없이 While True 썼다가 아? 싶었다. 테스트 케이스 개수가 정해져 있지 않기 때문. 그래서 구글링했다.
테스트케이스가 정해져 있지 않은 경우에는 try, except를 사용한다. try에 해당하는 경우가 아니라면 except문이 작동하는 구조.
(보충학습) : 멘토님이 시키셨다 야호 !! ^-ㅠ
sys.stdin.readline()과 input()의 차이점
- input() : 한 두줄, 가볍게 입력받을 때 사용
T = int(input())
A, B = map(int,input().split())
- sys.stdin.readline() : 반복문으로 여러 줄을 입력받아야 할 때 사용. 이를 사용해야 시간초과가 발생하지 않음
import sys
T = int(sys.stdin.readline())
A, B = map(int,sys.stdin.readline().split())
- 한 줄 단위로 입력받기 때문에 개행문자를 제거(\n) + 기본 타입이 문자열(str)이기 때문에 정수로 사용하기 위해 int
- 공백만 제거하고 싶을때는 sys.stdin.readline().strip() 처럼 사용(문자열 앞과 끝의 공백 제거)
+) 임의의 개수의 정수를 한 줄에 입력받아 리스트에 저장
import sys
data = list(map(int,sys.stdin.readline().split()))
- 이는 list(map(int,input().split())과 동일하다.
>> 코딩테스트 등에서는 input()보다 sys.stdin.readline()을 써서 시간을 줄여야 한다!
캐글 타이타닉 1. Dataset check
- pandas 기본 개체는 index와 value로 구성된 series. 이것들이 여러 개 모여 하나의 dataframe이 됨.
import missingno as msno
#타이타닉의 train 데이터를 df_train이라 저장
msno.matrix(df=df_train.iloc[:, :], figsize=(8,8), color=(0.8, 0.5, 1))
위의 코드는 왼쪽의 매트릭스를 만듦. 이는 msno(missingno, null값)에 대한 것으로 빈칸(하얀 부분)들이 모두 널값에 해당됨. 오른쪽은 matrix를 bar라고 수정한 `msno.bar(df=df_train.iloc[:, :], figsize=(8,8), color=(0.8, 0.6, 1))` 일때의 그래프.
캐글 타이타닉 2. EDA - Pclass
- EDA(Exploratory Data Analysis) : 탐색적 데이터분석.
f, ax = plt.subplots(1, 2, figsize=(18,8))
#도화지(fig)를 만들고 ax를 1x2로 나눔(subplots)
df_train['Survived'].value_counts().plot.pie(explode=[0, 0.1], autopct='%1.1f%%', ax=ax[0])
ax[0].set_title('pie plot - Survived')
ax[0].set_ylabel('')
#ax[0]에 Survived에 대한 파이그림을 그려줌. explode로 0과 1사이에 간격을 만듦
sns.countplot('Survived', data=df_train, ax=ax[1])
ax[1].set_title('Count plot - Survived')
#ax[1]에 Survived에 대한 카운트플랏을 그림
plt.show() #전체 그림(도화지)을 보여줌
pd.crosstab(df_train['Pclass'], df_train['Survived'], margins=True)
- crosstab으로 Pclass와 Survived의 관계를 볼 수 있음.
- margins는 맨 마지막 행과 열에 해당하는 'All'(합계)를 의미
- 클래스가 높을수록 생존확률이 높은 경향이 있어 보임(136/216, 87/184, 119/491).
이를 확인하기 위해 클래스 별 전체 탑승자의 수와 생존/사망자의 그래프를 그려보자.
y_position = 1.02 #후에 타이틀의 위치를 설정해 줄 예정
f, ax = plt.subplots(1, 2, figsize=(18, 8))
df_train['Pclass'].value_counts().plot.bar(color=['#CD7F32','#FFDF00','#D3D3D3'], ax=ax[0])
ax[0].set_title('Number of Passengers By Pclass', y=y_position)
ax[0].set_ylabel('Count')
sns.countplot('Pclass', hue='Survived', data=df_train, ax=ax[1])
ax[1].set_title('Pclass: Survived vs Dead', y=y_position)
#Pclass에 따라 그리되 Survived에 따라(0, 1) 색을 다르게 칠해 그림
plt.show()
책 요약도 해야하는데 시간이 너무 빨리가요 ㅠ~ㅠ 이런...
'STUDY' 카테고리의 다른 글
파이썬 스터디 2주차(백준) (0) | 2022.01.11 |
---|---|
파이썬 스터디 1주차(머신러닝) (3) | 2022.01.11 |
코드잇 대학생 코딩캠프 - 업무자동화 for Windows(1) (0) | 2021.09.07 |
코드잇 대학생 코딩캠프 - 데이터 사이언스 입문(2) (0) | 2021.08.12 |
코드잇 대학생 코딩캠프 - 데이터 사이언스 입문(1) (2) | 2021.07.29 |