PS 863

[백준 01034] 램프 [Java]

문제http://boj.ma/1034 1034번: 램프 boj.ma 풀이문제 요약50x50으로 이루어진 램프에 대해, 스위치를 K번 눌러 한 행의 램프 전체가 켜진 행의 최대값을 구하자.아이디어한 행에 대해 K번 눌러 램프를 전부 켜야하므로 행에 존재하는 0의 개수와, K를 2로 나눈 값이 동일해야 한다.0의 개수와 K를 2로 나눈 값이 동일할 때, 전체 행에서 현재 행과 동일한 행을 찾으면 된다. int max = 0; if (zeroCnt 풀이 시간10분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/normal/01034.java problem-solving/baekjoon-online-judge..

[백준 15550] if 2 [Java]

문제http://boj.ma/15550풀이문제 요약a == b, b == c, a ≠ c를 만족하는 자료형과 값을 찾자.아이디어정수의 부동소수점으로의 묵시적 변환에 따른 비교로 문제를 해결할 수 있습니다.float의 가수부 23비트와 숨은 1비트로 총 24비트의 정밀도를 가집니다. 첫 25비트를 가지는 16777216는 1.0 * 2^24로 정확한 표현이 가능하지만, 16777217는 정확한 표현이 불가능해, 표현 가능한 가장 가까운 수(16777216)로 반올림되어 표현됩니다. 따라서 float 16777216 == int 16777217 는 성립합니다.int 16777216float 16777216int 16777217풀이 시간10분소스코드https://github.com/rogi-rogi/probl..

[백준 09272] 상근이의 아이디어 [Java]

문제http://boj.ma/9272 9272번: 상근이의 아이디어 boj.ma 풀이문제 요약n1, n2가 주어졌을 때, R(n1, n2)를 구하자.아이디어S(n1, n2)는 Fermat Number의 집합이며, 서로 다른 두 Fermat Number는 항상 서로소이므로, R(n1, n2)은 1부터 (n2 - n1)까지의 합이 된다. // Solve & Output System.out.println((n2 - n1) * (n2 - n1 + 1) / 2);풀이 시간3분소스코드https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/09272.java problem-solving/baekjoon-online-judg..

[백준 23350] K 물류창고 [Java]

문제http://boj.ma/23350 23350번: K 물류창고 boj.ma 풀이문제 요약우선순위가 낮은 박스들을 무거운 순서대로 놓도록 박스를 돌려보내거나, 나머지 공간에 쌓았다가 다시 쌓는 비용을 계산하자.아이디어레일에 존재하는 박스 중 우선순위가 가장 낮은 박스먼저 쌓아야 한다.가장 낮은 우선순위가 아니라면 뒤로 보내자.현재 처리해야 하는 우선순위의 박스에 대해, 이미 쌓여있는 동일한 우선순위의 박스의 무게와 비교해 무거운 박스가 먼저 쌓이도록 가벼운 박드를 나머지 공간으로 이동 후 쌓아주자.1 ~ M의 우선순위에 대해 박스는 적어도 하나 존재하므로 별도의 예외 검증없이, 우선 순위 빈도만큼 박스를 쌓았다면, 다음 우선 순위는 현재 우선순위 - 1이 된다. private static int mov..

[백준 29891] 체크포인트 달리기 [Java]

문제http://boj.ma/29891 29891번: 체크포인트 달리기 boj.ma 풀이문제 요약주어진 N개의 체크포인트 중 한 번에 최대 K개씩 체크할 수 있을 때, 모두 왕복하기 위한 최소 이동 비용을 구하자.아이디어주어진 모든 체크포인트를 들러야하므로, 절댓값이 큰 체크포인트부터 K개의 체크포인트를 체크하며 왕복해, 전체 이동 비용을 낮춰야 한다.양수/음수는 따로 계산해야한다는 점에 유의하자. // Solve Arrays.sort(A); long sum = 0; for (int i = 0; i = 0 && A[i] > 0; i -= K) { sum += A[i]; } // Output System.out.println(sum * 2);풀이 시간10분소스코드https://github...

