kwanik의 등록된 링크

 kwanik로 등록된 티스토리 포스트 수는 33건입니다.

[TDD] 01. TDD(Test-Driven Development) 시작하기 [내부링크]

00. 들어가며 테스트 주도 개발(TDD, Test-Driven Development), 말 그대로 테스트가 메인이 되는 소프트웨어 개발 방법론으로 선 개발 후 테스트가 아닌, 선 테스트 후 개발 방식을 의미한다. TDD가 반드시 필요한가 혹은 유리한 것인가에 대한 다양한 포스트들이 존재하지만, 현재 필자는 TDD가 필요하다는 입장이다. 현재 서비스 운영회사를 다니고 있고, Legacy와의 전쟁이 이어지고 있는 가운데 리팩토링 과정에서 수정으로 인한 사이드이펙트를 발생시키지 않기 위해서는 TDD를 도입하는 것이 바람직할 것이라고 생각하기 때문이다. 또한 동료들이 TDD에 대한 관심도가 상당히 높은 편인데, 스스로 많이 부족하다고 생각하여 본격적으로 TDD에 대한 공부도 함께 하고자 한다. 다른 카테고리의..

[오브젝트] Chapter 1. 객체, 설계 [내부링크]

보다 유연하고 확장성 있는 설계를 하기 위해 나는 과연 객체에 대해서 온전히 이해하고 있을까? 사내스터디로 조영호님의 오브젝트라는 책을 공부하게 된 배경이다. Chapter 3를 통해 언급될 역할, 책임, 협력은 실생활에서도 적용된다고 보는데, 내가 회사에서 맡고 있는 역할과 책임을 다하기 위해 그리고 보다 나은 협력을 구축하기 위해 공부하고 있는 내용을 블로그에도 추가적으로 정리하고자 한다. 앞으로 해당 카테고리에 기재할 내용들은 모두 앞서 말한대로 조영호님의 오브젝트 책을 보고 공부한 내용을 정리한 게시글들입니다. 반드시 기억해야 할 내용들을 요약함과 동시에, 공부하며 든 생각을 함께 정리합니다. Chapter 01. 객체, 설계 여느 공학보다 상대적으로 짧은 역사를 가지고 있는 소프트웨어 분야는 이..

[ 백준 2642번 ] 전개도 [내부링크]

1. 문제 2642번: 전개도 입력은 여섯 줄로 되어 있으며 각 줄에는 0에서 6까지의 정수들이 여섯 개 있고, 숫자 사이에는 빈칸이 하나씩 있다. 1에서 6까지의 숫자는 전개도의 면을 나타내고, 0은 전개도의 바깥 부분을 나 www.acmicpc.net 2. 풀이 문제에서 요구하는 것은 간단하다. 전개도가 주어졌을 때, 정육면체를 만들 수 있는 전개도인지 판단하고 가능하다면 숫자 1이 써져 있는 면의 반대 면에 위치한 숫자를 출력하는 것이다. 그렇다면 당연하게도 우리는 주어진 전개도가 정육면체를 만들 수 있는지 여부를 어떻게 판단할 것인가를 고민해야 한다. 2.1 정육면체 전개도의 종류 먼저 정육면체를 만들 수 있는 전개도의 종류는 아래 이미지와 같이 총 11가지가 있다. 그럼 첫 번째로, 11가지 유..

백트래킹(Backtracking)과 DFS(Depth-First Search) [내부링크]

1. 백트래킹? DFS? 백트래킹과 DFS는 어떻게 보면 분리하기가 애매한 개념이다. 굳이 분리해서 의미를 부여하자면 끝까지 가느냐 돌아오느냐로 간단하게 생각해볼 수 있다. DFS 역시 재귀를 통해서 구현하므로 시작 기점으로 돌아오는 개념이 들어가 있기는 하지만, 백트래킹의 경우 현재 가는 길이 더 이상의 해가 아니라고 판단되면 되돌아오는 것을 의미한다. 간단하게 DFS 개념을 정리하자면, 가능한 모든 경로를 깊이 우선으로 탐색하는 것을 의미한다. DFS에 대한 자세한 내용은 아래 게시글을 통해 알아보자! DFS(Depth-First Search) + BFS 복습 깊이 우선 탐색(DFS, Depth-First Search)을 알아보기 이전에 그래프에 대한 개념을 이해해야 하므로, 먼저 아래 포스팅을 참고..

