문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

 

s = input().upper()
s_list = list(set(s)) # 중복없는 리스트 만들어주기

cnt_list = []  # 합계 목록

for x in s_list:
    cnt = s.count(x)
    cnt_list.append(cnt)

if cnt_list.count(max(cnt_list)) > 1:
    print("?")
else:
    print(s_list[cnt_list.index(max(cnt_list))])

 

처음에 합계 목록까지 만들어줘야한다는 생각을 하고 어떻게 그럼 각각의 문자의 개수를 세지라고 생각을 했다. 

그래서 이중반복문으로 해줬는데 코드도 길어지고 헷갈려서 그만뒀다.

도저히 안되겠다 싶어서 구글링하니 count()를 통해 리스트의 요소들의 개수를 셀 수 있다는 걸 알게되었다.

나도 알고 있었는데 잘 사용하지 않아서 까먹었는데 이제라도 알았으니 앞으로 안 잊어야겠다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 25206  (0) 2024.01.18
백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 11718  (0) 2024.01.16
백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

출력

입력받은 그대로 출력한다.

예제 입력 1 

Hello
Baekjoon
Online Judge

예제 출력 1 

Hello
Baekjoon
Online Judge

 

 

그대로 출력하면 된다고해서 단순히

print(input())

 

했는데 틀렸다.ㅋㅋㅋ

지금 생각해도 웃기네

이 한 줄 코드로 끝낼거면 문제를 안 냈을 거 같다는 생각에 다시 문제를 봤다.

보니깐 여기서는 우리가 몇 번 입력할 지에 대한 얘기가 전혀없었다. 

그래서 어떻게 하면 되지.. 라는 생각에 구글링을 통해 찾아보니

while True:
    try:
        print(input())
    except EOFError:
        break

 

이렇게 하면 된다고 한다.

보고 바로 이해했는데

이게 while True로 얼마든지 입력을 받을 수 있게 하고

try except 구문을 통해 언제 멈출지 정해줄거다.

그런데 여기서 만약에 사용자의 입력이 멈추면 이 반복문도 그만해야하기에

EOFError(End of file error)를 걸어준다.

 

이게 정답이라고 한다.

다른 코드도 있는데

 

import sys

words = sys.stdin.readlines()
for word in words:
	print(word.rstrip())

 

이게 더 효율적이라고 한다.

반복문으로 여러 줄 입력을 받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간초과가 생기지 않는다고 한다.

sys.stdin.readline() 사용법은 따로 다시 공부해서 올려야겠다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 1316  (0) 2024.01.18
백준 파이썬 - 1157  (2) 2024.01.18
백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16
백준 파이썬 - 10809  (0) 2024.01.15

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

출력

첫째 줄에 단어의 개수를 출력한다.

 

예제 입력 1 

The Curious Case of Benjamin Button

예제 출력 1 

6

 

 

처음에 문제보고 너무 쉬워서 

a = input().split()
print(len(a))

 

하고 넘어가려고 했는데  이 코드가 틀려서 '뭐지' 하고 문제 다시 보니깐 

앞 뒤에 공백이 들어갈 수 있다고 한다.

그래서 앞뒤 공백 없애주는 strip() 사용하기로 하고 

아래와 같이 고쳐주니

a = input().strip().split()
print(len(a))

 

정답이었다.

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 1157  (2) 2024.01.18
백준 파이썬 - 11718  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16
백준 파이썬 - 10809  (0) 2024.01.15
반복문을 사용한 정육면체 만들기  (1) 2024.01.15

문제

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 

출력

각 테스트 케이스에 대해 P를 출력한다.

 

예제 입력 1 

2
3 ABC
5 /HTP

예제 출력 1 

AAABBBCCC
/////HHHHHTTTTTPPPPP

 

 

나의 정답

n = int(input())

for i in range(n):
    x, y = map(str, input().split())
    for j in y:
        print(j*int(x), end = "")
    print()

 

이번 문제 보면서 나누기만 하면 되겠다고 생각했다.

문자열을 split()함수로 나눠주고 반복문을 통해 하니씩 출력해주면 답이 나올 것이라고 생각했다.

 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 11718  (0) 2024.01.16
백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 10809  (0) 2024.01.15
반복문을 사용한 정육면체 만들기  (1) 2024.01.15
RGB to HEX  (1) 2024.01.15

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

import string
x = input()

alphabet_lower = string.ascii_lowercase

for i in range(len(alphabet_lower)):
    if alphabet_lower[i] in x:
      print(x.index(alphabet_lower[i]), end = " ")
    else:
      print(-1)
import string
alphabet_upper = string.ascii_uppercase
print(alphabet_upper)

 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 1152  (0) 2024.01.16
백준 파이썬 - 2675  (0) 2024.01.16
반복문을 사용한 정육면체 만들기  (1) 2024.01.15
RGB to HEX  (1) 2024.01.15
백준 파이썬 - 문자열 1  (1) 2023.11.21
n = int(input())

print(' '*(n+1) + '+' + '-'*n + '+')

