본문 바로가기

분류 전체보기1056

[자바] 백준 19829 - The Pleasant Walk (java) 목차 문제 : boj19829 필요 알고리즘 구현 문제에서 원하는 바에 대해 규칙을 찾아서 구현해주면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 사실 k값은 의미가 없다. 그냥 n개의 입력을 받으면서, 이전값과 다른 숫자가 연속으로 몇 번 들어왔는지만 알면 된다. 이 중 최대값을 출력해주면 된다. 예를들어 이하의 예제를 보자. 11 3 1 2 3 3 2 1 2 2 2 2 3 찾으려는 구간들을 색상으로 그려보면 다음.. 2023. 3. 15.
브루트포스 알고리즘 (Brute force 알고리즘) 목차 브루트포스란? 복잡한 알고리즘을 굳이 생각하지않고, 컴퓨터의 빠른 연산력을 이용해 모든 경우를 다 살펴보는 것을 의미합니다. brute force, BF, 완전탐색(exhaustive search), 완탐 정도로 불립니다. 설명을 위해 코딩테스트와 비슷한 형태의 문제로 예를들겠습니다. N개의 숫자를 입력받아 이 중 임의의 3개의 수를 골랐을 때, 세 수의 합이 S인 모든 경우의 수를 구하여라. 입력은 첫째줄에 공백을 기준으로 순서대로 N과 S가 주어진다. (3 ≤ N ≤ 20, lSl ≤ 1,000,000) 두번째줄에는 N개의 정수가 공백을 기준으로 주어지며, 각 정수의 절대값은 1,000,000을 넘지 않는다.(제한시간1초) 예를들어 만약 입력이 아래와 같이 주어졌다면, N=10, S=0이고 3개.. 2023. 3. 15.
[자바] 백준 1092 - 배 (java) 목차 문제 : boj1092 필요 알고리즘 그리디 알고리즘, 정렬 규칙성을 찾아 매번 최선의 방식으로 진행하는 그리디로 풀 수 있는 문제이다. 보통 그리디 태그는 정렬도 필요한 경우가 많다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 풀고나서 다른 사람들 코드를 보니 아예 다른 로직들이 보여서 좀 당황스러웠다. 보통 크레인 무게 제한 내림차순, 박스 무게 내림차순으로 정렬한 후, 각 크레인에 가능한 박스를 넣는 시뮬레이션.. 2023. 3. 14.
자바에서 N개짜리 배열 생성은 O(N)이 걸린다. (C++, C 도 마찬가지) 혹시 C를 써봤다면, 자바에서는 배열 생성하면 모든 값이 초기화가 되어있는게 신기한 적이 있을 것이다. 배열을 만들어서 무언가 담고 싶을 때 C계열에서는 메모리 할당만 받고 끝나서 금방 끝나지만, 자바의 경우 배열을 만들고 초기화까지 해주는 아주 친-절한 언어이다. 그럼 단순히 int형 RxC 짜리 배열(int[][] arr = new int[R][C])을 만들 때 시간 복잡도가 어떻게 될까? 당연히 O(1)일 것 같지만, 자바에선 무려 O(RC)가 필요하다. 이하 10만x1만 짜리 배열 하나 만든건데 이것만 1초가 넘게 걸린다. 그럼 이하 코드를 보자. 알고리즘을 풀 때 bfs를 여러번 돌릴 수 있다. 이 때, 사실 하나의 방문체크로 가능하지만(예를들어 하나의 큰 배열에서 빈 칸들의 구역을 나눌 때) .. 2023. 3. 13.
[자바] 백준 21921 - 블로그 (java) 목차 문제 : boj21921 필요 알고리즘 슬라이딩 윈도우 또는 누적합 둘 중 하나로 풀면 쉽게 풀 수 있다. 다른 방법들도 많을 것 같다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 내 경우엔 슬라이딩 윈도우로 풀었다. 그림으로 보면 쉽게 이해될 것 같다. 5 3 1 4 2 5 1 위의 예시의 경우 그림으로 풀이를 그려보면 다음과 같다. 저 X칸짜리 주황색 부분을 옆으로 그대로 움직이듯이 움직이므로 '슬라이딩 윈도우'.. 2023. 3. 13.
[자바] 백준 8061 - Bitmap (java) 목차 문제 : boj8061 필요 알고리즘 너비 우선 탐색 (BFS) BFS로 최단 거리를 얻어서 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문제에서 제시된 거리가 '|i1-i2|+|j1-j2|' 인 점에서 상하좌우로 한칸 움직인 것을 거리 1로 보는 '맨해튼 거리' 방식임을 알 수 있다. 이 문제에서 원하는건 결국 '1'인 위치들에서 출발해서 '0'인 위치들의 최단거리를 재는 것이다. 따라서 기본.. 2023. 3. 12.
[지속적인 통합] 6장. 지속적인 테스트 지속적인 통합 스터디 메인 페이지 목차 * 주의 : 책(폴M 듀발 저 - 지속적인 통합) 내용 중 기억하고 싶은 내용 및 제 생각을 적은 글 입니다. 책이 나온지 오래되어 설명에 나온 기술스택이 현재 사용되지 않는게 많아 기술스택보다는 이론이나 책의 조언들 위주로 작성할 것 같고, 기술스택은 제가 알고있는대로 수정해서 작성합니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. * 별도로 표기되어 있지 않다면 이미지 출처는 '지속적인 통합 (폴M 듀발 저)' 책 입니다. CHAPTER 6. 지속적인 테스트 선형 시스템의 신뢰도는 각 시스템 컴포넌트의 신뢰도를 곱한 값 각각의 신뢰도가 99%인 컴포넌트 100개로 구성된 프로그램이라면 37% 신뢰할 수 있다. 신뢰할 만한 소프트웨어를 만들려면 최소한 .. 2023. 3. 12.
[지속적인 통합] 5장. 지속적인 데이터베이스 통합 지속적인 통합 스터디 메인 페이지 목차 * 주의 : 책(폴M 듀발 저 - 지속적인 통합) 내용 중 기억하고 싶은 내용 및 제 생각을 적은 글 입니다. 책이 나온지 오래되어 설명에 나온 기술스택이 현재 사용되지 않는게 많아 기술스택보다는 이론이나 책의 조언들 위주로 작성할 것 같고, 기술스택은 제가 알고있는대로 수정해서 작성합니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. * 별도로 표기되어 있지 않다면 이미지 출처는 '지속적인 통합 (폴M 듀발 저)' 책 입니다. CHAPTER 5. 지속적인 데이터베이스 통합 개발 생명주기 내내 소스 코드와 DB가 완전히 '별세계'에서 따로 노는 것 같은 느낌을 받은 적 없나요? 지속적인 데이터베이스 통합 변경 사항이 커밋될 때마다 DB와 테스트 데이터를 다.. 2023. 3. 12.
[자바] 백준 20365 - 블로그2 (java) 목차 문제 : boj20365 필요 알고리즘 그리디 알고리즘 탐욕법으로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 내가 생각한 방식은 다음 두 가지 경우 중 횟수가 작은쪽을 선택하는 것이다. 1. 전체를 파란색으로 칠한 후, 연속된 'R'들을 빨간색으로 칠한다. 2. 전체를 빨간색으로 칠한 후, 연속된 'B'들을 파란색으로 칠한다. 따라서 입력으로 받은 문자열에서 연속된 'R'그룹과, 연속된 'B'.. 2023. 3. 11.
[자바] 백준 15323 - ZigZag (java) 목차 문제 : boj15323 필요 알고리즘 우선순위 큐 정렬을 통해서도 짤 수 있다. 내 경우에 가장 간단히 짤 수 있는게 우선순위 큐라 생각해서 사용했다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문제에서 제시된 조건을 정리해보면 다음과 같다. 1. K개의 문자열을 입력받는다. 2. N개의 문자를 입력받으며 각각에 대해, 입력받은 문자로 시작하는 현재까지 가장 말한 횟수가 적은 문자를 얘기한다. 3. 만약 가장 말한.. 2023. 3. 10.