[ 백준 20304 ] 비밀번호 제작 [내부링크]

1. 문제 20304번: 비밀번호 제작 서강대학교 전산실에서 보안직원으로 일하는 향빈이는 한 통의 이메일을 받게 되었다. 이메일에는 서버 관리자 계정에 대한 비정상적인 로그인 시도가 감지되었다는 내용이 적혀 있었고, 첨부 www.acmicpc.net 2. 풀이 결과적으로 어떤 답을 만들어내야 하는가가 다소 헷갈릴 수 있는 문제의 유형이라 생각한다. 그 중 먼저 문제의 핵심인 안전거리와 안전도를 판단하는 방법을 알아본다. 2.1 안전거리와 안전도 3, 4 두 가지의 비밀번호가 입력된 적 있을 때, 2라는 비밀번호를 설정했을 때의 안전거리를 알아보자. 먼저 2, 3, 4를 이진수로 변환하면 아래와 같다. 3: 0011 4: 0100 2: 0010 (2,3)의 경우 서로다른 비트가 한 개이기 때문에 안전거리는..

[ 백준 9742 ] 순열 [내부링크]

1. 문제 9742번: 순열 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 문자열은 서로 다른 숫자와 알파벳으로 이루어져 있으며, 길이는 최대 10이다. 또한, 사전 www.acmicpc.net 2. 풀이 본 문제는 크게 두 가지 방법으로 풀이가 가능하다. 다만, 두 가지 경우 모두 사전 작업이 한 가지 필요한데 이는 바로 주어진 쿼리가 수행 가능한 쿼리인지 먼저 확인하는 것이다. 여기서 수행 가능한 쿼리란 어떤 것을 의미하는 것일까? 문제에서 주어진 순열의 인덱스가 과연 존재하는 인덱스인지 검증이 필요하다는 것이다. 서로 다른 문자로 이루어진 문자열로 순열을 만드는 방법은 (순열의 길이)! 이다. 즉, 입력 받은 순열의 길이 팩토리얼 값을 가지고..

[ 백준 14534번 ] String Permutation [내부링크]

1. 문제 14534번: String Permutation First line of the input contains T (1 ≤ T ≤ 200), the number of test cases. For each test case, there will a string of characters, L (1 ≤ L ≤ 5). www.acmicpc.net 2. 풀이 백트래킹의 가장 기본적인 유형인 순열 만들기 문제다. 집합의 요소를 사용했는지를 판단할 boolean 배열을 선언하여, 각 요소들의 사용여부를 변경해가며 순열을 만들면 해결할 수 있다. 다만 현재 문제는 조합(Combination)이 아닌 순열(Permutation)이므로, 백트래킹을 할 재귀 함수 내에서 시작지점은 항상 첫 요소로 설정해야 한다. 시..

[ 백준 6148번 ] Bookshelf 2 [내부링크]

