https://www.acmicpc.net/problem/6749 6749번: Next in line You know a family with three children. Their ages form an arithmetic sequence: the difference in ages between the middle child and youngest child is the same as the difference in ages between the oldest child and the middle child. For example, their ages c www.acmicpc.net 난이도 : 브론즈 4 태그 : 구현, 수학 설명 아이가 셋 있는 가족이 있습니다. 둘째와 셋째의 나이차이가 첫째와 둘째의 ..
개발을 하다보면 간혹가다가 배열 혹은 리스트를 정렬할 때, 여러 프로퍼티를 기준으로 정렬을 해야할 때가 있습니다. 아래와 같이 이름, 나이, 키, 몸무게를 프로퍼티로 가지는 Person 클래스가 있습니다. class Person(val name: String, val age: Int, val height: Int, val weight: Int) Person 클래스의 배열도 있고요. val list = arrayOf( Person("홍길동", 20, 170, 60), Person("전우치", 30, 180, 70), Person("사스케", 40, 160, 50), Person("나루토", 50, 175, 65), ) 그렇다면, 위 사람들을 나이 순서로 정렬하려면 어떻게 해야 할까요? list.sortBy..
https://www.acmicpc.net/problem/7287 7287번: 등록 첫 줄에 자신이 맞은 문제의 수, 둘째 줄에 아이디를 출력한다. www.acmicpc.net 난이도 : 브론즈 5 태그 : 구현 설명 자신의 아이디와, 현재 맞은 문제 개수를 출력하는 문제로, 개인마다, 현재 맞춘 문제 수 마다 출력이 달라지는 특이한 문제입니다. 그냥 자신의 백준 정보로 들어가, 맞은 문제 개수를 복사한 뒤, 아이디와 함께 출력하면 됩니다. 소스코드 fun main() { println("655") println("yoon6763") } 자신의 현재 맞은 문제 개수, 자신의 아이디를 넣어야만 합니다. 후기 사람마다, 그리고 문제를 푸는 시점의 맞은 문제 개수마다 출력을 달리 해야 했던게 꽤 신기했던 문제..
https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 난이도 : 골드 5 태그 : 구현, 시뮬레이션 설명 단순 구현 + 시뮬레이션 문제이기에, 저는 큐나 DFS 없이 단순 구현으로 풀었습니다. 문제의 지문을 읽고 그대로 구현하면 되는데, 주의할 점이 몇 가지 있습니다. 로봇은 청소되지 않은 빈 칸이 있을 경우, 일단 반시계 방향으로 회전합니다. 현재 바라보고 있는 방향부터 탐색(X) 일단 왼쪽으로 한..
https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 난이도 : 골드 3 태그 : 구현, 자료구조, 시뮬레이션 설명 1년에 봄, 여름, 가을, 겨울. 네 계절 이있습니다. 봄에는 나무가 양분을 빨아먹고, 나이가 증가하며, 양분이 없는 나무는 죽습니다. 여름에는 죽은 나무가 양분으로 변합니다. 가을에는 나무가 번식합니다. 8방향에 나이가 1인 나무가 생겨나죠. 겨울에는 토양에 새 양분을 추가합니다. 딱히 별도의 알고리즘이나 테크닉 없이..
https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 난이도 : 실버 1 태그 : 다이나믹 프로그래밍 설명 다이나믹 프로그래밍을 응용할 수 있겠는데요. XXXX7 라는 계단 수를 만들려면, 바로 직전 계단수는 뭘까요? 바로 XXX6, XXX8 입니다. 직전 값과 1만큼 차이가 나면 되는 것이죠. 즉, XXXX7이 될 수 있는 경우의 수는 XXX6의 경우의 수와 XXX8의 경우의 수를 더한 것과 같습니다. XXXX7는 5자리, 현재 값은 8 입니다. 이를 dp[자리 수(i)][값(j)] 으로 나타내면, dp[i][j] = dp[i-1][j-1] + dp[i-1][j..
https://www.acmicpc.net/problem/13418 13418번: 학교 탐방하기 입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 건물의 개수 N(1 ≤ N ≤ 1,000)과 도로의 개수 M(1 ≤ M ≤ N(N-1)/2) 이 주어진다. 입력의 두 번 www.acmicpc.net 난이도 : 골드 3 태그 : 그래프 이론, 최소 스패닝 트리 설명 최소 스패닝 트리를 응용하여 각 간선의 최소값을 구하면서, 최대 스패닝 트리를 구해 각 간선의 최댓값을 구하는 문제입니다. 최대 스패닝 트리의 경우, 최소 스패닝 트리에서 단순히 정렬 조건만 반대로 지정하여 한 번 더 수행하면 구할 수 있습니다. 최소 스패닝 트리를 잘 모르신다면 아래 포스팅을 참..
https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 난이도 : 골드 2 태그 : 그래프이론, 그래프탐색, 깊이 우선 탐색, 트리 설명 해당 문제 같은 경우는 DFS + Inorder(중위순회) 를 통해 구현할 수 있겠습니다. 위와 같은 노드가 있다고 가정해봤을때, 이를 인오더로 탐색하면 어떻게 될까요? 7-4-8-2-1-5-3-6-9 순으로 방문을 하게 됩니다. 즉, 좌-부모-우 순으로 탐색을 하기 때문에 좌측에 노드가 있을 경우..
그동안 저는 무작정 백준/프로그래머스에서 코딩 테스트를 풀곤 했습니다. 단순 구현문제나 그리디, 정렬, 이진탐색, 투 포인터 등은 할만 했는데, 어느 순간부터 다익스트라, 최소 스패닝 트리, DFS/BFS 등 특정 알고리즘, 자료구조를 알지 못하면 풀지 못하는 문제가 나오더라고요. 기존에는 모르는게 하나씩 나올 때 마다 인터넷을 뒤져가며 찾아봤지만, 이럴게 아니라 강의나 책을 보고 코딩테스트를 제대로 공부해봐야겠다는 생각이 들어 Do it! 알고리즘 코딩테스트 자바편을 구매해 공부하였습니다. 왜 이 책을 골랐는가 Do it 시리즈는 표지 디자인이 너무 깔끔하고 그동안 읽었던 Do It 시리즈는 내용도 꽤 만족스러웠기에, Do It 시리즈는 그냥 믿고 사는 편입니다. 그리고 무엇보다 시중에 자바 코딩테스트..
지난 동계 방학기간 동안 인턴을 나가게 되었는데, 인턴쉽 기간 동안 파이썬 장고를 사용해 홈페이지 백엔드를 개발하였습니다. 파이썬은 원래 익숙했기에 큰 거부감이 없었고, 장고도 생각보다 간단하여 꽤 쉽게 배울 수 있었습니다. (물론 깊게 들어가면 한 없이 어렵겠지만) 그런데 웬걸... 학과 팀 프로젝트 / 과제용으로 php로 아주아주 간단하게 끄적이다가, 백엔드를 제대로 해보니 너무나도 신세계였습니다. 백엔드가 생각보다 재밌던 저는 인턴이 끝나고 제 주 언어인 자바/코틀린의 백엔드 프레임워크인 스프링을 파보기 시작했는데요. 사실 제대로 공부하려고 하면 계속 새 일이 생겨갖고 'ㅅ'; 자는 시간을 줄이며 틈틈히 인프런 김영한님의 강의를 듣고 있었습니다... 이제 MVC 1편 강의를 다 봤는데, 스프링으로 ..