2239번: 스도쿠 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다 www.acmicpc.net 문제 이해 & 기본 개념 스도쿠를 완성시키는 문제 시간 제한이 2초로 충분하므로 백트래킹을 이용하면 쉽게 풀 수 있다. 중요 포인트 가로, 세로, 3x3 사각형에서 중복되는 숫자가 없는지 확인해야한다. 가로, 세로에선 아래와 같이 쉽게 확인할 수 있다. map[x][y]와 for문의 위치가 같아지는 경우 continue로 처리해버리면, 세로의 경우를 체크하지 못할 수 있다. // map[x][y]와 중복되는 숫자가 있는지 체크하는 for문 for (i in..
인터페이스(interface) 개념 자바에서 인터페이스는 클래스들이 필수로 구현해야 하는 추상 자료형이며, 객체 간의 의존성 & 결합도를 낮추기 위해 많이 사용된다. 즉, 확장에는 열려 있고, 변경에는 닫혀 있는 유연한 방식의 개발을 하기 위함이 인터페이스를 사용하는 가장 큰 이유라고 볼 수 있다. 인터페이스(interface)의 특징 1. 다중 상속 가능 자바에선 다중 상속을 금지하고 있다. 인터페이스의 경우 껍데기만 존재하기 때문에 다중 상속이 가능하다. 2. 메소드 선언 or 상수만 사용 가능 인터페이스에선 메소드를 선언만 하며, 구현은 할 수 없다. (추상 메소드) 인터페이스를 사용하고자 하는 클래스에서 해당 메소드를 구현하여 사용 해야한다. 반대로 생각하면, 인터페이스 내의 모든 메소드를 강제로..
2467번: 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 - www.acmicpc.net 문제 이해 & 기본 개념 배열의 원소 중 2개의 합이 0에 가장 가까운 원소 쌍을 찾는 문제 투 포인터를 이용하면 쉽게 구할 수 있다. 중요 포인트 두 개의 포인터를 양 쪽 끝에서 시작하는게 포인트 최종 풀이 두 개의 포인터를 각각 배열의 맨 앞과 맨 뒤에 배치한다. 왼쪽 포인터를 당기는 경우 or 오른쪽 포인터를 당기는 경우 중 0에 더 가까워 지는 쪽으로 포인터를 이동한다. cur = abs(num[i] + num[j]) // 현재 두 원소의 합 if(..
에러 문구Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:debugRuntimeClasspath'.새 프로젝트를 시작하기 전 UI 테스트 용 프로젝트를 만들어 라이브러리 등을 커스텀하며 테스트 해보고 있었다.Collapse Calendar 라이브러리를 Github에서 받아 적용하던 중 위와 같은 에러가 났다.제작자의 Github에는 root build.gradle에 maven { url 'https://jitpack.io' }를 추가하라고 되어 있다.적혀 있는대로 추..
2166번: 다각형의 면적 첫째 줄에 N이 주어진다. 다음 N개의 줄에는 다각형을 이루는 순서대로 N개의 점의 x, y좌표가 주어진다. 좌표값은 절댓값이 100,000을 넘지 않는 정수이다. www.acmicpc.net 문제 이해 & 기본 개념 n개의 점으로 이루어진 다각형의 넓이를 구하는 문제 신발끈 공식을 이용하면 쉽게 풀 수 있다. 중요 포인트 N이 최대 10,000까지, 각 좌표의 절댓값이 최대 100,000이므로 Long 타입을 선택해야 한다. 신발끈 공식에서는 좌표를 이어지도록 나열하는 것이 중요한데, 해당 문제에서는 다각형을 이루는 순서대로 입력이 들어온다. 만약, 순서가 랜덤이라면 하나의 다각형으로 고정 되지 않기에 문제가 성립되지 않는다. 스페셜 저지면 가능하겠지만, 일반 문제이기 때문에..
1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 이해 & 기본 개념 아래 3가지 방법을 통해 입력 받은 수를 1로 만드는 것 X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 최소 횟수를 구해야하는 문제 3으로 나누는게 1을 빼는 것보다 수가 훨씬 작아지므로 자칫하면 그리디 문제로 오해할 수 있다. ex) n = 10 10 -> 9 -> 3 -> 1 10 -> 5 -> 4 -> 2 -> 1 이처럼 가능한 큰 수로 나누는 것보다 1을 먼저 빼는 경우가 최소 횟수가 될 수도 있기 때문에 dp를 이용한다. 최종 풀이 파란색이 처음 계산 되는 부분 빨간색이 중복 계산 되는 ..
채용 공고 현황 & 부족한 부분 1. 주요 자격 요건 & 우대 사항 채용 공고에서 자주 나오는 항목들을 총 5 가지의 카테고리로 분류하여 정리해 보았습니다. 더보기 언어 Kotlin 개발 경험 (대부분은 Kotlin이 많았음) Java 개발 경험 아키텍처 안드로이드 플랫폼에 대한 이해 AAC, Clean Architecture 디자인 패턴 (구조 패턴 ) 협업 서버 개발자와의 협업 Git / Git-Flow를 이용한 개발 경험 타 직군과(디자이너, 기획자) 협업 경험 기술 스택 & 라이브러리 Jetpack 라이브러리 (Compose 등) Coroutine, Flow 개발 경험 DI(Koin/Hilt/Dagger) 라이브러리 개발 경험 Retrofit2 개발 경험 개발 경험 백그라운드 프로세스 개발 경험 ..
11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 문제 이해 & 기본 개념 수열에서 증가하는 부분 (이어질 필요 x)에서 가장 합이 큰 경우를 찾아야하는 문제 중요 포인트 모든 경우의 수를 보는 방법도 있긴 하겠지만, 중복된 연산이 많이 발생 중복된 연산을 줄이기 위해 dp를 사용하면 간단하게 풀 수 있음 최종 풀이 점화식 dp[i] = max(dp[i], dp[j] + a[i]) i는 현재 위치, j는 이전에 선택된 원소의 위치 dp[i]는 i까지의 최..