1. 문제 6148번: Bookshelf 2 Here we use cows 1, 3, 4, and 5, for a total height of 3 + 3 + 5 + 6 = 17. It is not possible to obtain a total height of 16, so the answer is 1. www.acmicpc.net 2. 풀이 문제를 간단하게 요약하면 다음과 같다. John이 가지고 있는 소들을 책장 높이 이상으로 쌓았을 때, 책장과 소들의 높이의 차이가 최소가 되는 경우를 구하라는 것이다. 조건들은 아래와 같다. N ≤ 20 (N은 소의 총 숫자) H_i ≤ 1,000,000 (소의 높이) 1 ≤ B ≤ S (B = 책장 높이, S = 전체 소 높이의 합 조건들로부터 유추할 수 있는 점..

[ 백준 2573 ] 빙산 [내부링크]

1. 문제 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 2. 풀이 본 문제는 다소 복잡해 보이지만, BFS를 이용한 구역나누기 문제이며 잡다구리한 비즈니스 로직(빙산이 녹는 것)은 시뮬레이션 문제라고 볼 수 있다. 문제에 주어진 조건들을 순수하게 따라서 비즈니스 로직을 구현하고, 빙산이 녹아서 두 구역으로 나뉘어졌는지만 그래프 탐색을 통해 해결한다면 어렵지 않은 문제! 중요한 조건인 빙산이 부리되지 않고 한 번에 모두 녹는 경우 0을 반환하는 조건만 잘 체크해준다면 큰 어려움 없이 풀 수 있다. 3...

DFS(Depth-First Search) + BFS 복습 [내부링크]

깊이 우선 탐색(DFS, Depth-First Search)을 알아보기 이전에 그래프에 대한 개념을 이해해야 하므로, 먼저 아래 포스팅을 참고하도록 하자. 그래프와 BFS(Graph & Breadth First Search) BFS(너비 우선 탐색) 알고리즘에 대해 알아보기 전에 필수적으로 알아봐야 할 자료구조는 바로 그래프(Graph)다. 그래프는 실질적으로 프로그래밍 언어 라이브러리 상에서 제공하기 보다는 추상적 kwanik.tistory.com 1. 깊이 우선 탐색(DFS, Depth-First Search) 이전 포스트와 '깊이 우선 탐색'이라는 이름에서 알 수 있듯이, '깊이 우선 탐색'은 먼저 한 방향으로 갈 수 있는 경로를 먼저 탐색하는 방식이다. 이는 그래프 탐색의 가장 단순하면서도 고전적..

[ 백준 16959 ] 체스판 여행 1 [내부링크]

1. 문제 16959번: 체스판 여행 1 크기가 N×N인 체스판이 있고, 체스판의 각 칸에는 1부터 N2까지의 정수가 한 번씩 적혀있다. 지학이는 이 체스판을 이용해서 재미있는 게임을 해보려고 한다. 지학이가 가지고 있는 말은 나이트, www.acmicpc.net 2. 풀이 BFS를 응용해볼 수 있는 좋은 유형의 문제로, 문제의 조건에 따라 말의 방문 처리를 어떻게 꼼꼼하게 할 것 인가가 문제의 키 포인트이다. 먼저 지학이가 수행할 수 있는 동작과 조건을 살펴보자. 1) 동작 말을 다른 유형의 말로 변경한다(나이트, 룩, 비숍) 말을 이동시킨다 2) 조건 같은 칸을 여러 번 방문해도 된다. 1부터 N² 까지 각 칸을 순차적으로 방문해야 한다. 번호에 따라 순차적으로 방문해야 하므로, 체스판을 입력 받음과..

[ 백준 1981 ] 배열에서 이동 [내부링크]

1. 문제 1981번: 배열에서 이동 n×n짜리의 배열이 하나 있다. 이 배열의 (1, 1)에서 (n, n)까지 이동하려고 한다. 이동할 때는 상, 하, 좌, 우의 네 인접한 칸으로만 이동할 수 있다. 이와 같이 이동하다 보면, 배열에서 몇 개의 수를 www.acmicpc.net 2. 풀이 우선 (1, 1) 에서 (N, N)으로 가는 모든 경로를 탐색해야 하는 BFS 문제임은 맞지만, (최대 - 최소) 값이 최소가 되게 만들기 위해서 경로를 탐색하기 위해서는 특정한 기준이 필요하다. 여기서 기준이란 모든 경우를 만들어서 값을 만들어 볼 수는 없으니, 기준값을 만들어 해당 값으로 배열에서 (1, 1)부터 (N, N)까지의 경로가 있는지 확인하는 것이다. 그렇다면 이 기준을 어떻게 만들어 줄 것 인가에 초점..

