본문 바로가기

Codeforces7

CodeForces 1614B - Divan and a New Project (Java) 문제 : https://codeforces.com/contest/1614/problem/B 어려워 보일 수 있는데, 더 많이 방문할수록 가까이 두면 된다. 예를들어 다음의 경우를 보자. 5 3 8 10 6 1 그럼 얘네들을 더 많이 방문하는 순서대로 정렬해보면 10 > 8 > 6 > 3 > 1이 된다. 그리고 시작지점을 '0'에 둔다고 해보자. 그럼 다음과 같이 배치하면 전체 거리가 최소가 된다. 즉 로직은 다음과 같다. 1. 들어온 값에 대해 내림차순으로 정렬한다. 이 때, 처음 들어왔던 순서를 알아야 정렬하더라도 처음 들어온 순서에 맞게 출력해줄 수 있다. 2. 시작점을 0으로 잡고, '1'에서 정렬한 순서대로 거리가 짧은곳에 둔다. (+1 -> -1 -> +2 -> -2 -> +3 -> ...) 시.. 2021. 11. 27.
CodeForces 1614A - Divan and a Store (Java) 문제 : https://codeforces.com/contest/1614/problem/A 처음엔 냅색문제로 예상했는데, 생각해보니 그냥 작은 값부터 그리디로 확인해봐도 만족할 것 같아 노선을 변경함! 1. 우선 전처리로, 입력으로 들어온 a 중 l 미만이거나 r 초과인 값은 버려버린다. 2. '1'에서 걸러서 남겨진 값들을 정렬한다. 3. 이제 그리디하게 작은 숫자부터 k에서 빼가면서, 0보다 작아지는 경우 그 전까지 구매할 수 있다. 코드 : github import java.io.DataInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comp.. 2021. 11. 27.
CodeForces 1593A - Elections (Java) 문제 : https://codeforces.com/contest/1593/problem/A 입력으로 들어온 a,b,c 중 max값을 구한다. 이 때 다음과 같이 나눠서 확인해볼 수 있다. 1. 현재 확인하는 값(a,b,c 중 하나)이 max값과 같고, max값과 동일한 후보자가 2명 이상인 경우 = 1 2. 현재 확인하는 값(a,b,c 중 하나)이 max값과 같고, max값과 동일한 후보자가 1명인 경우 = 0 3. 현재 확인하는 값이 max값보다 작은 경우 = max - 현재확인중인값 + 1 코드 : github import java.io.DataInputStream; import java.io.IOException; public class Main { private static int res(int .. 2021. 11. 27.
CodeForces 1569B - Chess Tournament (Java) 문제 : https://codeforces.com/contest/1569/problem/B 1. 타입1인 사람에 대해 다른 모든 사람들과 무승부처리를 함 (22, 23 line) 2. 동시에 타입2인 사람을 별도로 list로 관리함 (26 line) 3. 그럼 위의 과정으로 일단 타입1인 사람들은 이제 신경 쓸 필요가 없어짐. 그리고 타입2인 사람들에 대해서만 생각해보면 되는데, 타입2인 사람이 0명이면 그냥 첫번째 과정 거친거 출력하면 끝임. 타입2인 사람이 1명이거나 2명뿐인 경우 조건을 만족할수가 없음. 이 경우가 'NO'가 됨. 타입2가 3명 이상인 경우, 서로 돌아가면서 져주면 됨. 4. 내 경우엔 예를들어 A, B, C, D 라는 타입2인 사람이 있다면 일단 마지막 D가 A를 이긴걸로 침. (.. 2021. 11. 27.
CodeForces 1569A - Balanced Substring (Java) 문제 : https://codeforces.com/contest/1569/problem/A 1. 입력을 받은 값에 대해 a와 b가 나온 횟수를 prefix sum으로 계산해둔다. -> 범위 내의 a와 b의 개수를 빠르게 구하기 위해 2. 그 후 모든 substring에 대해 누적합 배열에서 범위합이 동일한 경우가 있는지 확인한다. 코드 : github import java.io.DataInputStream; import java.io.IOException; public class Main { public static void main(String[] args) throws Exception { initFI(); int tc = nextInt(); StringBuilder sb = new StringBui.. 2021. 11. 27.
CodeForces 1567A - Domino Disaster (Java) 문제 : https://codeforces.com/contest/1567/problem/A 뭔가 복잡해보이지만, 그냥 쭉 보면서 D -> U, U -> D, L과 R은 그대로 출력하면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); StringBuilder sb = ne.. 2021. 11. 27.
CodeForces 4A - Watermelon (Java) 문제 : https://codeforces.com/contest/4/problem/A 수박을 짝수 무게의 두 조각으로 나눌 수 있어야 한다. 짝수 + 짝수 = 짝수 이고, 짝수는 2 이상이어야 하므로 입력으로 들어온 'w'가 4 이상의 짝수인지만 확인하면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int w = Integer.parseI.. 2021. 11. 27.