생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6019.java 기차 A,B가 A,B의 속력으로 서로를 향해 달리고 있으며, 파리가 A기차 시작점에있다. D A B F가 주어진다. D는 기차 사이의 거리 A는 A기차의 속력 B는 B기차의 속력 F는 그 사이에 있는 파리의 속력이다. A 기차에서 출발한 파리는 B기차에 닿을 때까지 F의 속력으로 이동한 후, 다시 A기차를 향해 날아간다. 그리고 A 기차에 닿으면 다시 B기차를 향해 날아간다. A,B 기차가 만나서 파리가 죽을 때까지 파리가 이동한 거리를 구하여라. 처음 생각파리가 죽는다니! 끔찍한 문제지만 문제를 간단하게 생각하면 끔찍하지만은 않은 문제다.▶ 수학적인 접근을..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q5789.java n개의 상자에대해서 q개의 작업을 준다. q개의 작업은 L R로 주어지며 1번째 작업일 경우 L부터 R까지 번째의 상자를 1번으로 3번째 작업일 경우는 L부터 R까지 번째의 상자를 3번으로 바꾼다. 최종 작업이 끝났을 때 상자의 상태를 출력하여라. 처음 생각특정 구간에대해 주기적으로 상태를 바꿔주어야한다. Python으로 풀면 굉장히 쉽게 풀 수 있다. 하지만 일단 Java로 접근을 해보자. 다음 생각크기가 n인 배열을 선언해준 뒤, q개의 작업을 받아 반복문의 범위를 L-1
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q5948.java 7개의 숫자가 주어질 때 3개의 수를 더하여 만들 수 있는 수중 5번째로 큰 수를 출력하여라. 중복 숫자는 1개로 친다. 처음 생각중복을 없앨 생각으로 Set 자료 구조를 생각하였다. Set은 중복을 불허하는 자료구조이다. Set에 담긴 자료들을 정렬하기 위해 List로 바꿔주기 위해 List도 선언해 주었다. 다음 생각7개중 3개의 숫자 조합이므로 반복문 변수 j,k,z를 사용하였다.▶ k의 경우는 j+1 부터 시작을, z의 경우는 k+1부터 시작을 하게 하였다.▶ 이럴경우 중복된 숫자가 골라지지는 않겠지만 더했을 경우 같은 숫자들이 나올 수 있으므로 Se..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6190.java n개의 수가 주어진다. 두 수를 곱한수가 단조 증가하는 수인 경우 그 최대값을 출력하여라. 단조 증가하는 수가 없다면 -1을 출력하여라. 단조 증가하는 수란 111122345 처럼 계속해서 증가하는 수다 1111144442, 12345675같은 수는 단조 증가하는 수가 아니다. 처음 생각조합을 짜야하나 생각했지만 2개의 수만 곱하면 되므로 2중 반복문을 통해서 배열에 저장해둔 수들을 곱해주었다.▶ 2중 반복문 구현시 각각의 변수를 i,j라 한다면 중복된 경우를 피하기 위해 j의 시작은 i+1부터 시작해 주면된다. ▶ 예를들어 1 2 3 4 가 주어졌다면 1*..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6718.java 물건의 거리가 주어졌을 때, 주어진 방식으로 거리에 따라 수치를 매겨 출력하여라. 처음 생각우선, 테스트케이스의 개수가 100,000개 이므로 StringBuilder를 통해 출력을 해주어야겠다고 생각하였다. 다음 생각문제는 간단하다. 거리가 주어지면 그 거리에 해당하는 주어진 수치를 출력하면 된다. 조금 까다로운 점이라면 문제에서 거리는 m 단위로 주어지고 구분해야하는 수치는 km 를 기준으로 수치를 분류해놓았다.▶ 1km는 1000m 임을 기억하면서 문제를 풀면된다. 다다음 생각입력으로 들어오는 거리가 int형 범위를 넘지 않으므로 int로 입력을 받아주..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q10000/Q15552.java 각 A+B의 결과를 출력한다. 처음 생각입력으로 받고 계산후 출력해야하는 개수가 최대 100만개로 매우 많으므로 Java의 경우 Scanner, Python의 경우 input() 을 그대로 사용하면 시간 초과가 날 가능성이 매우 크다.▶ Java의 경우는 BufferedReader, Python의 경우에는 sys.stdin 을 이용해서 입력을 받아주면 된다. ▶ Java의 경우 StringBuilder나 BufferedWriter를 통해 입력을 누적해서 한 번에 출력을 해주어야 메모리 초과가 나오지 않는다. 방안1) 방안 입력과 출력이 많다고 생각되..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1978.java 주어진 숫자들 중 소수의 개수를 출력하여라. 처음 생각소수를 구할 수 있는 다양한 방법들이 있지만 에라토스테네스 체를 사용하는것이 가장 간단하면서 괜찮은 속력을 보장해주는것 같다. 특히, 이처럼 다양한 숫자들을 검사해야할 때는 매번 소수 판별을 하는 것보다 에라토스테네스 체를 이용해서 한 번에 구해놓는것이 좋다.▶ 범위가 1000까지 이므로 1000이하의 모든 소수를 구해놓은 뒤, 주어진 숫자들중 소수의 개수를 세어 출력해주었다. 방안1) Java 풀이 123456789101112131415161718192021222324252627282930packa..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1476.java 준규가 사는 나라는 다른 연도 계산법을 사용한다. E S M 으로 나눠지며 각 년도의 시작은 1이다. E는 1~15, S는 1~28, M은 1~19를 반복하며 1년이 지나면 각년도가 1씩 올라간다. 준규가 사는 나라의 년도가 주어졌을 때, 우리의 년도로 몇 년인지 출력하여라. 처음 생각카잉 달력 문제 같은 경우랑 같은 풀이법을 적용하면된다. 다만 카잉 달력 같은 경우는 범위가 무척 크기 때문에 정직하게 풀 수 없었지만 이번 날짜 계산 문제는 제한 숫자가 적으므로 정직하게 풀어주었다.▶ te,ts,tm 변수를 초기값 1로 선언해주고, e,s,m과 같아질 ..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q4673.java 양의 정수 n에대해서 n과 n의 각 자리수를 더하여 새로운 수를 만들 수 있다. 예를들어 33 이면 33+3+3=39, 39+3+9=51.... 이런 식으로 쭉 만들 수 있다. 이런식으로 만들 수 없는 수를 셀프 넘버라고 한다. 10000 이하의 셀프 넘버를 출력하여라. 처음 생각입력이 주어지지 않고 10000 이하의 셀프 넘버를 구해서 출력 하기만 하면 된다. 셀프 넘버란 위의 조건으로 만들어 지지 않는 수이므로 조건으로 만들어지는 수들을 구해서 그 수들을 제외한 수를 답으로 선택하면된다.▶ 1~10000까지의 숫자중 답을 내어야하므로 arr[1000..
생각Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q9095.java n이 주어질 때, 1과 2와 3을 이용해서 n을 만들 수 있는 경우의 수를 출력하여라. 더하는 순서에 따라 다른 가지수로 인정한다. 예를들어 1+2와 2+1은 다른 가지수이다. n의 최대값은 11까지 주어진다. 처음 생각이전에는 재귀를 통한 DFS 완전 탐색을 통해 문제를 풀었었다. [백준] 9095번 1, 2, 3 더하기 이번에는 풀고보니 DP로 푼걸로 봐서 이전 보다는 풀이 접근이 좋아진것 같다는 생각이 든다.▶ 이전에 풀었던 완전탐색의 경우는 N의 크기가 커질경우 스택 초과 에러나 시간 초과를 받을 수도 있지만 DP는 O(N)으로 접근이 가능하기 ..
- Total
- Today
- Yesterday