2025/03 13

(매일 BOJ) Python 2609번 최대공약수와 최소공배수

📌 문제 설명두 개의 자연수가 주어질 때, 두 수의 최대공약수(GCD)와 최소공배수(LCM)를 구해서 출력합니다.최대공약수(GCD)는 두 수의 공통된 약수 중에서 가장 큰 수입니다.최소공배수(LCM)는 두 수의 공통된 배수 중에서 가장 작은 수입니다.📥 입력 조건두 개의 자연수가 공백으로 구분되어 한 줄에 주어집니다.입력되는 자연수는 10,000 이하입니다.📤 출력 조건첫째 줄에 최대공약수, 둘째 줄에 최소공배수를 출력합니다.💡 문제 해결 아이디어이 문제는 유클리드 알고리즘을 활용하면 쉽게 풀 수 있습니다.**최대공약수(GCD)**는 유클리드 알고리즘을 이용해서 빠르게 구할 수 있습니다.**최소공배수(LCM)**는 다음과 같은 식을 이용하면 편리하게 구할 수 있습니다.📌 유클리드 알고리즘이란?유..

매일 BOJ 2025.03.30

(매일 BOJ) Python 1259번 팰린드롬수

📌 문제 설명팰린드롬수란, 앞에서부터 읽으나 뒤에서부터 읽으나 똑같은 숫자를 말합니다.예를 들어,121 → 팰린드롬123 → 팰린드롬 아님입력으로 주어지는 수가 팰린드롬인지 아닌지를 판단해서 결과를 출력하면 됩니다.📥 입력 조건입력은 여러 개의 테스트 케이스로 주어집니다.각 줄마다 하나의 정수가 주어지며, 입력의 마지막 줄에는 '0'이 주어지며 프로그램을 종료합니다.입력 정수의 자리수는 최대 5자리입니다.yaml복사편집121 1231 12421 0 📤 출력 조건각 입력에 대해 팰린드롬수라면 "yes", 아니라면 "no"를 출력합니다.💡 간단한 아이디어이 문제는 문자열로 변환한 후, 뒤집어서 비교하면 쉽게 풀립니다.입력받은 수를 문자열로 변환한다.문자열과 뒤집은 문자열을 비교해서 같으면 "yes",..

매일 BOJ 2025.03.30

(매일 BOJ) Python 15829번 해싱

