코딩 테스트/백준 23

[백준] 1764번: 듣보잡 (실버4, 자료 구조, 문자열, 정렬해시를 사용한 집합과 맵, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1764 [백준] 1764번: 듣보잡 (실버4, 자료 구조, 문자열, 정렬해시를 사용한 집합과 맵, JAVA) 해당 문제는 N과 M의 중복 개수와 이름을 출력하는 문제입니다. (중복 개수 출력을 못봐서 두 개의 케이스로 풀었습니다..) 1. getOrDefault를 사용한 풀이 getOrDefault는 지정된 값을 찾아서 없다면 기본값을, 있다면 값에 1을 더하여 사용했습니다. map.put(name, map.getOrDefault(name,0) + 1); 으로 사용을 했는데 name값이 있다면 value를 1 증가 시키고 없다면 기본값(0)을 반환시키도록 하는 함수입니다. 보도 못한(M) 사람을 입력받고 해당하는 키가 있다면 값을 ..

[백준] 1526번: 가장 큰 금민수 (브론즈1, 수학, 구현, 브루트포스 알고리즘, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1526 1526번: 가장 큰 금민수 (브론즈1, 수학, 구현, 브루트포스 알고리즘, JAVA) 수를 하나 입력받고, 4와 7로만 이루어진 숫자의 최댓값을 구하는 문제입니다. 전체 코드는 아래와 같은데, 값을 입력받은 후 해당 숫자를 char 배열로 변환합니다. 이후 각각의 char 배열에 7또는 4가 있는지 확인하고 count를 증가시키게 되는데, count가 char 배열의 길이와 같을 경우 모든 값이 4또는 7로 이루어진 문자이기 때문에 출력 후 종료합니다. 만약, 같지 않다면 입력받은 값(N)에서 1씩 감소시키며 원하는 값을 찾을때까지 반복합니다. import java.io.BufferedReader; import java.i..

[백준] 1417번: 국회의원 선거 (실버5, 구현자료, 구조그리디, 알고리즘시뮬레이션, 우선순위 큐, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1417 1417번: 국회의원 선거 (실버5, 구현자료, 구조그리디, 알고리즘시뮬레이션, 우선순위 큐, JAVA) 매수해야하는 사람의 수를 구하는 문제인데, 예제의 경우 다솜(5)이가 2번과 3번의 사람을 한명씩 매수하게 되면 득표 수가 7,6,6이 되므로 두명을 매수해야하기 때문에 출력값은 2가 나와야 합니다. 아래의 코드에서 각각의 값을 입력받고, 한명의 후보밖에 없을 경우(입력되는 값이 1일 때) 0을 출력합니다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(ne..

[백준] 1302번: 베스트셀러 (실버4, 자료구조, 문자열, 정렬, 해시를사용한 집합과 맵 JAVA)

문제 링크 : https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 (실버4, 자료구조, 문자열, 정렬, 해시를사용한 집합과 맵 JAVA) 해당 문제는 가장 많이 판매된 책을 출력하는 문제입니다. 우선 사용자로부터 입력을 받고 HashMap에 담습니다. key는 책 이름, value는 판매된 횟수로 사용할 예정입니다. maxValue와 maxKey는 마지막 로직에서 가장 많이 판매된 책을 구하기 위한 변수입니다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Syst..

[백준] 1100번: 하얀 칸 (브론즈2, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1100 [백준] 1100번: 하얀 칸 (브론즈2, JAVA) 하얀 칸 위에 말(F)이 있는 칸이 몇개인지 찾는 문제인데, 예제 출력을 보면 아래와 같습니다. 해당 문제에서 첫번째(왼쪽 맨 위 / 0,0)는 하얀 칸으로 시작하고 그 다음부터 검은 칸이 한번씩 반복되는데, 해당 칸을 기준으로 옆 칸과 아래칸은 검은 칸이 됩니다. 화살표로 표시하게 되면 아래 처럼 되는데, 파란색이 하얀 칸이나 빨간 색이 검은 칸입니다. 아래 코드로 시작하여 체스판을 입력받고, for문을 통해 로직을 작성합니다. for문의 tempChar는 하얀칸 위에 있는 말을 확인하기 위해 입력받은 체스판을 char 배열로 만들어 줍니다. public class Ma..

[백준] 14916번: 거스름돈 (실버5, 그리디 알고리즘, JAVA)

문제 링크 : https://www.acmicpc.net/problem/14916 [백준] 14916번: 거스름돈 (실버5, 그리디 알고리즘, JAVA) count 변수를 선언하여 최종적으로 출력한 동전의 최소 개수를 구합니다. while true를 사용하여 무한루프를 실행시키고, 각각의 조건식은 다음과 같습니다. N%5 == 0 && N != 0 5로 나누어 떨어지고, N이 0이 아닐 경우에는 count를 증가시키고 N에서 5를 감소시킵니다. N/2 >= 1 N의 값에서 2를 나눳을 때 최소 1번 이상 나누어질 경우 count를 증가시키고 N에서 2를 감소시킵니다. N != 0 N의 값이 0이 아닐 경우 -1를 출력하고 반복문을 종료합니다. 그 외의 경우에는 N에 대한 모든 계산이 끝나고 나누어 떨어지..

[백준] 14659번: 한조서열정리하고옴ㅋㅋ (브론즈1, 그리디 알고리즘, 50%~53% 시간초과, JAVA)

문제 링크 : https://www.acmicpc.net/problem/14659 [백준] 14659번: 한조서열정리하고옴ㅋㅋ (브론즈1, 그리디 알고리즘, 50%~53% 시간초과, JAVA) 문제의 요약은 아래와 같습니다. "자신보다 낮은 봉우리에 서있는 적들만 처치할 수 있게 되었다" → 현재 위치의 값보다 오른쪽의 값이 낮다면 적을 처치함 "출발한 봉우리보다 높은 봉우리를 만나면 그대로 공격을 포기" → 오른쪽 값이 높다면 그 이후의 값은 보지 않음 "모든 용들은 오른쪽으로만 나아가며" → 오른쪽의 값만을 확인 "봉우리의 높이는 중복 없이 유일하다." → 같은 높이의 값을 존재하지 않음 처음에 시도할 때의 코드인데, 각각의 값들을 비교하고 오른쪽의 값이 더 낮다면 적을 처치(kill)하고, 더 높은..

[백준] 1145번: 적어도 대부분의 배수 (브론즈1, 브루트포스 알고리즘, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1145 [백준] 1145번: 적어도 대부분의 배수 (브론즈1, 브루트포스 알고리즘, JAVA) 해당 문제는 입력받은 5개의 숫자 중, 3개 이상이 공통적으로 가지는 배수를 찾아내는 브루트포스(완전탐색) 문제 입니다. 우선 사용자로부터 입력받은 후 오름차순으로 정렬하고 최솟값을 가지는 0번 인덱스에서 부터 무한루프를 사용하여 탐색을 시작합니다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuil..

[백준] 1253번: 좋다 (골드4, JAVA)

문제 링크 : https://www.acmicpc.net/problem/1253 [백준] 1253번: 좋다 (골드4, JAVA) 우선 아래의 코드를 사용하여 사용자로부터 입력을 받고 배열로 변환 합니다. 단, 문제를 풀 때 수월하게 풀기 위해서 따로 원본 배열과 사본 배열을 생성하고 사본 배열을 오름차순 정렬하였습니다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int N = Integer.parseInt(br.readLine()); String input = br.readLine(); sb.append(input); // 스트링 배열로 변환 S..

[백준] 2839, 10162번: 설탕 배달, 전자레인지(실버4, 브론즈3, JAVA)

문제 링크(2839) : https://www.acmicpc.net/problem/2839 문제 링크(10162) : https://www.acmicpc.net/problem/10162 [백준] 2839번: 설탕 배달 (실버4, JAVA) 봉지의 최수 개수(divide)를 선언하고 사용자의 입력(N)을 받은 후 dfs 메소드를 호출합니다. public class Main { int divide; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); Main main = new Main(); main.dfs(N); } 문제에서 주어진 내용에서 중요한 부분은 `최대한 적은 봉지를 들고..