목록알고리즘/백준 (170)
곽로그
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로 초기화 되기 때문이다) 따라서 위의..
1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = www.acmicpc.net 접근 문제에서 하라는 대로 하나씩 해나가면 된다. import java.util.Scanner; public class Main { public static void main(String[] arg..
4344번: 평균은 넘겠지 문제 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 입력 첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 출력 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자 www.acmicpc.net 접근 문제를 따라서 구현하면 쉽게 할 수 있다 주의점 출력을 잘하자. %안붙여서 2번이나 틀렸다. import java.util.Scanner; public class Main { public st..
1546번: 평균 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다. www.acmicpc.net 접근 우선 시험점수 중에서 최댓값을 알아야한다. 그러러면 배열을 선언하여 배열에 점수들을 입력받고, 배열을 순회하면서 최댓값을 찾으면 된다. 최댓값을 찾았으면 다시 배열을 순회하면서 변환된 점수를 입력한다. 그다음 변환된 점수로 평균을 구한다. 주의점 예를들어 점수입력을 40 80 60이라고 하자. 그러면 최댓값이 80이므로 40의 변환된 점수는 (40/80)*100 즉 50이 되어야 한다. 근데 만약 점수입력을 int로 받고 변환된 점수의 합도 ..
10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net 접근법1 수열, 즉 수의 배열이니 배열을 선언하고 배열에 수열을 입력받는다. 그런 다음 그 배열을 순회하면서 X보다 작은 수를 배열에 저장하고 순회가 끝나면 X보다 작은 수를 출력한다. import java.util.Scanner; public class Main { public static void main(String[] args) { //정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그..
10817번: 세 수 첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100) www.acmicpc.net 접근법 1 이 문제를 쉽게 접근 할 수 있는 방법 중 하나는 정렬을 이용하는 것이다. 입력받은 숫자를 배열에 저장하여 정렬한 다음 인덱스 1에 있는 숫자를 출력하면 된다. 이 방법은 쉽게 할 수 있으므로 패스 접근법 2 정렬을 모른다고 가정할 때, 접근할 수 있는 방법은 모든 경우의 수를 따지는 것이다. 즉 A,B,C가 가질 수 있는 관계의 모든 경우의 수를 구하면 된다. 3가지 수 밖에 안되기 때문에 세어볼 만 하다. 1,2,3으로 예를 들어 보자. ABC의 관계로는 1) 모두 다른 수 2) 두개가 같은 수 3) 3개가 같은 수가 있을 수 있다. 따라서 ..
11721번: 열 개씩 끊어 출력하기 첫째 줄에 단어가 주어진다. 단어는 알파벳 소문자와 대문자로만 이루어져 있으며, 길이는 100을 넘지 않는다. 길이가 0인 단어는 주어지지 않는다. www.acmicpc.net 첫번째 접근(잘못된 접근법) 10개씩 끊어서 출력한다고 해서 배열을 생각했다. String으로 입력받은다음 for문을 이용해 index가 9로 나누어 떨어지면 개행을 해라라는 로직이다. 1)words변수에 String을 입력받는다 2) for문 i=0, i