본문 바로가기

전체 글1068

[자바] 백준 2470 - 두 용액 (boj java) 문제 : boj2470 예시 입력 1을 봐보자. 5 -2 4 -99 -1 98 위 상태로만 보자면, 결국 O(N^2)으로 모든 쌍을 확인하는 것 외에 별다른 방법이 떠오르지 않을 것이다. 정렬을 하면 어떨까? -99 -2 -1 4 98 이 경우 가장 좌측에서 시작하는 포인터를 s, 가장 우측을 e라고 해보자. 's의 값 + e의 값'을 기준으로 포인터를 중앙으로 점차 가져와보자. - 두 포인터가 가르키는 값의 합이 0 초과이라면 -> 더 작은 값을 확인해야하니 e를 좌측으로 이동한다. - 두 포인터가 가르키는 값의 합이 0 미만이라면 -> 더 큰 값을 확인해야하니 s를 우측으로 이동한다. 위 두가지 경우에 따라 s와 e를 중앙으로 이동시키면서 0과 가장 가까운 값을 찾으면 된다! 위의 경우 1. s=-9.. 2022. 7. 4.
[자바] 백준 23802 - 골뱅이 찍기 - 뒤집힌 ㄱ (boj java) 문제 : boj23802 규칙을 잘 찾아 그대로 구현해보자. 규칙은 아래와 같다. 1. N개의 줄에 5N개 만큼의 '@'을 출력한다. 2. 4*N개의 줄에 N개의 '@'를 출력한다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); f.. 2022. 7. 3.
[자바] 백준 20001 - 고무오리 디버깅 (boj java) 문제 : boj20001 남은 문제에 해당하는 cnt를 둔다. 이 경우 1. '문제'가 입력으로 들어왔을 때 cnt를 1 줄인다. cnt가 -1이라면 cnt를 2로 변경한다. 2. '고무오리'가 입력으로 들어왔을 때 cnt를 1 늘린다. 최종적으로 '고무오리 디버깅 끝'이 들어왔을 때 cnt가 0이라면 '고무오리야 사랑해', 아니라면 '힝구'를 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStream.. 2022. 7. 1.
[자바] 백준 1835 - 카드 (boj java) 문제 : boj1835 이걸 어찌 구해야할지 상당히 난감해보일 수 있다. 그럼 반대로 이미 출력의 답을 알고 있다고 할 때, 이 문제에서 제시된 방법대로 진행할 경우 정말 1,2,3,... 이 순서대로 뜰지 확인해볼 수 있을까? 물론 문제에서 제시된대로 코드를 구현만 하면 확인해볼 수 있다. 그렇다면, 이미 답을 알고있다고 가정하고 시뮬레이션을 돌려보자. 그리고 뽑히는 순서대로 1,2,3... 을 넣어준 후, 답의 출력순서대로 다시 짜맞춰주면 된다. 무슨 말이냐면, 아래 그림을 봐보자. 그리고 자바에서 클래스는 주소값을 기준으로 저 링크를 연결해두기 좋다. 그러니 ?로 된 카드들을 배열에 넣어두고, 해당 값들을 덱에다가 미리 넣어둔다(위 그림의 '1'에서 위쪽 파란거 3개가 배열, 아래쪽이 덱에 들어간걸.. 2022. 6. 30.
[자바] 백준 12873 - 기념품 (boj java) 문제 : boj12873 리스트를 하나 두고 미리 1부터 N까지를 순서대로 넣어놔보자. 그럼 이제 단계를 A라고 할 때, 1단계부터 N-1단계까지 A^3번을 리스트 순회하다가 해당 횟수에서 제외시키는 식으로만 진행하면 된다! 다만 이 경우 O(N*N^3) = O(N^4) 이라서 시간초과를 피하기 힘들 것이다. 약간만 생각해보면, 예를들어서 현재 6명이 리스트에 남아있고 4001단계이다. 그럼 4001 실제로 6명을 가지고 약640억번 돌아볼게 아니고, 어차피 한바퀴 돌면 제자리일테니 640억을 6으로 나눈만큼만 돌면 된다! 4001^3 % 6 = 5이다. 이런식으로 A단계에 대해 'A^3 % [현재남은수]'를 계산해서 그만큼만 움직이면 된다. 그럼 총 O(N^2)으로 줄어든다. 추가로 int가 연산이 더.. 2022. 6. 30.
[자바] 백준 11101 - 꿍의 여친 만들기 (boj java) 문제 : boj11101 문자열 파싱문제이다. 로직을 다음과 같이 나눠보자. 설명은 이하의 예제 입력 1의 테스트케이스 2를 기준으로 하겠다. 1 ab:13,b:17,cab:21 ab&b|b&cab 1. 각 테스트케이스의 첫줄을 받아 문자열을 key, 시간을 value로 하는 Map 형태로 만든다. -> ':'와 ','을 기준으로 StringTokenizer로 문자열을 나누게 되면 ab, 13, b, 17, cab, 21이 순서대로 들어가 있게될 것이다. 따라서 순서대로 {ab:13, b:17, cab:21}의 Map 형태로 만들어줄 수 있다. 이후 맵에서 쉽게 "ab"의 시간을 알 수 있다. 2. 각 테스트케이스의 둘째줄을 받아 '|' 을 기준으로 나눈다. -> 'ab&b'와 'b&cab'로 나뉠 것이.. 2022. 6. 30.
[자바] 백준 17826 - 나의 학점은? (boj java) 문제 : boj17826 이미 내림차순으로 정렬된 점수 데이터가 들어온다. arr[i]가 i번째 입력값이라고 해보자. 우선 50개의 데이터를 입력받은 후 (arr[1]~arr[50]) 홍익이의 점수 n을 입력받는다. 그리고 i라는 값을 1부터 50까지 증가시키면서 arr[i]가 n보다 작거나 같은 값이 나올 때 멈춘다. 그 때의 i가 홍익이의 등수가 된다. 이후 i를 기준으로 문제에서 제시된대로 A+, A0, ... 을 조건문을 통해 출력해주면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private void.. 2022. 6. 29.
[자바] 백준 23806 - 골뱅이 찍기 - ㅁ (boj java) 문제 : boj23806 규칙을 잘 찾아 그대로 구현해보자. 규칙은 아래와 같다. 1. N개의 줄에 5N개 만큼의 '@'을 출력한다. 2. 3*N개의 줄에 N개의 '@', 3N개의 ' '(공백), N개의 '@'을 차례대로 출력한다. 3. N개의 줄에 5N개 만큼의 '@'을 출력한다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(.. 2022. 6. 29.
[자바] 백준 23794 - 골뱅이 찍기 - 정사각형 (boj java) 문제 : boj23794 규칙을 잘 찾아보자. 우선 첫 번째 줄과 마지막줄에는 N+2개의 '@'를 출력한다. 그 사이 N개의 줄은 각각 시작과 끝이 '@' 이고, 그 사이에 공백 N개가 출력된다. 위의 규칙을 코드로 구현해주면 된다. 이하 N=10인 경우! 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine());.. 2022. 6. 27.
[자바] 백준 23803 - 골뱅이 찍기 - ㄴ (boj java) 문제 : boj23803 입력과 출력을 보고 규칙을 잘 찾은 후 구현해내면 된다. 규칙찾기는 아래와 같다. 1. 4*N개의 줄을 각각 N개의 골뱅이를 가로로 채운다. 2. N개의 줄에 각각 5*N개의 골뱅이를 가로로 채운다. 위의 규칙을 그대로 코드로 구현해내면 된다. 코드 : github import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private void solution() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readL.. 2022. 6. 26.