본문 바로가기

Backjoon

(12)
[백준 2512] 예산 -Java 문제링크 : https://www.acmicpc.net/problem/2512 2512번: 예산 첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상 100,000 이하이다. 그 다음 줄에는 총 예산을 나타내는 정수 M이 주어진다. M은 N 이상 1,000,000,000 이하이다. www.acmicpc.net 내 마음대로 풀이 처음 이문제를 접했을때 '대체 상한선을 잡을 수 있는 구간을 어떻게 설정하지?' 하며 멘붕이 왔다. 그래서 1부터 예산값 M까지 순차적으로 무대뽀로 때려맞추는 무모한 알고리즘을 짰는데, M의 구간값은 1,000,000,000이라는 ..
[백준 1759] 암호만들기 -Java 문제링크 : https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 내 마음대로 풀이 먼저 알파벳을 오름차순으로 sorting 하고 거기서 DFS를 통해 가능한 조합을 찾아냈다. 그런데 자꾸 문제가 틀렸다고 나와서 봤더니, 모음이 1개 이상있어야 하고, 자음이 2개이상 있어야 하는 요구사항을 지키지 않았다. 그 부분을 체크하는 함수를 구현하여 알고리즘을 완성했다. import java.util.Scanner; import java.util.Arrays; p..
[백준 1920] 수찾기 - Java 문제링크 : https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1≤N≤100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1≤M≤100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수들의 범위는 int 로 한다. www.acmicpc.net 내 마음대로 풀이 처음에는 순차탐색을 통해서 답을 구했다. timeout이 걸릴줄 알았는데, 어째 통과는 했다. 하지만 이 문제 풀이의 핵심은 Binary search를 활용해서 O(logn)시간에 원하는 값을 찾는 것이다. 그래서 아래와 같이 sort함수를 통해 array를 ..
[백준 2941] 크로아티아 알파벳 - java 풀이 https://www.acmicpc.net/problem/2941 크로아티아 알파벳에 해당하는 문자들의 갯수를 찾는 문제. 문자열에서 크로아티아 문자를 찾기 위해서 테이블에 있는 8개의 알파벳을 하나하나 카운트했다. 코드는 아래와 같다. import java.util.Scanner; public class OneHour { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String match[] = {"c=","c-","dz=","d-","lj","nj","s=","z="}; int total = 0 ; for(int i = 0; i
[백준 5622] 다이얼 -java 풀이 https://www.acmicpc.net/problem/5622 어렵지 않은 문제. 문자와 숫자를 잘 매칭해주고, 입력으로 들어온 값들을 하나하나 잘 더해주고 추가적으로 1을 더해주면 된다. 코드는 아래와 같다. import java.util.Scanner; public class OneHour { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); char arr[] = input.toCharArray(); int sum=0; for(char i : arr) { sum += Dial(i) + 1; } System.out.println(sum); } public ..