전체 글

전체 글

    [Java] 백준 16938 (캠프 준비) Gold 4

    Problem : https://www.acmicpc.net/problem/16938 16938번: 캠프 준비 난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다. www.acmicpc.net Approach 조합(Combination)을 이용한 BruteForce(완전탐색)문제이다. 입력의 크기가 최대 15로 비교적 작으므로 가능한 풀이이다. 캠프에 사용할 문제를 고르는 전체 방법의 수는 nC2 + nC3 + ... + nCn이다. 이렇게 나온 결과 조합의 숫자들을 검증해주면 된다. 배열 요소의 총합, 최댓값, 최솟값은 Stream을 사용하여 간결한 코드로 구할 수 있다. Code import java.io.*; import java.util.Arrays; import java...

    [Java] 백준 15683 (감시) Gold 5

    Problem : https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net Approach BruteForce(완전탐색) + 구현 문제이다. 1 ~ 5번 연산을 구현해야 하고, 연산에 필요한 CCTV가 감시하고 있는 영역을 구현해야 한다. 먼저 1 ~ 5번 연산에 필요한 공통적인 부분을 구현해야 한다. (fiilLeft(), fillRight(), fillUp(), fillDown()) 위 4개 메소드는 현재 위치 (x, y)에서 XXX 방향..

    [Java] EOF(End Of File) 처리하기

    EOF(End Of File) EOF(End Of File)은 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 의미한다. Scanner와 BufferedReader 두 클래스의 EOF 처리를 알아보자. Scanner 보다 BufferedReader 가 성능면에서 우월하다. Scanner Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { sc.nextLine(); } while(sc.hasNext()) { sc.next(); } BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = ""; // 1 whil..

    [Java] 백준 16936 (나3곱2) Gold 5

    Problem : https://www.acmicpc.net/problem/16936 16936번: 나3곱2 나3곱2 게임은 정수 하나를 이용한다. 가장 먼저, 정수 x로 시작하고, 연산을 N-1번 적용한다. 적용할 수 있는 연산은 두 가지 있고, 아래와 같다. 나3: x를 3으로 나눈다. x는 3으로 나누어 떨어져야 www.acmicpc.net Approach Backtracking으로 BruteForce(완전탐색)를 수행하는 문제이다. 만들 수 있는 모든 경우의 수를 탐색하기 위해 백트랙킹 기법을 사용하였다. 모든 숫자를 시작 숫자로 시도해 보아야 한다. 3으로 나누어 떨어지면, 3으로 나눈 수가 배열에서 아직 사용이 되지 않았는지 검사하고 재귀 호출한다. 2를 곱한 수가 배열에서 아직 사용이 되지 ..

    [Java] 백준 17089 (세 친구) Gold 5

    Problem : https://www.acmicpc.net/problem/17089 17089번: 세 친구 첫째 줄에 사람의 수 N(3 ≤ N ≤ 4,000), 친구 관계의 수 M(0 ≤ M ≤ 4,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계를 의미하는 두 정수 A, B가 주어진다. 친구 관계는 A와 B, 그리고 B와 A가 친 www.acmicpc.net Approach BruteForce(완전탐색) 문제이다. 먼저 입력을 받으면서 관계 배열 relations 을 구성한다. 또한, 특정 사람의 친구의 수를 기록한다. 세 친구 A, B, C 를 A = 0, B = 1, C = 2부터 시작하여 세 친구 ABC가 모두 친구인 경우를 찾고, 그 때의 최대 친구 수를 찾으면 된다. ABC의 친구를..

    [Java] 백준 1981 (배열에서 이동) Gold 1

    Problem : https://www.acmicpc.net/problem/1981 1981번: 배열에서 이동 n×n짜리의 배열이 하나 있다. 이 배열의 (1, 1)에서 (n, n)까지 이동하려고 한다. 이동할 때는 상, 하, 좌, 우의 네 인접한 칸으로만 이동할 수 있다. 이와 같이 이동하다 보면, 배열에서 몇 개의 수를 www.acmicpc.net Approach 이분탐색 + BFS 문제이다. 꽤 어렵게 문제를 풀었다. 문제 풀이에 앞서, 입력을 받으면서 구해놔야 할 것이 있다. 배열의 값중 최솟값 minNum과 최댓값 maxNum을 이분탐색의 left와 right에 이용하기 때문이다. left는 0이다. (배열의 값이 모두 같은 경우 최대 - 최소 = 0이다.) right는 maxNum - minN..

    [IntelliJ] Lombok 설치 및 Lombok Annotation

    Lombok 이란? 롬복(Lombok)은 자바 Domain(DTO, VO) 에서 반복적으로 작성되는 getter/setter나 toString, 생성자 코드 등의 소스들을, 어노테이션(Annotation)을 사용하여 생략할 수 있도록 컴파일 시점에 자동으로 생성해주는 라이브러리이다. 1. Lombok 설치하기 본 게시글은 아래 설명한 환경을 기반으로 설명하겠다. IntelliJ IDEA Ultimate 2021.1.2 Gradle 6.7 Maven 3.6.3 참고로 IntelliJ 2020.03 이후 버전에서는 기본 Plugin으로 Lombok이 설치되어 있다고 한다. IntelliJ에서는 Plugin으로 lombok을 지원한다. File-Settings-Plugins-Marketplace에 lombok..

    [Java] 백준 1561 (놀이 공원) Gold 2

    Problem : https://www.acmicpc.net/problem/1561 1561번: 놀이 공원 첫째 줄에 N(1 ≤ N ≤ 2,000,000,000)과 M(1 ≤ M ≤ 10,000)이 빈칸을 사이에 두고 주어진다. 둘째 줄에는 각 놀이기구의 운행 시간을 나타내는 M개의 자연수가 순서대로 주어진다. 운행 시간은 1 이상 30 www.acmicpc.net Approach 이분탐색을 이용하여 풀이가 가능한 문제이다. 먼저 n이 m이하일 경우, 0초에 모든 사람들이 놀이기구에 탑승할 수 있으므로 n번째 놀이기구가 마지막 사람이 타는 놀이기구가 될 것이다. 위 경우가 아니라면, 문제를 푸는 주요 로직은 다음과 같다. 먼저 n -= m 을 수행한다. (0초에 m명이 놀이기구를 탈 수 있기 때문이다.)..

    [Git] git rebase로 특정 커밋 수정+삭제 하기

    git rebase git rebase의 용도는 주로 merge에 이용되긴 하지만, 커밋 내역을 수정/삭제 할 때에도 많이 쓰인다. 먼저 git rebase를 사용하기 위한 커밋 내역은 다음과 같다. 아래쪽으로 갈수록 최근 커밋이다. test-1 생성 후 커밋 test-1 수정 후 커밋 test-1 삭제 후 커밋 test-2 생성 후 커밋 Commit message 수정하기 아래 명령어로 최근 n개의 커밋을 확인해 볼 수 있다. -i 옵션은 interactive 모드를 의미하며 새 에디터가 열린다. (최근 3개의 커밋 내역을 상호작용 모드로) $ git rebase -i HEAD~3 여기서 2번째 커밋 메시지"delete test-1"를 수정하려면 pick키워드를 reword키워드로 고쳐준다. 그러면 아..

    [Git] git revert 사용하여 Commit 되돌리기(Undo)

    git revert 원하는 특정 commit 상태를 되돌린다.(Undo 개념) 이 때, 나머지 commit들을 그대로 유지시킨다. 그렇기 때문에 remote repository 충돌이 적게 난다. 같은 기능을 수행하지만, 되돌린 이후의 commit 을 모두 제거하는 git reset과는 차이가 있다. 먼저 git revert 실습을 하기위하여 아래 순서와 같은 커밋들을 수행했다. test-1 생성 후 커밋 test-2 생성 후 커밋 test-2 삭제 후 커밋 test-3 생성 후 커밋 test-4 생성 후 커밋 test-4 내용에 "hello world"를 추가 후 커밋 test-5 생성 후 커밋 현재 상태에서는 test-1, test-3, test-4, test-5 파일만 존재한다. 3번 과정의 커밋(..