전체 글

안녕하세요 💻
문제 https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 풀고 나서 Lv3가 맞나..? 싶은 문제였다. 인접행렬을 사용해서 풀면 쉽게 풀 수 있는 문제지만 Lv3라서 뭔가 복잡하게 풀어야 될 거 같아서 나름대로 복잡하게(?) 풀었다. 문제에서 요구하는 바는 연결할 수 있을 만큼 최대한으로 연결하고, 연결된 그룹의 수를 구하는 것이다. 여러 가지 방법이 있겠지만, 나는 노드를 구현해서 풀어보고 싶어서 해당 방식으로 풀었다. 우선 크게 노드..
문제 https://www.acmicpc.net/problem/1445 1445번: 일요일 아침의 데이트 첫째 줄에 숲의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 3보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 숲의 지도가 주어진다. 숲의 지도는 S, F, g, . 만으로 이루어져 있 www.acmicpc.net 문제 풀이 나는 해당 문제를 전형적인 bfs 문제라고 생각한다. 하지만 bfs 문제에서도 조금 더 진화한 문제이다. 우선 문제 초기에는 DP를 사용해서 주변에 존재하는 쓰레기를 저장해서 방문 처리를 하려고 했지만, 결과적으로 도착지점에 도착한 경우에 최적의 도착을 해야하기 때문에, 도착한 시점에 우리는 가장 적은 쓰레기를 마주치고 밟아야 한다. 그렇기 때문에 DP..
문제 https://www.acmicpc.net/problem/16932 16932번: 모양 만들기 N×M인 배열에서 모양을 찾으려고 한다. 배열의 각 칸에는 0과 1 중의 하나가 들어있다. 두 칸이 서로 변을 공유할때, 두 칸을 인접하다고 한다. 1이 들어 있는 인접한 칸끼리 연결했을 때, 각각의 www.acmicpc.net 문제 풀이 항상 높은 난도의 BFS, DFS를 풀면 알 수 있듯이 최적화에 가장 신경을 써야 한다. 그렇지 않다면 무수히 많은 시간초과를 볼 수 있을 것이다... 문제의 핵심은 빈칸을 선택해서 사각형으로 바꾸고, 가장 길게 연결된 사각형의 크기를 구하는 것이다. 그렇다면 우리는 기존의 배열에서 사각형들을 라벨링 하는 것이 필요하다. 왜 라벨링을 해야하는가에 대해서 작업의 흐름을 판..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/87377 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 문제를 끝까지 읽어야 한다. 끝까지 읽으면 교점을 구할 수 있는 공식을 친절하게 제공한다. 나는 공식의 존재를 모르고 있다가, 문제를 끝까지 읽고, 친절한 공식을 발견하고 좌절했다.. 참고 사항을 참고하자. 해당 공식을 이용하면 쉽게 교점을 구할 수 있다. 교점을 구하고, 교점의 x와 y좌표를 통해서 최종적으로 그리게 될 그래프의 위아래 끝점을 구해줘야 한다. 그러한 끝점을 구하면..
문제 https://www.acmicpc.net/problem/15659 15659번: 연산자 끼워넣기 (3) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제 풀이 정말 까다로운 문제였다. 연산자들의 우선순위를 해결해줘야 했기에, 그 부분에서 사람들이 많이 어려움을 느꼈을 것이라고 생각한다. dfs를 이용해서 모든 경우의 수를 탐색하고, 해당 식의 최솟값과 최댓값을 구한다. 초기 풀이 방식에서는 숫자와 연산자들을 모두 포함하는 배열을 하나 생성했지만, 숫자들은 고정이고, 연산자들의..
문제 https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 문제 풀이 최적화에 신경 쓰지 않는다면 엄청난 시간초과를 맛볼 수 있는 문제이다. 최대한 경우의 수를 줄여서 최소한의 탐색으로 해결해야 한다. 학생들은 K개의 글자를 배우고, K개의 글자로 이루어진 단어만 읽을 수 있다. 즉 우리는 N개의 단어 중에서 K개의 글자를 골라서 주어진 N개의 단어들 중에서 최대한 많이 읽어야 한다. 문제에서는 친절하게 반드시 배워야 할 글자들을 제시해 준다..
문제 https://www.acmicpc.net/problem/2661 2661번: 좋은수열 첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다. www.acmicpc.net 문제 풀이 전형적인 백트래킹 문제의 예시라고 할 수 있다. 백트래킹에 대해 간단히 얘기하자면 사전적 정의는 되추적 알고리즘이라고 불린다. 결과를 찾는 도중 막히면 다시 되돌아가서 결과를 찾고, 모든 노드를 탐색해서 만드는 DFS와 비슷하다. DFS와 다른 점은 노드를 탐색하기 전에 특정한 조건을 걸고 해당 조건에 부합하지 않는다면 탐색을 진행하지 않는다. 해당 문제에서 특정한 조건이 이제 인접한 두 개의..
· Skils/Kotlin
scope 함수의 종류는 많지만 각 종류별로 적절한 쓰임을 모르고 사용하는 경우가 굉장히 많다. 각 함수를 적절하게 사용하기 위해서 각 함수들이 어떻게 다른지에 대해서 공부할 필요성이 있다. Scope Functions(스코프 함수) 특정 개체의 콘텍스트 내에서 특정 동작을 실행하기 위한 목적만을 가진 함수 객체의 이름에 일일히 접근할 필요가 없다는 것이 장점이다. 종류로는 apply,run,with,also,let이 있다. apply 인스턴스를 생성하고 , 특정 변수에 할당하기 전에 초기화 작업을 해준다. 모든 명령이 수행되면 명령이 적용되고 새로운 인스턴스를 반환해 줍니다. 즉 자기 자신을 반환합니다. Jaehan이라는 변수를 생성하면서 age와 salary에 대한 수정을 적용할 수 있습니다. app..
기존의 Fragment간의 이동을 구현할 때 supportFragmentManager.beginTransaction(). replace(R.id.frame_layout,GameFragment()).commit() 위와 같은 코드를 통해서 프래그먼트 간의 이동을 구현했습니다. 하지만 Android에서 Navigation이라는 컴포넌트를 통해서 간단하게 프래그먼트 끼리의 이동을 구현할 수 있습니다. 해당 내용은 공식문서를 통해서 공부했고, 그에 대한 제 생각을 적어봤습니다. Navigation 공식문서에 따르면 Navigation의 정의는 아래와 같습니다. Navigation은 Android 애플리케이션 내에서 '대상' 사이를 탐색하는 프레임워크로, 대상이 Fragment, Activity에 관계없이 일관된..
재한
짜이한