[ 백준 26999 ] Satellite Photographs [내부링크]

1. 문제 26999번: Satellite Photographs Farmer John purchased satellite photos of W x H pixels of his farm (1 ≤ W ≤ 80, 1 ≤ H ≤ 1000) and wishes to determine the largest 'contiguous' (connected) pasture. Pastures are contiguous when any pair of pixels in a pasture can be connected by tra www.acmicpc.net 2. 풀이 해당 문제는 좌표계에서 BFS를 이용하여 Grouping 하는 기초를 다질 수 있는 문제다. 문제를 요약하자면 아스트리크(*) 로 연결된 가장 넓은 영역을 구하라는..

[ 백준 25416 ] 빠른 숫자 탐색 [내부링크]

1. 문제 25416번: 빠른 숫자 탐색 5 x 5 크기의 보드가 주어진다. 보드는 1 x 1 크기의 정사각형 격자로 이루어져 있다. 보드의 격자에는 -1, 0, 1중 하나의 숫자가 적혀 있다. 격자의 위치는 (r, c)로 표시한다. r은 행 번호, c는 열 번호 www.acmicpc.net 2. 풀이 전형적인 미로 탐색 문제이다. BFS의 개념을 이해하고 있다면 Standard와 같은 문제이므로 큰 어려움 없이 풀이가 가능하다. 네 방위(동, 서, 남, 북)로 움직일 수 있는 학생이 움직일 수 없는 조건에 대해서만 적절하게 체크해주면 풀이가 가능하다. 까다로운 조건 없이 좌표계에서 이동만 하는 것이며, `1`이 적힌 어딘가에 있는 지점으로 도달해야하므로 BFS가 가장 적합한 수단이라고 볼 수 있다. 학..

그래프와 BFS(Graph & Breadth First Search) [내부링크]

BFS(너비 우선 탐색) 알고리즘에 대해 알아보기 전에 필수적으로 알아봐야 할 자료구조는 바로 그래프(Graph)다. 그래프는 실질적으로 프로그래밍 언어 라이브러리 상에서 제공하기 보다는 추상적인 자료구조로써 개념을 차용하여 알고리즘에 응용하여 푸는 경우가 많으므로, 자료구조 카테고리가 아닌 알고리즘 카테고리에서 함께 다루고자 한다. 그래프 그래프의 정의 및 개념 그래프(G)는 정점 집합(V)과 간선 집합(E)으로 구성된 자료구조로, 대상과 대상 간의 관계를 나타내는 자료구조다. 그래프는 다들 너무나도 익숙하게 들어봤을 '쾨니히스베르크(Königsberg) 다리'를 보고 수학자 오일러가 '한붓그리기' 문제를 해결하기 위해 고안한 것으로 알려져 있기도 하다. 이 고안법에서 중요한 것은, 각 육지를 잇는 다..

2022년 회고록 그리고 2023년 [내부링크]

2020년 4월 작은 SI 업체에서 개발자 커리어를 시작한 이후로 처음으로 작성하는 회고록이다. 제목은 2022년 회고록이지만 3년간의 여정을 돌아보는 종합적인 회고록이 되지 않을까 싶다. 해마다 회고록을 적어야지 적어야지 하면서 넘겼던 것이 3년을 가득 채우기를 앞두고 이를 실행에 옮기고 있다(게으른 완벽주의자). 종합적이라 하더라도 다사다난했던 2022년을 중심으로 돌아보고, 이전 년도의 기억들을 통해 어떤 발전을 이루었는지를 위주로 다뤄보고자 한다. 2022년 핵심 키워드 동료, 반면교사, 새로운 시작 적어도 작년까지 내 목표는 '잘'하는 개발자가 되는 것이었다. 내가 생각하는 잘하는 개발자의 핵심은 1) 개인 개발 능력, 2) 의사소통 능력이었다. 개발자는 전문직이라고 볼 수 있으므로, 역시 가장..

