분류 전체보기 50

인스턴스, self, 오버라이딩(Overriding) 이젠 좀 알자!

1. 클래스와 인스턴스의 관계클래스는 설계도, 인스턴스는 그 설계도로 만든 실제 객체(실체).예를 들어, class Dog는 “강아지”라는 설계도, mydog = Dog()는 실제로 만들어진 “한 마리 강아지”다.2. 상속(부모-자식 클래스)에서의 함수 호출 흐름자식 클래스(facade)가 부모 클래스(AOSM)를 상속받을 때, 부모만 가진 함수를 호출하면 당연히 부모의 함수가 실행된다.그런데 부모의 함수 안에서 또 다른 함수를 호출할 때 만약 그 함수가 자식에서 오버라이딩(재정의)되어 있다면,자식의(오버라이딩된) 함수가 호출된다!3. 내가 직접 경험한 코드 히스토리Facade 클래스는 AOSM(부모 클래스)을 상속.서비스 실행 과정에서 g_facade.open()을 호출하면, 내부적으로 부모의 run(..

TIL(Today I Learn) 2025.07.28

[백준] 15681번 : 트리와 쿼리 - 자바(Java)

Problem 🔒문제(15681번 : 트리와 쿼리)간선에 가중치와 방향성이 없는 임의의 루트 있는 트리가 주어졌을 때, 아래의 쿼리에 답해보도록 하자.정점 U를 루트로 하는 서브트리에 속한 정점의 수를 출력한다.만약 이 문제를 해결하는 데에 어려움이 있다면, 하단의 힌트에 첨부한 문서를 참고하자.입력트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105)이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V)이는 U와 V를 양 끝점으로 하는 간선이 트리에 속함을 의미한다.이어 Q줄에 걸쳐, 문제에 설명한 U가 하나씩 주어진다. (1 ≤ U ≤ N)입력으로 주어지는 트..

[백준] 12852번 : 1로 만들기 2 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/12852 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.입력첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다.출력첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.둘째 줄에는 N을 1로 만드는 방법에 포함되어 있는 수를 공백으로 구분해서 순서대로 출력한다. 정답이 여러 가지인 경우에는 아무거나 출력한다.더보기예제 입력 12예제 출력 112 1예제 입력 210예제 ..

[알고리즘] 위상정렬 복습 겸 정리

💙 위상정렬순서가 있는 작업을 차례로 진행해야 할 때 순서를 결정하기위해 사용하는 알고리즘이다.사이클이 없는 방향 그래프의 모든 노드를 주어진 방향성에 어긋나지 않게 순서를 나열하는 것이다.더보기사전 지식DAG(Directed Acyclic Graph : 방향성 있는 비순환 그래프)진입 차수(in-degree)특정 노드로 들어오는 간선의 개수위상 정렬에서는 이 진입 차수를 이용하여, 진입 차수가 0이면 시작점이 된다.진출 차수(out-degree)특정 노드에서 나가는 간선의 개수💙 위상정렬 구현(Queue 활용)먼저 모든 간선을 읽으며 indegree 테이블을 채운다.indegree가 0인 정점들을 모두 큐에 넣는다.큐가 빌 때까지 반복 수행한다.큐에서 정점을 꺼내어 위상 정렬 결과에 추가한다.해당 ..

[백준] 1912번 : 연속합 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/1912 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.출력첫째 줄에 답을 출력한다.더보기예제 입력 11010 -4 3 1 5 6 -35 12 21 -1..

[백준] 1647번 : 도시 분할 계획 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/1647 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그러다가 평화로운 마을에 가게 되었는데, 그곳에서는 알 수 없는 일이 벌어지고 있었다.마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 각 길마다 길을 유지하는데 드는 유지비가 있다. 임의의 두 집 사이에 경로가 항상 존재한다.마을의 이장은 마을을 두 개의 분리된 마을로 분할할 계획을 가지고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 ..

[백준] 15990번 : 1, 2, 3 더하기 5

Problem 🔒문제https://www.acmicpc.net/problem/15990 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다.1+2+11+33+1정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 100,000보다 작거나 같다.출력각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.더보기예제 입력 134710예제 출..

[백준] 4195번 : 친구 네트워크 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/4195 민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다.어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오.친구 네트워크란 친구 관계만으로 이동할 수 있는 사이를 말한다.입력첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진다. 친구 관계는 두 사용자의 아이디로 이루어져 있으며, 알파벳 ..

[백준] 20040번 : 사이클 게임 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/20040 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 번호가 부여된 평면 상의 점 n 개가 주어지며, 이 중 어느 세 점도 일직선 위에 놓이지 않는다. 매 차례 마다 플레이어는 두 점을 선택해서 이를 연결하는 선분을 긋는데, 이전에 그린 선분을 다시 그을 수는 없지만 이미 그린 다른 선분과 교차하는 것은 가능하다. 게임을 진행하다가 처음으로 사이클을 완성하는 순간 게임이 종료된다. 사이클 C는 플레이어가 그린 선분들의 부분집합으로, 다음 조건을 만족한다. C에 속한 임의의 선분..

[백준] 1744번 : 수 묶기 - 자바(Java)

Problem 🔒문제https://www.acmicpc.net/problem/1744 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 상관없이 묶을 수 있다. 하지만, 같은 위치에 있는 수(자기 자신)를 묶는 것은 불가능하다. 그리고 어떤 수를 묶게 되면, 수열의 합을 구할 때 묶은 수는 서로 곱한 후에 더한다.예를 들면, 어떤 수열이 {0, 1, 2, 4, 3, 5}일 때, 그냥 이 수열의 합을 구하면 0+1+2+4+3+5 = 15이다. 하지만, 2와 3을 묶고, 4와 5를 묶게 되면, 0+1+(23)+(45) = 27이 되어 최대가 된다.수열의 모든 ..