본문 바로가기

[BOJ] - JAVA

(173)
[백준] 10789 : 세로읽기 Java import java.io.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 5개의 String을 char배열로 변환해 저장할 것임 char [][] arr = new char[5][]; // 5개의 문자열 중 가장 긴 길이를 저장할 변수를 생성함 int max_len = Integer.MIN_VALUE; // 5개의 문자열을 입력받고 1차원 char배열로 변환해 저장 for(int i=0;i
[백준] 10815 : 숫자 카드 JAVA 풀이 1. N을 입력받음 2. N개의 수를 입력받고 int형 배열에 저장한 뒤 오름차순 정렬함 3. M을 입력받음 4. int배열과 찾아야 할 값인 target을 인자로 받아 이분탐색하는 함수를 작성함 4-1. low = 0 , high = arr.length-1로 초기화함 4-2. low
[백준] 1931 : 회의실 배정 JAVA 풀이 종료시간이 빠른 순으로 정렬해서 푸는 기본적인 그리디문제처럼 보이지만 주의해야 할 점이 있다. 그저 종료시간이 빠른 순으로 정렬하기만 해서는 3 3 3 3 3 1 3 이 입력으로 주어졌을 때 올바른 출력값은 3인데 2가 출력되는 문제가 발생한다. 종료시간은 같은데 시작시간은 더 빠른 회의가 제대로 처리되지 않는 것이다. 이 문제를 해결하는 방법은 간단하다. 종료시간이 빠른 순으로 정렬하되, 종료시간이 같을 때는 시작시간이 빠른 순으로 정렬을 하는 것이다. 이렇게 정렬한 뒤에는 한 회의의 시작시간 >= 현재 진행된 시간이면 회의를 하도록 코드를 짜주면 된다. import java.io.*; import java.util.*; public class Main { static class Meeting{ int..
[백준] 2783 : 삼각 김밥 JAVA 풀이 1. Y그램 당 X원이라는 정보가 주어질 때 X/Y를 해 1그램 당 가격을 계산하고 그 중 최솟값을 찾음 2. 최솟값에 1000을 곱해 삼각김밥 1000그램의 최저가를 구함 import java.io.*; import java.util.*; public class Main{ public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int x = Integer.parseInt(st.nextToken()); int y = ..
[백준] 1783 : 병든 나이트 JAVA 풀이 https://songwonseok.github.io/algorithm/BOJ-1783/ 백준 1783: 병든 나이트(Java) 문제링크 : https://www.acmicpc.net/problem/1783 songwonseok.github.io 이 포스트를 참고해서 풀었다. 이동 횟수가 4 이상이라면 모든 방향으로 한번씩은 이동해야 한다는 게 무슨 뜻인지 잘 이해가 되지 않았는데, 이 포스트처럼 따라그려보니 이해가 됐다. 1. N M을 입력받음 2. 최대 개수를 세는 변수 cnt를 생성함 3. N이 1인 경우는 어디로도 움직일 수 없으므로 최대 개수는 1이 됨 4. N이 2인 경우는 2, 3 방향으로만 움직일 수 있으므로, 최대 개수가 시작지점을 포함해 4를 넘을 수가 없음 2, 3 방향으로 번갈아서 ..
[백준] 2875 : 대회 or 인턴 JAVA 풀이 이 문제는 N과 M을 줄여나가는 방법과 K를 줄여나가는 두 가지 방법으로 풀 수 있다. N과 M을 줄여나가는 방법 1. N M K를 입력받음 2. 팀의 개수를 세는 변수 cnt를 생성함 2. N>=2 && M>=1 && (N+M>=3+K)일 때만 팀을 만들 수 있음 ( 한 팀에 여학생이 둘, 남학생이 하나가 포함되어야 하므로 N>=2 M>=1을 만족해야 함 그리고 그 N+M이 새로 만들 팀의 총 인원인 3과 제외되어야 하는 K을 더한 것보다 작아서는 안됨 ) 위 조건을 만족한다면 cnt를 1 증가시키고 N은 2, M은 1을 감소시킴 3. cnt를 출력함 import java.io.*; import java.util.*; public class Main{ public static void main(Stri..
[백준] 11047 : 동전 0 JAVA 풀이 동전의 개수를 최소로 하는 방법은 가치가 큰 동전을 최대한 많이 사용하는 것이다. 1. 동전의 가치를 입력받고 ArrayList에 저장함 2. ArrayList를 동전의 가치가 큰 순서대로 정렬함 3. K가 0이 될 때까지 동전의 가치가 큰 것부터 거슬러주고 그 동전의 개수를 카운트함 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.rea..
[백준] 11399 : ATM JAVA 풀이 그리디 알고리즘의 아주 기초적인 문제였다. 1. 인덱스와 소요시간을 저장하는 클래스 Person을 생성함 2. Person의 ArrayList를 생성한 뒤 갑을 입력해줌 3. ArrayList를 소요시간순으로 정렬함 4. 정렬된 ArrayList를 이용해 소요시간의 누적합을 구하고 출력함 import java.io.*; import java.util.*; public class Main { static class Person{ int idx; int time; Person(int idx, int time){ this.idx = idx; this.time = time; } } public static void main(String[] args) throws IOException{ BufferedReader..