문제 - 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분 해결방법 피타고라스 정리만 알면 문제를 쉽게 해결할 수 있다. 피타고라스 정리 : 직각삼각형에서, 빗변 길이의 제곱은 빗변을 제외한 두 변의 각각 제곱의 합과 같다. 코드 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ String triangle = br.readLine(); StringTokenizer st = new StringTokeniz..
문제 - 달팽이는 높이가 V미터인 나무 막대 올라감 - 낮에 A미터 올라갈 수 있음 - 밤에 B미터 미끄러짐 - 정상에 올라가면 미끄러지지 않음 - 달팽이가 나무 막대를 모두 올라가는데 며칠 걸리는지 구하기 해결방법 이 문제는 V미터에 도달할 때까지 단순히 A를 더해주고 B를 빼주면 시간초과를 만나는 문제이다. 따로 계산할 수 있는 수식이 필요하다고 생각했었기 때문에 달팽이가 움직이는 것을 생각해보았다. 달팽이는 정상에 도달할 때 N번 올라간다면 N-1번 내려오는 과정이 필요하다. 마지막 올라갔을 때 정상에 도달하면 내려오지 않아도 되기 때문에 N-1번 내려오는 과정이 필요한 것이다. count = (V - A) / (A - B); 그래서 마지막으로 올라갈 A미터를 남겨두고 하루에 움직일 수 있는 양(A..
문제 - 상근이는 사탕가게에 설탕을 정확하게 N킬로그램 배달해야 함 - 봉지는 3킬로그램, 5킬로그램이 있음 - 최대한 적은 봉지로 배달하려 함 - 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지의 개수 구하기 - 정확하게 N킬로그램을 만들 수 없다면 -1 출력 해결방법 남은 N킬로그램을 5로 나눌 수 있다면 5로 나누어 봉지의 수를 카운팅 해주고, 만약 5로 나누어 떨어지지 않는다면 3을 빼주고 그 남은 무게를 5로 나눌 수 있는지 또 다시 검사하면서 봉지의 개수를 구할 수 있다. 코드 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedRead..
문제 - 상근이는 절단기에 높이 H를 지정 - 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라감 - 한 줄에 연속해있는 나무를 모두 절단 - 높이가 H보다 큰 나무는 H 위의 부분이 잘림 - 상근이는 나무를 필요한 만큼만 집으로 가져감 - 나무는 M미터가 필요함 고찰 문제를 빠르게 이해하고 코드를 이분 탐색으로 짜는 데에는 시간이 얼마 안걸렸었다. 하지만, 이상한 곳에서 생각을 잘못하고 있었어서 계속해서 틀렸습니다.를 본 문제다. 테스트 케이스도 맞고 인터넷에서 찾은 다른 테케들도 다 맞는데 계속 틀렸다고 나와서 너무 화가 났었는데 정말 어이없는 곳에서 틀렸었다. 매번 자료형 때문에 틀리면 다음에는 자료형 때문에 틀리진 않을 거야!!!!! 하지만.... 이번에도 자료형에서 틀렸다. long으로 해줘야..
문제 - 이 아파트에는 "a층의 b호에 살려면 자신의 아래 (a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살야아 한다."는 계약 조건이 있음 - 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지킴 - 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력 - 아파트는 0층부터 있고 각 층에는 1호부터 있으며, 0층의 i호에는 i명이 살고 있음 해결방법 문제에서 설명하는 것처럼 "a층의 b호에 살려면 자신의 아래 (a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살야아 한다."를 만족시키려면 0층과 1호에는 기본적으로 값(0층엔 호수대로, 1호엔 무조건 1명)을 세팅해준 뒤 나머지에 값을 채워야 한다. 문제에 제시된 대로 식을..
문제 - 두 개의 자연수(10,000이하의 자연수) 입력 - 최대공약수와 최소공배수 출력 해결방법 유클리드 호제법을 이용하여 두 개의 자연수에 대한 최대공약수를 구하였다. 유클리드 호제법의 원리는 다음과 같다. 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라고 한다면, a, b의 최대공약수와 b, r의 최대공약수는 같다. 이 성질에 따라서 a를 b로 나눈 나머지 r을 구하고, b를 r로 나눈 나머지를 구한다. 나머지가 0이 될 때 나눈 수가 a, b의 최대공약수가 된다. 최소공배수는 "(a * b) / 최대공약수"로 구할 수 있다. 코드 import java.io.*; import java.util.*; class Main{ public static void main(String[] args) ..