[백준 09440] 숫자 더하기 [Java]

문제http://boj.ma/9440 9440번: 숫자 더하기 boj.ma 풀이문제 요약N개의 수를 사용해 합이 최소인 두 수를 만들자.아이디어두 수의 합이 최소가 되기 위해서는, 주어진 수를 오름차순으로 정렬 후 번갈아 사용해 두 수를 만들면 된다.두 수의 큰 자릿수에 작은 수를 부여해야 두 수의 합이 작아지기 때문이다.N개의 수의 빈도를 구하고,0이 아닌 가장 작은 수를 두 수에 부여한 후,남은 수들을 번갈아가며 부여하면 된다.public class Main { private static int solve(int[] A, int N) { ... int[] nums = new int[2]; for (int idx = 0; idx 0) { ..

[백준 16927] 배열 돌리기 2 [Java]

문제http://boj.ma/16927 16927번: 배열 돌리기 2 boj.ma 풀이문제 요약배열을 반시계방향으로 R번 회전하자.아이디어R을 회전하려는 부분 배열의 전체 길이로 나눈 만큼만 회전해도 된다.어차피 제자리로 되돌아오기 때문이다. Max(N, M)개의 부분 배열에 대해 각각 회전을 해주자.처음 풀어보는 유형이라면 구현에 시간이 좀 걸린다. private static void rotate(int start, final int LEN) { int r = R % LEN; while (r-- > 0) { final int temp = board[start][start]; int x = start, y = start; int d = 0; while (d 풀이 시간40분소스코드http..

[백준 15927] 회문은 회문아니야!! [Java]

문제http://boj.ma/15927 15927번: 회문은 회문아니야!! boj.ma 풀이문제 요약문자열 S의 팰린드롬이 아닌 가장 긴 부분 문자열의 길이를 구하자.아이디어팰린드롬이 아닌 가장 긴 부분 문자열의 길이는 아래와 같이 구할 수 있다.S가 팰린드롬이고, 모두 동일한 문자라면, -1S가 팰린드롬이고, 모두 동일한 문자가 아니라면, N - 1S가 팰린드롬이 아니라면, Npublic class Main { private static int solve(char[] S) { boolean isPalindrome = true; for (int i = 0; i > 1); ++i) { if (S[i] != S[S.length - 1 - i]) { isPalindrome = false; b..

[백준 25046] 사각형 게임 (Small) [Java]

문제http://boj.ma/25046 풀이문제 요약민우가 행을 고르고, 진우가 열을 골랐을 때, 겹침 정도에 따라 자신의 점수로 만들 수 있다. 이 때 민우의 최대 점수를 구하자.아이디어격자판에는 음수가 존재할 수 있으며, 민우 다음에는 진우가 고르므로 최종 점수를 결정하는 것은 진우의 선택에 달려있다.때문에 진우가 최선의 선택을 하더라도, 가장 작은 점수를 가지도록 민우는 유도해야 한다.민우와 진우의 선택은 비트마스킹을 통해 표현하고, 둘의 선택이 겹친 경우에는 진우의 점수가 된다.민우의 선택 이후 진우의 선택에 대한 모든 최댓값 중 최솟값이 진우가 가지는 가장 작은 점수고, 전체 합과의 차는 민우가 가지는 최댓값이 된다. // Solve long resultOfJongjinMaxScore = L..

[백준 02643] 색종이 올려 놓기 [Java]

문제http://boj.ma/2643 2643번: 색종이 올려 놓기 boj.ma 풀이문제 요약N개의 직사각형 종이를 자신보다 크거나 같은 종이 위에만 쌓아 가장 높게 쌓을 때의 높이를 구하자.아이디어종이는 서로의 변에 대해 평행하게만 놓을 수 있으므로 (작은 변의 길이, 큰 변의 길이)를 기준으로 입력받고, 오름차순으로 정렬하자.public class Main { private static class Point { int x, y; public Point(int x, int y) { this.x = Math.min(x, y); this.y = Math.max(x, y); } } A.sort((a, b) -> { if (a.x == b.x) { return Integer.compar..