Outdated 104

[BOJ] 1991번 트리 순회

복기Python3에서 f-string과 string.join()의 시간 차가 나지 않았다. 하지만 문자열을 구성하는 측면에서는 f-string이 좀 더 편했다. 또, f-string을 이용하니 코드 중복을 상당히 줄일 수 있었다. 세 가지 함수를 사용할 때보다 메모리 사용량과 시간 모두 줄일 수 있었다. 코드C++ 17 #include #include using namespace std; using Node = pair; int N;vector Tree(26); constexpr size_t GetIndex(char node){ return node - 'A';} void InsertToTree(char root, char left, char right){ int index = GetIndex(root)..

[BOJ] 7569번 토마토

문제철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 알고 싶어 한다..

[BOJ] 11404번 플로이드

문제n(1 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다.모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. 입력첫째 줄에 도시의 개수 n(1 ≤ n ≤ 100)이 주어지고 둘째 줄에는 버스의 개수 m(1 ≤ m ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 버스의 정보는 버스의 시작 도시 a, 도착 도시 b, 한 번 타는데 필요한 비용 c로 이루어져 있다. 시작 도시와 도착 도시가 같은 경우..

[Review] 베스트 셀프 - 마이크 베이어 저

책 구매하기 : http://www.yes24.com/Product/Goods/78875935?scode=032&OzSrank=1 이 책은 독자 모두에게 각자의 가장 자연스럽고, 가장 나다운 모습으로 어떻게 삶을 살아갈 수 있는지 알려주는 책이다. 저자는 최고 자아 모델을 소개하고, 삶을 7가지 영역으로 나눠 각 영역에서 최고 자아로 살고 있는지 평가하게 도와주며, 그렇게 살기 위한 지침 또한 알려준다. 본인은 이 책을 거의 두 달 가량 숙독하며, 삶의 전반적인 부분을 정말 세심하게 관찰할 수 있었다. 내 삶 중 어떤 부분이 취약한지 알 수 있었고, 현재 내 모습을 바르게 바라볼 수 있었다. 책에서 묻는 물음들에 정말 진실되게 대답한다면 분명 변화를 느낄 수 있으리라 생각한다. 지금 현재 방황하고 있다면..

Outdated/Book 2020.03.09

[BOJ] 1967번 트리의 지름

문제트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다.이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다.입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, 트리의 지름을 구해서 출력하는 프로그램을 작성하시오. 아래와 같은 트리가 주어진다면 트리의 지름은 45가 된다. 입력파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)..

[BOJ] 1012번 유기농 배추

문제차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있다고 간주한다) 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 몇 ..

[OOP] 객체 간 관계, 클래스 간 관계

목차1. 들어가며2. 클래스 간 관계3. 객체 간 관계4. 참고자료1. 들어가며프로그램을 개발할 때 우리는 단일 객체만을 사용하지 않는다. 여러 클래스와 여러 객체를 생성하고 사용하게 된다. 이렇게 만든 클래스, 객체 사이에는 여러 관계가 생기게 되는데, 이 관계를 잘 이용하면 유연하고, 강건한 프로그램을 만들 수 있게 된다. 이번 게시글에서는 이런 관계를 알아보도록 하겠다.2. 클래스 간 관계클래스 간의 관계는 정적이다. 다시 말해 코드를 작성할 때, 관계가 맺어지고, 실행 중에 변화하지 않는다. 클래스 간 관계는 크게 상속과 구체화가 있다. 클래스 간의 관계를 잘 형성해주면 강건한 일반화 프로그래밍을 할 수 있다. 상속상속(inheritance)은 객체지향 프로그래밍의 특징인 다형성(polymorph..

Outdated/Column 2020.02.27

[OOP] 객체지향 설계 원칙 - SOLID

목차1. SOLID 원칙이란?2. 단일 책임 원칙3. 개방 폐쇄 원칙4. 리스코프 치환 원칙5. 인터페이스 분리 원칙6. 의존성 역전 원칙 7. 마치며8. 참고자료 1. SOLID 원칙이란?좋은 설계란 무엇일까? 본인은 시스템에 예상하지 못한 변경사항이 발생하더라도 유연하게 대처할 수 있는 시스템 구조를 만드는 것이라고 생각한다. 다시 말해 시스템에 새로운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 만드는 것이다. 하지만 좋은 설계를 한다는 것은 말만큼 쉽지 않다. 다행히도 이미 여러 선배 개발자분들에 의해서 여러가지 설계 기법과 원칙이 소개되었다. SOLID 원칙은 그 중 하나다. SOLID 원칙은 소프트웨어를 설계함에 있어 이해하기 쉽고, 유연하고, 유지보수가 편하도록 도와주는..

Outdated/Column 2020.02.27

[BOJ] 2343번 기타 레슨

문제강토는 자신의 기타 레슨 동영상을 블루레이로 만들어 판매하려고 한다. 블루레이에는 총 N개의 레슨이 들어가는데, 블루레이를 녹화할 때, 레슨의 순서가 바뀌면 안 된다. 순서가 뒤바뀌는 경우에는 레슨의 흐름이 끊겨, 학생들이 대혼란에 빠질 수 있기 때문이다. 즉, i번 레슨과 j번 레슨을 같은 블루레이에 녹화하려면 i와 j 사이의 모든 레슨도 같은 블루레이에 녹화해야 한다. 강토는 이 블루레이가 얼마나 팔릴지 아직 알 수 없기 때문에, 블루레이의 개수를 가급적 줄이려고 한다. 오랜 고민 끝에 강토는 M개의 블루레이에 모든 기타 레슨 동영상을 녹화하기로 했다. 이때, 블루레이의 크기(녹화 가능한 길이)를 최소로 하려고 한다. 단, M개의 블루레이는 모두 같은 크기이어야 한다. 강토의 각 레슨의 길이가 분..

[BOJ] 1654번 랜선 자르기

문제집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다.이미 오영식은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이다. 박성원은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm 은 버려야 한다. (이미 자른 랜선은 붙일 수 없다.)편의를 위해 랜선을 자르거나 만들 때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수길이만큼 자른다고 ..