목록알고리즘/백준 (170)
곽로그
문제 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 www.acmicpc.net 접근방법 최소로 나르려면 5kg을 최대로 해야한다. 그리고 남은 나머지를 3kg으로 운반할 수 있는지를 따지면 된다. N을 5로나..
1977번: 완전제곱수 M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다. www.acmicpc.net 문제접근 M과 N의 범위에 따라 어떻게 처리 해야하는지를 구현하면 된다. 즉, 1(num)부터 시작해서 num의 제곱이 M보다 작으면 num을 1증가시키고 N보다 작거나 같으면 배열에 num의 제곱을 ArrayList에 추가하고 num을 1 증가시킨다. 그 외의 경우에 반복문을 빠져나온다. import java.util.ArrayLis..
1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 접근법 처음에는 문제를 제대로 읽지 않고 1/1 1/2 2/1 1/3 2/2 3/1 이렇게 진행되는 거인줄 알았다. 근데 이게 홀수군과 짝수군인지에 따라 달라진다. 군이라는 말에서 보듯, 이 수열은 군수열이다. 이렇게 나열한다음 규칙을 찾아보면 된다. 1군의 분자 분모의 합은 2, 2군의 분자 분모의 합은 3, 3군의 분자 분모의 합은 4 ... 이런 규칙이 있고, 짝수항과 홀수항에 따라서 짝수항일 경우 분자가 1234 이렇게 변하고 홀수 항일 경우 분모가 1234 이렇게 변한다. 따라서 입력받은 N이 몇번째 군에 속하는지, 그리고 그 군에서 몇번째 항인지를 계산해주면 된다. import ja..
2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. www.acmicpc.net 접근법 어려운 척 하는 문제다. 하나씩 나열하면 쉽게 접근할 수 있다. 고등수학1에 (지금은 어디에 속하는지는 모르겠지만) 군수열이 규칙이다. 이렇게 해서 보면 검은색 테두리 까지는 최소경로가 1이고 초록색 테두리 까지는 최소경로가 2, 빨간색 테두리 까지는최소경..
10039번: 평균 점수 문제 상현이가 가르치는 아이폰 앱 개발 수업의 수강생은 원섭, 세희, 상근, 숭, 강수이다. 어제 이 수업의 기말고사가 있었고, 상현이는 지금 학생들의 기말고사 시험지를 채점하고 있다. 기말고사 점수가 40점 이상인 학생들은 그 점수 그대로 자신의 성적이 된다. 하지만, 40점 미만인 학생들은 보충학습을 듣는 조건을 수락하면 40점을 받게 된다. 보충학습은 거부할 수 없기 때문에, 40점 미만인 학생들은 항상 40점을 받게 된다. 학생 5명의 점수가 주어 www.acmicpc.net 문제를 따라서 그대로 코딩하면 된다.
2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (k ≤ 10) www.acmicpc.net 접근법 재귀로 풀어야 한다는 건 알았지만 재귀함수에 어떻게 인자를 넘겨야할지를 모르겠어서 구글링해봤더니 아주 친절하게 알려주시는 유투브를 발견했다. 이 분의 설명을 바탕으로 짠 코드는 아래와 같은데 문제는 시간초과가 난다는 거다. import java.util.Scanner; public class Main { public static char starArray[][]=new char[3072][6143]; public static void drawStar(int size, int x, int y) { if(size==3) { //별..
1차원 배열 사용하기 단계 1차원 배열 사용하기 www.acmicpc.net 문제를 풀때, 너무 어렵게 생각하는 경향이 있다. 이 문제도 충분히 쉽게 접근할 수 있는데 진짜 어렵게 풀었다. 코드를 올리기 정말 부끄럽지만, 나는 초짜니까. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in =new Scanner(System.in); int N=in.nextInt(); for(int i=0;i
2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다. www.acmicpc.net 접근법 문제에서의 핵심은 "0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지"이다. 여기서 0부터 9까지라고 해서 배열의 인덱스가 떠올랐다. number=A*B*C라고 하면 number를 10으로 나눈 나머지에 해당하는 인덱스의 값을 +1씩하면 되지 않을까 생각을 했다. 1) A,B,C를 입력받는다. 2) A,B,C를 곱한 수를 number에 대입한다. 3) 길이가 10인 (0부터 9까지)인 int배열을 선언한다. 4) while 4-1) number를 10으로 나눈 나머지에 해당하는 인덱스의 값을 1증가시킨가 4-2)..