for i in range(n, 0, -1):
  print(' '*i + '/' + ' '*n + '/' + ' '*(n-i) + '|')

print('+' + '-'*n + '+' + ' '*(n) + '+')

for i in range(n, 0, -1):
  print('|' + ' '*n + '|' + ' '*(i-1) + '/')

print('+' + '-'*n + '+')

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 2675  (0) 2024.01.16
백준 파이썬 - 10809  (0) 2024.01.15
RGB to HEX  (1) 2024.01.15
백준 파이썬 - 문자열 1  (1) 2023.11.21
백준 파이썬 - 배열 2  (2) 2023.10.03
r = int(input())
g = int(input())
b = int(input())

print(f"#{r:02X}{g:02X}{b:02X}")
  1. r = int(input()): 사용자로부터 정수를 입력받아 변수 r에 저장. 
  2. g = int(input()): 사용자로부터 정수를 입력받아 변수 g에 저장.
  3. b = int(input()): 사용자로부터 정수를 입력받아 변수 b에 저장.
  4. print(f"#{r:02X}{g:02X}{b:02X}")는 입력받은 RGB 값을 16진수로 변환하여 문자열로 출력. :02X는 각 값을 두 자리 16진수로 표현하도록 하는 포맷 코드. 예) "#FF00AA"

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 10809  (0) 2024.01.15
반복문을 사용한 정육면체 만들기  (1) 2024.01.15
백준 파이썬 - 문자열 1  (1) 2023.11.21
백준 파이썬 - 배열 2  (2) 2023.10.03
백준 파이썬 - 배열  (0) 2023.09.16

코칭스터디 2024

