본문 바로가기

전체 글

(38)
[백준 2146] 다리 만들기 - Java 문제링크: https://www.acmicpc.net/problem/2146 2146번: 다리 만들기 여러 섬으로 이루어진 나라가 있다. 이 나라의 대통령은 섬을 잇는 다리를 만들겠다는 공약으로 인기몰이를 해 당선될 수 있었다. 하지만 막상 대통령에 취임하자, 다리를 놓는다는 것이 아깝다 www.acmicpc.net 문제설명 문제접근 다리를 놓으려면, 다리의 시작지점과 끝지점을 알아야 합니다. 그러기 위해서는 섬들을 식별할 수 있어야 합니다. 따라서 각 섬들을 먼저 식별하고, 섬들과 붙어 있는 지역(1과 인접한 0)을 체크해 줍니다. 체크를 한 후, 2중 for 문으로 배열을 순회하며, 체크한 부분에서 시작해 다른 섬으로 이어지는 최소 경로를 BFS로 찾습니다. 체크했던 모든 지역에서 BFS를 진행한 후..
[백준 17406] 배열 돌리기4 - Java 문제링크: https://www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net 문제설명 문제접근 조합 + 시뮬레이션 문제입니다. 회전연산을 모두 사용하는 조합 중에 나올 수 있는 배열 A의 값의 최솟값을 찾으면 됩니다. 코드에서 수행해야 하는 작은 기능들이 많으므로 각각을 함수로 구현해 사용하면 덜 복잡하게 구현할 수 있습니다. 주의사항 조합을 탐색할 때마다 배열을 새로 복사해 주어야 합니다. 그래야 현재 회전연산의 결과가 다른 조합..
[프로그래머스 lv3] 경주로 건설 - Java 문제링크: https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 문제설명 문제접근 BFS로 풀었습니다. 주의할 점은 어떤 방향으로 이동하냐에..
[백준 1107] 리모컨 - Java 문제링크: https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼�� www.acmicpc.net 문제설명 문제접근 타겟 N을 기준으로 채널을 위아래로 각각 이동하며 숫자 버튼을 눌러서 만들 수 있는지 확인합니다. 이동한 채널이 숫자 버튼만을 눌러서 이동이 가능하다면 채널 N에서 현재 채널까지 이동한 횟수(위아래 버튼을 누른 횟수) + 현재 채널을 숫자버튼을 눌러 이동할 때 필요한 버튼 입력횟수를 더해 반환합니다. 만약 타겟 N에서 시작채널 100 까지 이동했을 ..
[백준 1182] 부분 수열의 합 - Java 문제링크: https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 문제설명 문제접근 0번째 인덱스부터 차례로 해당 인덱스의 값을 더하는 경우와 더하지 않는 경우 두 가지로 나눠 탐색을 진행하면 풀 수 있습니다. 이 때 중복 확인을 방지 하기 위해 더하지 않는 경우는 타겟 S와 비교하지 않고 넘어갑니다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..
[LeetCode] PalindromicSubstrings - Java 문제링크: https://leetcode.com/problems/palindromic-substrings/ Palindromic Substrings - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제설명 Given a string, your task is to count how many palindromic substrings in this string. The substrings with different start indexes or end indexes..
[LeetCode] Group Anagrams - Java 문제링크: https://leetcode.com/problems/group-anagrams/ Group Anagrams - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제설명 Given an array of strings, group anagrams together. Example: Input: ["eat", "tea", "tan", "ate", "nat", "bat"], Output: [["ate","eat","tea"], ["nat","tan"], ["b..
[item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라. [Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 핵심요약 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 이럴 때는 의존 객체 주입 기법을 사용하자. 의존객체주입이란 필요한 인스턴스를 직접 생성하는 것이 아니고 외부에서 주입하여 객체 간 결합도를 줄이고 유연한 코드를 작성하게 하는 방법. // 코드 1 - 의존객체주입의 예 public class Computer { private Cpu cpu; public Computer(Cpu cpu) { this.cpu = cpu; } }부적절한 클래스 예시 // 코드 2 - 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static fina..