Rust를 시작하면서 [내부링크]

들어가며 회사 사내스터디를 통해서 Rust 라는 언어에 대해 알게되었고, 올해의 목표 중 하나로 Rust 언어에 대한 기본기를 익히고 가벼운 프로젝트를 만들어 보는 것을 계획하게 되었다(회고록은 이번주 주말에 마무리하는 걸로). 구체적인 새 언어를 시작하고자 하는 배경은 회고록에서 기재하는 것으로 하고 그렇다면 왜 Rust를 공부해야겠다고 다짐했는지를 적어보고자 한다. 우선 긴 말 필요없이 StackOverflow 설문조사 자료를 통해 확인할 수 있었던 것은 Rust가 7년 연속 가장 개발자들에게 사랑받는 언어라는 것이다. 7년 그것도 무려 7년이나!c 작년 말 드넓은 개발세계를 맛본 뒤로 굉장히 스스로를 우물 안 개구리라고 생각하게 되었고, 현실에 안주하는 삶을 살아오고 있었다는 것을 느끼게 되었었다...

스택(Stack) [내부링크]

개요 스택 자료구조에 대해서 알아본다. 스택(Stack)이란? 스택은 데이터를 저장할 객체와 객체에 적용할 수 있는 연산을 함께 정의한 추상 자료형으로써, 앞으로 다룰 큐(Queue), 데크(Deque)와 같이 자료 구조 형태에 이름이 붙었다는 것에서 큰 의의를 갖는 자료형이다. 스택은 너무나도 잘 알려져 있기에 간단하게 특징을 살펴본다. 위 이미지에서 6개의 선으로 간단하게 표현해서 알아보기 힘들 수는 있지만, 아래 용어정의들을 통해서 스택의 개념을 온전히 이해할 수 있을 것이라 생각한다. 1. LIFO(Last In First Out) 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있는데, 가장 늦게 들어간 자료가 가장 먼저 나오게 된다. 2. TOP 한쪽 끝에서만 데이터 입출입이 발생한다고 하였는데, 스..

무제 [내부링크]

- 얼마 전 응급실을 두 차례 다녀왔다. 자다가 흉부 쪽에 쥐어짜는 듯한 느낌이 들었고 누우면 통증이 더해져 더 이상 누워 있을 수가 없었다. 흉부쪽 통증인지라 응급실에서 별 다른 이상이 없는지 각종 검사를 하고 하루종일 갇혀있었다. CT도 찍고 심전도나 초음파도 살펴봤지만 심혈관쪽에 특이점이 발견되지는 않았다. 그러고 찾아온 주말에 여자친구가 정수리 쪽에 50원 크기의 원형탈모가 생긴 것을 발견하였다. 전문의가 상태를 진단해야겠지만, 직감적으로 스트레스 때문일 것이라는 생각이 들었다. 나름대로 스트레스를 적절히 관리하고 있다고 생각했으나, 그저 애써 무시하고 있었던 것일까. 면접을 진행할 때 기술 외적인 질문으로 항상 '본인만의 스트레스 관리방법이 있는가?'를 물어보곤 했다. 어쩌면 나 스스로에게 가장..

분할정복(Divide & Conquer) [내부링크]

특정한 문제를 풀이함에 있어 큰 문제를 작은 문제로 나뉘어서 푸는 방법들에 대해서는 앞선 포스트들을 통해 계속해서 언급하였다. 오늘 다룰 분할정복(Divide & Conquer)은 그 패러다임을 가장 직관적으로 다루는 테크닉이라고 볼 수 있다. 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산해내는 것 분할정복은 아래의 세 구성요소로 다시 생각해볼 수 있다. Divide : 문제를 더 작은 문제로 분할하기 Merge : 각 문제의 답을 원래 문제에 대한 답으로 병합 Base Case : 더 이상 분할하지 않고 곧장 풀 수 있는 매우 작은 문제 세 구성요소에 대해서는 부가적인 설명이 필요없을 것으로 보이나, 분할정복으로 특정 문..