🔍 문제 요약문자열이 주어졌을 때, 다음과 같은 해시 함수를 사용하여 문자열의 해시 값을 계산합니다:공식:H=∑i=0l−1(ai×ri)mod  MH = \sum_{i=0}^{l-1} (a_i \times r^i) \mod MH=∑i=0l−1​(ai​×ri)modMlll: 문자열의 길이aia_iai​: i번째 문자의 아스키 코드 값을 숫자로 변환한 값 (예: 'a'는 1, 'b'는 2, ..., 'z'는 26)rrr: 31MMM: 1234567891🧮 입력첫째 줄: 문자열의 길이 lll (1 ≤ lll ≤ 50)둘째 줄: 문자열 (소문자 a~z)✅ 출력해시 값을 출력1차 코드 / 50점result = result % 1234567891를 빼먹었다.num = int(input())abc = list('a..

매일 BOJ 2025.03.30

(매일 BOJ) Python 2231번 분해합

📦 문제 요약어떤 N수 있었는지, N의 분해합 을 구하는 문제야.분해합 은 N을 두 부분으로 나누어서 그 합을 구하는 방식인데, 분리수의 각 자릿수의 합을 더한 값이 원래 N으로 돌아오면 그 수가 생성자 야.예를 들어 N = 216말하면, N = 198은이 1 + 9 + 8 + 198 = 216되어 198이 생성이 스스로 될 수 있습니다.💡 아이디어(접근법만!)N에서 모든 것을 보유할 수 있음(최대 생성자를 N - 9 * len(N)시작)각 수에 대해 sum(각 자릿수)더한 값을 구하고, N과 일치하면 생성자 임최소값부터 탐색하기 때문에 가장 작은 생성자 를 찾을 수 있습니다.N = int(input())num = list(str(N))result = Nbackup = Nfor i in range(9..

매일 BOJ 2025.03.25

(매일 BOJ) Python 1978번 소수 찾기

📦 문제 요약정수 N개가 주어지고,그중에서 **소수(prime number)**가 몇 개인지 세는 문제야소수: 1과 자기 자신만으로 나누어지는 수 (1은 소수가 아님!)💡 아이디어 (접근법만!)N개의 수를 하나씩 보면서,각 수가 소수인지 판별해야 함소수 판별할 땐 2부터 √n까지 나눠보는 방식 사용→ 더 빠르고 효율적!N = int(input())num = list(map(int,input().split()))count = 0for i in num:    for o in range(2,i+1):        if i % o == 0:            if i == o:                count += 1            breakprint(count)

매일 BOJ 2025.03.23

(매일 BOJ) Python 30802번 웰컴 키트

📦 문제 요약참가자 수 N명티셔츠는 6가지 사이즈별로 개수가 주어지고, 티셔츠는 T장씩 한 묶음으로만 주문 가능펜은 P자루씩 한 묶음으로 주문할 수 있고, 나머지는 낱개로 주문출력은:티셔츠를 모든 사람에게 맞춰서 줄 수 있도록 하려면 최소 몇 묶음이 필요한지펜은 묶음으로 최대 몇 개, 그리고 몇 개는 낱개로 사야 하는지💡 아이디어 (접근법만!)티셔츠: 각 사이즈마다 필요한 수를 T로 나눔(필요한 수 + T - 1) // T 공식 사용하면 부족하지 않게 묶음 계산 가능펜: 전체 인원 N을 P로 나누면몫 = 묶음 수나머지 = 낱개로 주문해야 하는 수🚨 팁입력이 많진 않지만, sys.stdin.readline() 쓰면 더 안전반복문 대신 나눗셈으로 계산하면 시간 초과 안 남출력 형식 주의:첫 줄: 티셔츠..

매일 BOJ 2025.03.23

(매일 BOJ) Python 4153번 직각삼각형

📐 문제 요약세 개의 양의 정수 a, b, c가 주어질 때,이게 직각삼각형의 세 변일 수 있는지 판단하는 문제야.입력은 여러 줄로 주어지고,0 0 0이 들어오면 입력이 끝남.각 줄에 대해 결과를 right 또는 wrong으로 출력하면 됨.💡 아이디어 (접근법만!)직각삼각형은 피타고라스 정리 a² + b² = c²를 만족해야 해.단, 어떤 변이 가장 긴 변인지 항상 보장되지 않으니까, 먼저 **세 변 중 가장 큰 걸 찾아서 그것을 빗변(c)**으로 보고 체크해야 해.즉, 입력받은 수들을 정렬한 다음, x² + y² == z² 인지 확인하면 됨.while True:    a,b,c = map(int, input().split())    if a == 0:        break    elif a > b ..

매일 BOJ 2025.03.23

(매일 BOJ) Python 1157번 단어 공부

📖 문제 요약단어 하나가 입력됨 (대소문자 섞여 있을 수 있음)**가장 많이 사용된 알파벳(대소문자 구분 X)**을 출력만약 여러 개라면 ? 출력💡 아이디어 (접근법만!)먼저 모든 문자를 대문자 or 소문자로 통일각 알파벳이 몇 번 나왔는지 세기딕셔너리, 리스트, collections.Counter 등 다양하게 가능가장 많이 나온 횟수를 찾고그 횟수가 중복이면 ?, 아니면 그 알파벳 출력 text = input().lower()text_list = list(set(text))count = []for i in text_list:    count1 = text.count(i)    count.append(count1)if count.count(max(count)) >= 2:    print("?")els..

매일 BOJ 2025.03.23

(매일 BOJ) Python 11650 좌표 정렬하기

📌 문제 요약2차원 좌표 (x, y)가 N개 주어짐 (N ≤ 100,000)이 좌표들을 x 오름차순,그리고 x가 같으면 y 오름차순으로 정렬해서 출력해야 함💡 아이디어 (접근법만!)파이썬의 sort() 또는 sorted() 함수는튜플 정렬에서 자동으로 첫 번째 기준 → 두 번째 기준 순서대로 정렬해줌.예: [(1, 2), (1, 1), (2, 1)] → 자동으로 (1, 1), (1, 2), (2, 1)로 정렬됨그래서 입력을 전부 (x, y) 튜플로 저장하고, 그냥 sort() 한 번만 해주면 끝!n = int(input())xy = []for i in range (n):    dot = list(map(int,input().split()))    xy.append(dot)xy.sort()for i i..

매일 BOJ 2025.03.23

(매일 BOJ) Python 4673번 셀프 넘버

📜 문제 요약어떤 수 n에 대해 d(n) = n + 각 자리 숫자의 합으로 정의할 때,어떤 수가 d(n)의 결과로 나올 수 있다면, 그 수는 생성자가 있는 수라고 해.예:d(75) = 75 + 7 + 5 = 87 → 87은 생성자가 751~10000 중에서 생성자가 없는 숫자 (셀프 넘버) 만 출력하면 됨💡 아이디어1부터 10000까지 순회하면서,d(n) 값을 전부 구해서 생성된 수들을 기록그리고 1부터 10000까지 중에서 한 번도 생성되지 않은 수만 출력핵심:d(n) 자리수 분해해서 합10000 이하에서 생성된 수를 체크생성 안 된 숫자만 출력 def d(n):    num = list(str(n))    asw = n    for i in range(len(num)):        asw += ..

매일 BOJ 2025.03.21