목록Algorithm/Baekjoon (42)
Development Palette

1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net package w0914.b1463_1로만들기; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. */ //ans[2] = 1; //숫자 2 가 주어졌을 때, 연산하는 가장 최소의 방법은 1개이다 (1빼기 또는..

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net package w0914.b1149_RGB거리; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; //26 57 13 //i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. public class Main { public stat..

N의 범위가 10만 이하까지 가능하기 때문에 1초의 제한(1억)이 있는 이 문제에서는 2중 for문(1000억)을 하지 못한다. 처음의 K만큼의 합을 저장하고 재사용하는 방식을 이용하면 한번의 반복문으로 풀 수 있다. 처음 합을 저장하고 다음 수열의 합을 구할 때, 미리 저장한 합에서 첫번째로 더한값을 다시 빼주고 K 다음 값을 더해주면 된다. package com.testex.b2559_수열; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; // 시간 복잡도 제한 때문에 2중 for문 X // 중복되는 합을 이용하기 publi..

문제를 풀 때마다 테스트 케이스는 맞는데 IndexOutOfBounds 같은 런타임에러에 걸리거나 틀렸습니다가 나온 경우가 많다.. 문제를 잘 읽고 범위와 조건을 잘 보는 연습을 하자... 범위가 1

1로 표기한 네모를 찾을 때 (직사각형이 있는 곳) 시작과 끝점을 최소값부터 최대값으로 돌렸을 때와 그냥 0부터 99까지 돌렸을때 시간은 같다. 빈 공간이 크지 않기 때문에 그냥 0~99까지 돌려도 되나보다 1. 0~99까지 그냥 돌려서 찾기 package com.testex.t0830_IM.b2669_직사각형네개의합집합의면적구하기; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; //min,max 안했을 때 //오른쪽으로 돌리면 x -> 행, y-> 열 public class Main2 { public static void m..

자르는 행과 열을 모두 저장한 후 정렬하고 행과 열의 최대 길이를 찾는 방법을 이용 package com.testex.t0830_IM.b2628_종이자르기; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new In..

dr, dc로 돌리기 하는게 익숙치 않았는데 이번 기회에 많은 틀림과 시간초과로 친해진것 같다.. 알게 된 것 1. 처음에 시작하는애를 생각해서 -1을 해주고 돌리기 시작 이 문제에서는 처음방향이 아래로 먼저 가기 때문에 행좌표의 초기값을 -1로 시작하고 돌리면 된다. 2. 원하는 값을 찾았을 때 nr, nc를 반환하는게 아니라 현재 n, c 값을 반환하도록 하기 nr,nc를 출력하는 방식으로 했을 때 테스트케이스도 잘 나오고 별 문제가 없다고 생각했는데 K가 1일 때는 안된다. 현재 값으로 접근하자! 3. 방향을 바꿀 때 반복문 사용이 아닌 나머지 연산을 사용할 수 있다. d = (d+1) % 4; package com.testex.t0830_IM.b10157_자리배정; import java.io.*;..

ArrayList list.add((index, value) 형태로 ArrayList는 원하는 인덱스에 값을 넣을 수 있다. 이미 그 index에 값이 존재한다면 기존 값을 뒤로 보내고 add 하여 끼워 넣을 수 있다. 줄세우기 문제는 학생들이 다른 학생의 번호표에 따라 뒤로 밀려나기 때문에 ArrayList를 사용했음 package com.testex.t0830_IM.b2605_줄세우기; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class Main { pub..