전체 글 109

(매일 BOJ) C++ 10828번 스택

이번 문제는 실버 4 난이도 10828번 스택 문제이다.https://www.acmicpc.net/problem/10828 이 문제의 접근법부터 알아보자.이 문제는 표준 입력으로 주어지는 명령어에 따라 스택에 값을 넣거나(push), 맨 위 값을 빼거나(pop), 현재 스택의 크기(size), 스택이 비었는지(empty), 맨 위 값(top)을 조회하는 기능을 차례대로 수행하고, 각 명령의 결과를 요구하는 대로 즉시 출력하는 구현 문제이기에 스택이 비어 있을 때 pop이나 top 명령이 들어오면 -1을 출력해야 하며, 나머지 연산은 스택 자료구조의 기본 동작에 맞게 처리하면 된다. 따라서 C++ 라이브러리 중 stack 라이브러리를 사용하여 구현하면 해결되는 간단한 구현 문제이다. 여기서 나오는 스택에..

매일 BOJ 2025.07.10

(매일 BOJ) C++ 10845번 큐

오늘 푼 푼제는 실버 4 문제인 큐이다. 이 문제의 접근법에 대해 간략히 살펴보자.이 문제는 표준 입력으로 주어지는 명령어에 따라 큐에 원소를 추가(push), 삭제(pop), 큐의 크기(size), 비어 있는지(empty), 맨 앞(front), 맨 뒤(back) 값을 조회하는 동작을 수행하고, 각 명령의 결과를 즉시 출력하는 구현 문제다.따라서 큐 자료구조의 기본 연산들을 정확히 처리하며, push 명령은 값을 큐에 넣기만 하고, pop/size/empty/front/back 명령에 대해서만 주어진 조건에 따라 결과를 출력하는 것이 핵심일 것이다. 단순히 큐를 사용하여 구현하면 되는 문제이기에 간단히 해결할 수 있었다. 아래는 작성한 코드다#include using namespace std;int m..

매일 BOJ 2025.07.09

(매일 BOJ) C++ 10816번 숫자카드 2

이번 문제는 백준 10816번 숫자카드 2 문제이다.https://www.acmicpc.net/problem/10816 문제의 접근법부터 생각해보자백준 10816번 "숫자 카드 2" 문제는 주어진 N개의 숫자 카드에 대해, M개의 숫자가 각각 몇 개씩 존재하는지를 빠르게 찾아야 하는 문제다. 그렇다 필자는 이 문제에서도 뇌를 빼고 풀다가 시간초과가 뜨는 말하는 감자였다.지금까지 필자가 ps 약 160여 문제를 풀면서 시간 초과가 뜬 적이 별로 없었는데,오늘 하루에만 시간초과가 3번 뜨는 것을 보니 c++이 나랑 안맞는건지, 파이썬에서 무의식적으로 시간복잡도를 기가막히게 분석하며 풀었던 것인지 도통 모르겠다. 아래가 필자가 처음 풀었던 코드이다.#include using namespace std;int m..

매일 BOJ 2025.07.08

(매일 BOJ) c++ 2164번 카드 2

오랜만에 다시 작성하는 블로그글이다.최근 동기들과 알고리즘 스터디를 진행하며, 다음학기에 있을 프입 (2)에 대한 예습과 내년 ICPC 출전을 위해 C++ 공부를 시작해보았다. 따라서 첫번째 C++ 알고리즘 포스팅이 될 예정이다. 거두절미하고 문제의 아이디어부터 알아보자https://www.acmicpc.net/problem/2164 2164번(카드2) 문제는 1부터 N까지 번호가 적힌 카드가 순서대로 놓여 있을 때, 제일 위의 카드를 버리고, 그 다음 카드를 제일 아래로 옮기는 과정을 카드가 한 장 남을 때까지 반복할 때 마지막에 남는 카드를 구하는 문제다. 아래는 필자가 처음 작성한 코드이다.#include using namespace std;int main (void){ ios::sync_w..

매일 BOJ 2025.07.08

(2025 - 1) 서울과기대 삶의 윤리학 중간고사 서술형

📚 삶윤 중간시험 서술형 답변1. "탈레스의 철학을 설명하고, 그 철학의 의의와 아낙시만드로스의 반박을 서술하시오"(필수 키워드 : 아르케, 초자연적/자연적 요소, 비판적 사고, 보통명사, 환원주의, 아낙시만드로스의 비판)탈레스는 아르케를 "물"이라 보고, 세계를 자연적 요소로 설명하며 비판적 사고와 환원주의를 시작했다. 보통명사를 사용해 주장했다.아낙시만드로스는 물이 아니라 무한정자(apeiron) 가 근원이라며, 탈레스를 비판했다. 2. "소피스트와 소크라테스 철학을 비교한 후, 소크라테스 철학을 설명하고 그 의의를 서술하시오."(필수 키워드: 소피스트 철학의 특징, 소피스트와 관련된 소크라테스의 문제의식, 에피스테메, 소크라테스 철학의 의의와 한계) 소피스트들은 진리의 상대주의와 쾌락주의를 주장하..

시험공부 2025.04.26

(2025 - 1) 서울과기대 서양 고전 읽기 중간고사 정리

📚 2주차: 헤시오도스 『신들의 계보』​W02 헤시오도스_신들의 계보✅ 작품 개요그리스 신화의 신들의 계보를 시적 형태로 구성한 서사시(기원전 730~700).우주의 창조, 신들의 기원, 권력의 계승, 프로메테우스·판도라 신화 등이 포함.✅ 주요 개념과 논점무사 여신(Muse)의 역할: 작품의 신성한 권위를 제공하고 문학적 영감과 기억을 통한 구전 전통의 중요성을 강조.신들의 계보와 우주론: 카오스에서 시작하여 가이아(대지), 우라노스(하늘), 티탄족, 그리고 올림포스 신들로 이어지는 신화적 세계관과 신들의 세대교체를 통해 세계의 질서가 확립되는 과정을 서술.정치적, 윤리적 의미: 신들의 권력 다툼(우라노스→크로노스→제우스)을 인간 세계의 정치적 현실과 권력 투쟁의 은유로 묘사하며, 윤리적이고 정치적인..

시험공부 2025.04.26

(매일 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