동적 계획법(Dynamic Programming) [내부링크]

동적 계획법은 정말 가장 많이 대회에서 출제되는 문제 유형임과 동시에 반드시 알아야만 하는 내용이기도 하다. 명확하게 '이것이 동적 계획법 문제다' 라고 분류하기 보다는 앞선 브루트 포스나 그리디 알고리즘과 같이 문제를 풀어나가는 하나의 방법으로 접근하는 것이 올바르다고 생각한다. 동적 계획법 역시 큰 문제를 작은 문제로 나누는 것에서 출발한다. 지금까지의 내용을 정리하면 아래와 같다. 브루트 포스(Brute Force): 작은 문제 하나하나 다 살펴볼거야! 탐욕법(Greedy): 작은 문제마다 답을 선택해 버릴거야! 그렇다면 동적 계획법의 메커니즘은 어떤 것일까? 다른 작은 문제에서 만들어 놓은 값을 다시 쓸거야! 즉, 작은 문제들로 분류하여 연산을 하는 과정에서 같은 연산을 반복적으로 수행해야 한다면..

욕심쟁이 알고리즘(Greedy Algorithm) [내부링크]

앞선 알고리즘 소개 포스트를 통해 완전 탐색을 알아보았는데, 완전 탐색(brute force)의 핵심은 큰 문제를 작은 문제로 분할하여 모든 경우를 탐색해보는 것이었으며 그 중, 작은 문제로의 분할이 가장 핵심이라고 볼 수 있다. 이는 비단 완전 탐색에 국한되는 것이 아니라 향후 다룰 동적 계획법(Dynamic Programming)이든, 지금 다룰 욕심쟁이 알고리즘이든 모든 알고리즘 문제의 가장 기본이 된다고 볼 수 있다. 완전 탐색이 모든 경우에 대해 체크한 후 최적의 해를 골라내는 것이었다면, 욕심쟁이 혹은 탐욕법(Greedy)의 경우 각 단계마다 현재 최선의 방법만을 선택하는 것을 의미한다. 다만 늘 현재의 최선의 해답만을 선택하므로, 앞으로 남은 선택지들에 대한 사항은 고려하지 않게 되는데 이로..

브루트 포스(Brute Force) 알고리즘 [내부링크]

다양한 알고리즘 문제들을 풀이하는 방법들이 있는데 그 중 첫 번째는 역시 브루트 포스(Brute Force) 가 아닐까 싶다. 해킹 기법 중 가장 기본적인 공격 방식 중에 '무차별 대입 공격(brute-force attack)'이라는 것이 있는데, 이는 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 방식을 의미한다! 쉽게 생각하자면 아래 자전거 자물쇠를 살펴보면 된다. 이 자전거 자물쇠를 푸는 가장 쉬운 방법은 '0000' 부터 '9999'까지 하나씩 돌려보면 될 것이다. 브루트 포스(brute force) 알고리즘 역시 마찬가지다. 다른 말로 '무식하게 풀기'라고도 하는데, 특정한 문제에 발생 가능한 경우의 수를 일일이 나열하면서 답을 찾는 것이다. 최단 거리를 찾기 위해 노드 간의 경로들을 일일..

무제 [내부링크]

- 최근 룸메이트의 추천으로 보고 있는 한 드라마가 있다. Apple TV에서 방영 중인 테드 레소(Ted Lasso)라는 작품으로 미식축구 감독이 영국의 프리미어리그 축구 팀 감독이 되는 이야기를 다루고 있다. 실제로 프리미어 리그에 존재하는 팀들이 언급되는 것도 한 가지 관전 포인트이다. 아직 드라마 초반부만 보고 있어 후에 스토리가 어떻게 흘러갈지는 아직 잘 모르지만 간만에 많은 에너지를 품고 있는 드라마를 보게 된 것 같다. 어찌 보면 '머니볼(Money Ball, 2011)' 과 같은 클리셰를 갖고 있는 드라마이긴 하지만, 조금 더 미소지으며 볼 수 있는 개그(?) 장르에 가까울 수 있겠다. 보다 진중한 분위기를 원한다면 비추다. 개인적으로는 개그 요소가 들어가있는 것을 좋아하는 터라 흥미로운데..

