목록전체 글 (348)
파게로그
문제 링크: 1967번 트리의 지름 https://www.acmicpc.net/problem/1967 풀이 자체는 상당히 직관적인데, 전제에 대한 '직관'만 있는 것에 대한 증명을 누군가 잘 해주셨다(다만 댓글을 꼭 읽어야 한다). https://blog.myungwoo.kr/112 처음에 하나의 정점 u로부터 가장 먼 정점 v를 찾을 건데, 일단 루트를 u로 해서 v를 찾는다. 그 다음, v로부터 가장 먼 정점을 찾는다. 그리고 두 정점 간의 거리를 출력한다. 이렇게 DFS 2번을 사용하는 것이 마치 국룰과 같은 풀이이다. 하나는 아직은 잘 이해되지 않는 DP 풀이이다. 트리 DP는 앞으로도 계속 사용될 것이기에 꼭 살펴보아야 한다. https://suuntree.tistory.com/172 impor..
정보처리기사와 SQLD가 다들 쓸모없다고는 하지만, 자신이 배운 것을 한 번쯤 정리하는 기회를 갖게 된다는 점, 그리고 언젠가 필요하게 될지도 모르지만 당장 필요하지 않아 접하지 못했던 '구멍'을 메울 수 있다는 점에서 (특히 비전공자에게) 응시 자체가 나쁜 경험이라고 생각되지는 않는다. 정보처리기사에 이어 SQLD에도 도전하게 되었다. 공부 과정은, 책과 실습이 주를 이루긴 했다. 다만 실질적으로 가장 도움이 된 것은, 이번 kry 온라인 저지 프로젝트를 하며 SQL을 만져본 경험이다. 학교에서 DB 수업을 들으면서... '고양이 급식 서비스'...를 위한 ERD를 만들어보면서... 완전 헤맸던 기억이 있는데, 이론적 기반과 실습 경험이 둘 다 조금씩이나마 갖추어지니 약간은 더 감이 잡히는 느낌이었다...
문제 링크: 프로그래머스 Lv. 3 보석 쇼핑 https://programmers.co.kr/learn/courses/30/lessons/67258 투 포인터를 통해 해결할 수 있는 문제이다. left와 right를 움직여주면서 [left, right] 구간 내에 모든 보석이 1개 이상 포함된다면, 이 때 시작 진열대 번호와 끝 진열대 번호를 갱신한다. 이러한 과정에서 left와 right는 다음과 같이 움직인다. 구간 내에 모든 보석이 포함되어 있다면? 이 때에는 크기를 줄여본다. 즉 left를 1 증가시킨다. 구간 내에 모든 보석이 포함되어 있지 않다면? 이 때에는 더 많은 보석을 보아야 한다. 즉 right를 1 증가시킨다. 한편 구간 내에 모든 보석이 포함되어 있는지의 여부에 대해서는 어떻게 알 ..
문제 링크: 21316번 제목 https://www.acmicpc.net/problem/21316 "반드시 그림과 같은 모습임이 보장된다"에서, 그림을 통해 Spica의 특징(?), 즉 Spica를 변별해낼 수 있는 유일한 성질을 발견해야 한다는 것을 알 수 있다. 점 i와 연결되는 점의 개수를 f(i)라고 하고, 점 i와 연결되는 점을 i[1], i[2], ..., i[n]이라고 하면, Spica만 유일하게 f(i) = 3이면서 f(i[1])+f(i[2])+...+f(i[n]) = 6이다. 이 그림에서, Spica는 7이고, 7과 연결되는 점은 6, 3, 8이다. 그리고 f(6)= 1, f(3) = 3, f(8) = 2이다. 반면 f(i) = 3을 만족하는 다른 점들, 즉 3, 4, 9의 경우 f(i[..
Docker란 무엇인가? "Docker란 무엇인가?"라는 질문에 답하기 위해서는, "Container란 무엇인가?"라는 질문에 대해서 먼저 답해보자. 아래는 도커 공식 홈페이지를 참고했다. 컨테이너란 "a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another"이다. 즉, 어플리케이션이 빠르면서도 환경에 영향을 받지 않아 높은 신뢰성을 가지고 작동할 수 있도록, 코드와 모든 의존성을 감싸는 소프트웨어의 표준 단위이다. Docker 컨테이너 이미지는 가볍고 독립적으로 작동하는 실..
문제 링크: 12865번 평범한 배낭 https://www.acmicpc.net/problem/12865 대표적인 풀이 방법은 2차원 DP 배열을 사용하는 방법으로서, 다음과 같이 생각해볼 수 있다. 참고로 보통은 부피라고 하는데 부피와 가치 둘 다 첫 문자가 v라 부피 대신 무게라고 하자. f(i, j) = 배낭에 넣을 수 있는 최대 무게가 j이고, i번째 물건까지 고려했을 때의, 최대 가치 f(i, j)는 어떻게 구할 수 있을까? 🤷♀️ 먼저, w(i)가 j보다 크다면? 이 때에는 물건 i를 배낭에 넣을 수 없다. 따라서 i번째 물건까지 고려했을 때의 결과는 i-1번째 물건까지 고려했을 때의 결과와 같아야 한다. 즉 f(i, j) = f(i, j-1) 🤷♀️ 그렇다면, w(j)가 i보다 같거나 작..
package declaration 소스 파일은 패키지 선언으로 시작한다. package org.example fun printMessage() { /*...*/ } class Message { /*...*/ } // ... 클래스나 함수와 같은, 소스 파일의 모든 내용들은 패키지에 포함된다. 따라서 위의 예시에서는, printMessage()의 풀네임은 org.example.printMessage인 것이며, Message의 풀네임은 org.example.Message인 것이다. Java였다면 위 프로그램은 실행이 불가능하다. 하지만 Kotlin에서는 패키지 지시 내용이 파일 위치와 일치하지 않는다는 경고가 뜨기는 하지만, 그럼에도 위 프로그램은 성공적으로 실행된다. 오히려, 어떤 .kt 파일이 패키지 ..
Kotlin에서 연산자를 사용하면 해당 연산자에 상응하는 멤버 함수가 호출된다. 예를 들어, a+b라는 표현은 내부적으로는 a.plus(b)로 변환되는 것이다. 사실, plus() 함수는 Kotlin의 여러 기본 자료형과 String에 맞추어 작동하도록 오버로딩되었다. // + operator for basic types operator fun plus(other: Byte): Int operator fun plus(other: Short): Int operator fun plus(other: Int): Int operator fun plus(other: Long): Long operator fun plus(other: Float): Float operator fun plus(other: Double):..