목록알고리즘 (192)
곽로그
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)..
1065번: 한수 어떤 양의 정수 X의 자리수가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. www.acmicpc.net 접근법 주어진 수의 각 자리수가 등차수열을 이루느냐를 판별하는게 관건이다. 그런데 여기서 한자리수, 두자리수(1,2,3, ...15...99)는 그냥 등차수열을 이룬다. 따라서 N이 100 이하의 수로 주어지면 N보다 작거나 같은 한수의 개수는 N개가 된다. 주어진 입력의 범위가 1000이하 인데 1000은 등차가 아니므로 제외하면 100부터 999까지의 수가 입력되었을 때 한수의 개수를 구하면 된다. 예를 들어 1..
4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 www.acmicpc.net 접근법 불린배열을 생각했다. n을 입력해서 d(n)을 구한다. 그러면 불린배열에서 인덱스가 d(n)인 요소의 값을 true로 바꾼다. (불린 배열을 선언하면 fasle로 초기화 되기 때문이다) 따라서 위의..