무제 [내부링크]

올바른 질문과 답변 그리고 의사소통에 대한 생각 - 최근 사내스터디 내용을 markdown으로 정리도중 한 가지 쓸데없는 난관에 부딪혔다. 무슨 일인지 Intellij 에서 콜아웃을 작성하기 위해 '>' 태그(?)를 사용하고 enter를 입력하면 '>'이 무한 증식하는 현상이 나타나기 시작했다. 마크다운 뿐만 아니라 주석 작성을 위해 '/**' 입력 후 enter를 입력하면 ' * ' 기호도 무한 증식을 하기 시작한 것이다. 분명히 없었던 현상이었고 사용하기 매우 불편했기에 관련 문제들을 찾아보았으나, 적합한 키워드를 찾지 못해서인지 비슷한 현상에 대해 찾을 수가 없었다. 해결은 해야 했기에 난생 처음 커뮤니티에 글을 쓰고 답변을 확인한 후 몇 가지 생각에 빠져들었다. (답변의 키워드들로 해결할 수 없었..

[ 백준 2504 ] 괄호의 값 - Stack [내부링크]

1. 문제: https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 2. 풀이 Stack을 응용한 대표적인 문제를 꼽으라면 단연 괄호와 관련된 문제라고 할 수 있다. 괄호의 쌍이 올바르게 되어 있는가를 판단할 때 스택의 특성을 가장 적극적으로 활용할 수 있는데, 여는 괄호는 스택에 넣고 닫는 괄호는 스택에서 pop을 해 쌍을 확인함으로써 풀이할 수 있다. 문제 해석에 앞서 잠시 올바른 괄호의 쌍인가를 확인하는 코드를 정리하고 간다. // '()' 소..

무제 [내부링크]

- 회사에서 신입 백엔드 개발자를 뽑기 위해서 서류를 검토하고 면접을 진행하고 있다. 너무나도 적은 리소스에 새로운 개발자 뽑기를 너무나도 갈망하고 있었지만, 이 서류를 내가 검토하고 면접을 진행하는 것이 과연 올바른 일인가? 에 대한 의구심과 생각이 끊이질 않는다. 누군가를 채용하기 위해 기준을 정하고 판단을 내리기에 나는 충분한 가치를 지닌 인간인가. 또 한편으로는 스스로 그만큼 부족하다고 생각하기 때문에, 신입이라 하더라도 나보다 더 나은 개발자를 채용함으로써 서로 배울 수 있는 긍정적인 환경을 만들 수 있다고도 생각한다. 다만, 나도 무엇인가를 전달할 수 있을 만한 레벨이 되기 위해 계속해서 노력하자. - 결국 블로그를 다시 끄집어 낸것도 서류 검토를 했던 이유가 크다... 직장을 구하기 위해 끊..

[ 백준 2842 ] 집배원 한상덕 [내부링크]

1. 문제: https://www.acmicpc.net/problem/2842 2842번: 집배원 한상덕 문제 상덕이는 언덕 위에 있는 마을의 우체국에 직업을 얻었다. 마을은 N×N 행렬로 나타낼 수 있다. 행렬로 나뉘어진 각 지역은 우체국은 'P', 집은 'K', 목초지는 '.' 중 하나로 나타낼 수 있다. 또, www.acmicpc.net 2. 풀이 문제의 핵심 조건은 아래와 같다. 1) 상하좌우 뿐만 아니라 대각선으로도 움직일 수 있다. 2) 방문하는 장소들 중 고도의 최고점과 최저점의 차이를 '피로도'라고 하며 이를 최소화 해야한다. 대각선을 추가하는 것이야 방향을 설정해주는 dy, dx 배열만 추가로 설정해주면 되는데 피로도를 최소화하기 위해서는 어떤 방법을 써야할 것 인가? 지도에서 주어진 모..

[ 백준 9328 ] 열쇠 [내부링크]

1. 문제: https://www.acmicpc.net/problem/9328 9328번: 열쇠 문제 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열 www.acmicpc.net 2. 풀이 지도 상에서 돌아다니면서 문을 만났을 때 열쇠가 있다면 열고 들어가고 없으면 열지 못하는 본 문제와 비슷한 유형의 문제를 백준에서 풀었던 기억이 있다. 그 문제가 뭐였는지 기억한다면 첨부하도록 하겠다.... 아무튼 문제의 상근이가 문서를 훔치기 위해서 빌딩 내부를 돌아다녀야 하는데 문제의 중요한 몇 가지만 인지하고 있다면 크게 어려울 것은 없다. 1) 상근이의 출발점이 정해지지 않았으..

[ 백준 6426 ] Pseudo-Random Numbers [내부링크]

1. 문제: https://www.acmicpc.net/problem/6426 6426번: Psuedo-Random Numbers Each input line will contain four integer values, in order, for Z, I, M, and L. The last line will contain four zeroes, and marks the end of the input data. L will be less than M. www.acmicpc.net 2. 풀이 문제를 간단하게 해석하면 다음과 같다. 컴퓨터는 실제로 난수를 발생시킬 수 없지만, 유사난수 생성기(pseudo-random numbers generator)를 통해 난수를 만들어내는 것 처럼 할 수 있다. 널리 알려진 ..

[ 백준 1978 ] 소수 찾기 - 에라토스테네스의 체, 비트마스크 [내부링크]

1. 문제: https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 2. 풀이 소수를 판별하는 방법에는 다양한 방법들이 존재하고, 이를 최적으로 판별하기 위한 방법에도 여러가지가 있다. 기본적으로 소수를 판별하기 위해서는 소수의 조건에 위배되지 않는지 일일이 확인해 보는 가장 원시적인 방법이 있겠다. //원시시대 방법 boolean isPrime = true; for(int i = 2; i < a; i++) { if(a % i == 0) { isPrime = false; break; } } String ret = isP..

비트마스크[BitMask]란? [내부링크]

개요 비트마스크(BitMask) 기법에 대해 이해하고 활용할 수 있는 능력을 키운다. 비트마스크는 알고리즘 카테고리에 들어와 있기는 하지만 알고리즘이라기 보다는 일종의 테크닉에 가깝다. 1. 비트(Bit) 그리고 비트연산 컴퓨터에서 사용되는 데이터의 최소 단위인 비트(Bit)는 '0과 1'의 값을 가질 수 있다. 이 때, 0은 'false / 꺼져 있음(off)' 그리고 1은 'true / 켜져 있음(on)'를 각각 나타낸다. 1111 1111 = 255 각 비트의 의미를 잘 기억해두고 우선 비트를 조작할 수 있는 비트 연산을 먼저 간단하게 정리해본다. 1) AND 연산(&) 논리 연산자인 &&과 마찬가지로 두 비트가 모두 1일 경우 1을 반환한다. 1001 & 1111 = 1001 2) OR 연산( |..

[ 백준 18808 ] 스티커 붙이기 [내부링크]

1. 문제: https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연결되어 있다. 또한 모눈종이의 크기는 스티커의 크기에 꼭 맞아서, 상하좌우에 스티커가 포함되지 않는 불필요한 행이나 열이 존재하지 않는다. 아래는 올바른 모눈종이의 예시이다. 주황색 칸은 스티커가 붙은 칸을, 하얀색 칸은 스티커가 붙지 않은 칸을 나타낸다. 반면 아래는 올바 www.acmicpc.net 2. 풀이 현재 문제에서 요구하고 있는 것은 노트북의 왼쪽 상단부터 오른쪽 하단으로 진행하며 순차적으로 먼저 주어진..