본문 바로가기

PS/BOJ764

[자바] 백준 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.
[자바] 백준 23817 - 포항항 (boj java) 문제 : boj23817 상당히 좋은 아이디어 문제라 생각한다. 얼핏 브루트포스 문제로 생각하기 힘들고, 당연히 bfs로 어떻게든 잘 해야 할 것 같이 생겼다. 하지만 잘 생각해보면 단순 탐색으로는 최소시간을 찾기 힘들고 모든 경우의 수를 보는 brute force(완전탐색)로 봐야할 것임을 알 수 있다. 로직을 나눠서 생각해보자. 1. 최대 20개의 식당에 대해 5개의 식당을 방문하는데 필요한 최소한의 시간을 구할 수 있어야 한다. 이걸 확인하려면 기본적으로 방문 순서도 중요하다. 즉 20C5가 아니라 20P5로 봐야 한다. -> 모든 정점 사이의 거리를 안다면 1000x1000 짜리 배열이 아니라 최대 21개(S가 1개, K개 20개)의 정점과 그 사이에 거리에 관한 간선이 있는 그래프로 변경할 수 .. 2022. 6. 25.