알고리즘 풀이/백준(BOJ) 20

[JAVA/백준10951] A + B - 4

문제 문제 풀이 처음에 테스트케이스가 주어지지 않고 계속 입력을 받으므로 while(true)를 하여 Scanner로 a,b의 값을 받아주었는데 런타임 에러가 발생하였다. 검색 결과, Scanner클래스의 hasNext()를 사용하면 된다는 것을 알게 되었다. C/C++에서는 이런 경우 EOF(End Of File)를 사용하면 된다는데 Java에서는 EOF를 직접 입력했기 때문에 멈추기 때문이라고 한다. 소스코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int A = sc.nextInt..

[JAVA/2667] 단지번호붙이기

1. 문제 2. 문제 풀이 지도의 크기 n을 입력받을 때, n의 최대가 25이므로 나중에 출력될 단지개수는 최대 313개가 나올 수 있다. 따라서 각 단지 내 집수를 저장할 배열 danji의 크기를 최대 큰 (n*n/2)+2개로 잡아주었다. n+1사이즈의 map[n+1][n+1]을 for문을 돌면서 (1,1)부터 순서대로 이동시킨다. 이때 값이 1이고 한번도 방문하지 않은 경우가 나오면 단지번호(cnt)를 하나 증가시키고 dfs함수를 호출한다.dfs함수에서는 넘어온 좌표는 이제 방문했음을 표시해야 하므로 visited배열에서 해당하는 좌표에 1을 넣는다. 그리고 해당하는 단지번호에 집 하나가 들어온것이므로 danji[cnt]를 하나 증가시켜준다. 이제 이 단지에 있는 집을 '오른쪽→아래→왼쪽→위쪽'의 시..

[JAVA/백준15552] 빠른 A+B

1. 문제 2. 풀이 Scanner대신 BufferedReader를 사용하여 입력 받을 경우 Enter로만 인식하고 데이터가 String으로 고정되기 때문에 작업 속도가 훨씬 빠르다. readLine()으로 입력을 받을시 리턴값은 항상 String이므로 다른 타입으로 입력받으려면 적절한 형변환이 필요하다. 그리고, 예외처리를 해주어야 하는데 대개 throws IOException을 넣어준다. BufferedReader를 이용하여 공백단위로 데이터 가공하기 1. StringTokenizer의 nextToken()함수를 사용하여 readLine()를 통해 입력받은 데이터를 공백 단위로 구분하여 순서대로 호출할 수 있다. BufferedReader br = new BufferedReader(new InputS..

[JAVA/백준2579] 계단오르기 - DP

https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 www.acmicpc.net 1. 문제 2. 풀이 이 문제는 처음 접근했을때 생각을 잘못해서 고민하는 시간이 굉장히 오래 걸렸다. 마지막에서 결국 정답에 근접한 규칙을 알아냈지만 이를..

[JAVA/백준2577] 숫자의 개수 - 1차원 배열

https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 1. 문제 2. 풀이 각 숫자의 빈도수를 저장할 1차원 배열을 만든다. 여기서 세 수를 곱한 정수값은 charAt()함수를 사용하기 위해 String으로 변환 하여 charAt(0)부터 끝까지 숫자를 추출하면서 해당하는 배열의 인덱스값을 하나씩 증가해준다. 3. 소스코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ne..

[JAVA/백준1463] 1로 만들기 - DP

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 1. 문제 2. 풀이 숫자n을 입력받고 1부터 n까지의 최소연산횟수를 저장하는 배열을 만든다. 배열의 디폴트 값은 다음과 같다. cnt[1]=1 cnt[2]=1 cnt[3]=1 그 다음으로 n=4 즉, 정수 4가 입력되었을때의 연산을 사용하는 횟수는 1) 4를 2로 나누는 경우 2) 4에서 -1을 빼는 경우 이 두가지로 나눌수가 있다. 1) 4→2→1 밑줄친 부분은 cnt[2]와 같다. 2) 4→3→1 밑줄친 부분은 cnt[3]와 같다. 즉, cnt[2]와 cnt[3]은 앞에서 이미 계산되었으므로 이 중 더 작..

[JAVA]백준알고리즘 11720/11721/15552/11721 정리

[11720]자바에서 입력 받는 자료형에 따른 메소드byte : nextByte()short : nextShort()int : nextInt()long : nextLong()float : nextFloat()double : nextDouble()String : next(), nextLine()boolean : nextBoolean() String 자료형은 next()와 nextLine()메소드next(): 공백단위, nextLine()은 엔터 단위 charAt() : 주어진 값에 해당하는 문자열을 리턴한다. **String클래스 메소드 정리http://www.dreamy.pe.kr/zbxe/CodeClip/3766960 string->char->int 1)string->char문자열의 길이(= n)만큼 ..

[JAVA] 백준알고리즘 2747번 풀이

피보나치 수열은 0과 1로 시작하며 바로 앞의 두 피보나치수의 합이 다음 피보나치수가 된다.즉,첫번째항과 두번째항의 합이 세번째 항이되고, 두번째항과 세번째항의 합이 네번째항이 된다.수식으로 표현하면 f(n)=f(n-2)+f(n-1)인데 재귀함수로 풀면 중복계산되어 시간이 많이 걸리므로 반복을 이용해서 풀수 있다. import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); //화면에 입력을 받는다.int n=sc.nextInt();int F1=0, F2=1, F3=1; for(int i=2; i