1. 데이터 구성

  • Kaggle 데이터셋( https://www.kaggle.com/blastchar/telco-customer-churn )은 통신사 고객 이탈(Churn)에 대한 정보
  • IBM에서 제공했으며 고객 데이터를 분석하여 고객 유지 프로그램을 개발하는 데 도움이 됨.
    • 고객 인구 통계 정보(Demographic info): 고객의 성별, 연령대, 배우자 및 부양 가족의 유무(Gender, SeniorCitizen, Partner, Dependents)
    • 고객 이탈(Churn) 정보: 서비스를 중단 여부에 대한 정보
    • 서비스 가입 정보(Services subscribed): 고객들이 가입한 서비스들, 예를 들어 전화, 다중 라인, 인터넷, 온라인 보안, 온라인 백업, 장치 보호, 기술 지원, 스트리밍 TV 및 영화( honeService, MultipleLine, InternetService, OnlineSecurity, OnlineBackup, DeviceProtection, TechSupport, StreamingTV, StreamingMovies) 등에 대한 정보
    • 고객 계정 정보(Customer account info): 고객이 얼마나 오래 서비스를 이용했는지, 계약 유형, 결제 방법, 무페이퍼 청구 여부, 월별 요금, 총 요금 (CustomerID, Contract, PaperlessBilling, PaymentMethod, MonthlyCharges, TotalCharges, Tenure)등의 정보

 

2. 필요한 라이브러리로드

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

3. 데이터셋 로드

df = pd.read_csv("https://bit.ly/telco-csv", index_col="customerID")
df.shape
df.head() # 데이터 확인
df.info() # 데이터 집합과 각 열들의 자료형 확인
# df.isnull().sum()는 컬럼별로 결측치의 합계를 구합니다.
print(df.isnull().sum())
# df.isnull().sum().sum() 전체 결측치의 합계를 구합니다.
df.isnull().sum().sum()

4. 학습, 예측 데이터셋 나누기

5. 학습, 예측에 사용할 컬럼 

# 학습, 예측에 사용할 컬럼에 이름을 지정
# 범주형 데이터 (object, category)는 전처리가 따로 필요
# 따라서 수치데이터만을 사용
feature_names = df.select_dtypes(include = "number").columns
feature_names
# train 과 test 로 나누기 위해 데이터를 기준을 정함.
split_count = int(df.shape[0] * 0.8)
split_count

6. 정답값이자 예측해야할 값

label_name = "Churn"
label_name #정답값

7. 학습, 예측 데이터셋 만들기

# 데이터의 80%을 나눌 기준 인덱스(split_count)로 문제 데이터(X)를 train, test로 나눔.
# 데이터의 80%을 나눌 기준 인덱스(split_count)로 정답 데이터(y)를 train, test로 나눔.
train = df[:split_count].copy()
test = df[split_count:].copy()

X_train = train[feature_names]
y_train = train[label_name]

X_test = test[feature_names]
y_test = test[label_name]

X_train.shape, X_test.shape, y_train.shape, y_test.shape

8. 머신러닝 알고리즘 가져오기

DecisionTreeClassifier(
    *,
    criterion='gini', # 분할방법 {"gini", "entropy"}, default="gini"
    splitter='best',
    max_depth=None, # The maximum depth of the tree
    min_samples_split=2, # The minimum number of samples required to split an internal node
    min_samples_leaf=1, # The minimum number of samples required to be at a leaf node.
    min_weight_fraction_leaf=0.0, # The minimum weighted fraction of the sum total of weights
    max_features=None, # The number of features to consider when looking for the best split
    random_state=None,
    max_leaf_nodes=None,
    min_impurity_decrease=0.0,
    class_weight=None,
    ccp_alpha=0.0,
)
  • 주요 파라미터
    • criterion: 가지의 분할의 품질을 측정하는 기능
    • max_depth: 트리의 최대 깊이
    • min_samples_split:내부 노드를 분할하는 데 필요한 최소 샘플 수
    • min_samples_leaf: 리프 노드에 있어야 하는 최소 샘플 수
    • max_leaf_nodes: 리프 노드 숫자의 제한치
    • random_state: 추정기의 무작위성을 제어. 실행했을 때 같은 결과가 나오도록 함.
from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()

9. 학습(훈련)

model.fit(X_train, y_train)

10. 예측

# 데이터를 머신러닝 모델로 예측(predict)
y_predict = model.predict(X_test)
y_predict[:5]

11. 트리 알고리즘 분석하기

from sklearn.tree import plot_tree

plt.figure(figsize=(20, 10))

tree = plot_tree(model,
                 feature_names = feature_names,
                 filled = True,
                 fontsize = 10,
                 max_depth = 4)

12. 정확도 측정하기

# 피처 중요도를 시각화
sns.barplot(x = model.feature_importances_, y=feature_names)
from sklearn.metrics import accuracy_score

accuracy_score(y_test, y_predict)

 

'프로그래밍 > 프로젝트' 카테고리의 다른 글

ARIMA 모델  (0) 2024.05.21
데이콘 - 고객 대출 등급 분류 프로젝트  (1) 2024.02.09
원본 데이터 보존  (0) 2023.11.28
머신러닝 기초 및 순서  (0) 2023.11.21
데이터 프로젝트 (데이터 확인)  (1) 2023.11.01

함수를 둘러싼 환경을 유지하고 다시 꺼내서 사용하는 함수

 

def calc():
    a = 3 
    b = 5 

    def mul_add(x):
        return a * x + b

    print(f"{locals()['a'], locals()['b'] = }")

    return(mul_add)

c = calc()
print(c(1), c(2), c(3), c(4), c(5))

 

def calc():
    a = 3 
    b = 5
    return lambda x: a * x + b 

c = calc()
print(c(1), c(2), c(3))

 

def calc():
    a = 3
    b = 5
    total = 0

    def mul_add(x):
        nonlocal total
        print(total)
        total = total + a * x + b
        print(total)

    return mul_add 
    

c = calc()

c(1)
c(2)

 

def outer():
    x = 100

    def inner(y):
        nonlocal x
        return x+y
        
    return inner

foo = outer()
foo(5)

'프로그래밍 > Python' 카테고리의 다른 글

제너레이터(Generator)  (0) 2024.08.12
Python - 클래스 속성과 메서드 사용  (2) 2023.11.25
Python - 인스턴스 변수 vs 정적변수  (0) 2023.11.25
Python - 클래스 생성자  (2) 2023.11.25
Python - 클래스  (1) 2023.11.25

배우면 배울수록 답답한 느낌이 계속 든다.

 

이게 아무것도 몰라서 그런 것이 아니라 공부를 하는 것이 쌓여야 하는데

쌓이기는 커녕 배우는 족족 머릿 속에서 빠져나가는 느낌

 

이상한 사람처럼 보일 수도 있겠지만 처음 배울 때는 뭔가 새롭고 재밌고 설레어서

이러다 나중에 무슨 일 내는거 아닌가 싶었는데

하면 할수록 내가 많이 무지하구나 느껴지고 안 풀리면 답답해서 혼자 화내고

그러다가 지금이라도 알아서 다행이다의 연속

 

특히 수학과 코딩같은 경우에는 

진짜 쌓아가고 앞에 내용 제대로 숙지 못하면

뒤에 있는 내용 따라가는 거 조차 힘들다는 걸 깨닫게 되었다.

모든 과목이 뭐 그렇겠지만 유달리 나한테는 수학과 코딩이 그런듯

 

이럴 때 생각나는 곡선

더닝크루거의 우매함의 봉우리

나는 지금 절망의 계곡에 있는 것 같은데

뭐 '그냥 하는거지;;' 마인드로 

절망의 계곡 탈출하면 될 듯하다.

 

깨달음의 비탈길에 도착하면 뭐 자축이나 할까나 

그런 깨달음의 기분이 들면 치킨이나 뜯어먹어야겠다~

냠냠 

 

그때 먹는 치킨 지금 정해놔야겠다.

바로 교촌 레드 콤보!

 

그때까지 파이팅

 

 

'일상 > 일기' 카테고리의 다른 글

24.08.21 (수) - 계곡여행 + 앞으로의 다짐(?)  (2) 2024.08.21
오랜만에 일기  (0) 2024.04.02
24년도 새해목표  (0) 2024.01.26
24.01.26  (0) 2024.01.26
그냥 하는 거지  (3) 2023.11.23

+ Recent posts