재귀함수를 이용하여 풀려하니 머리가 깨지는 듯 했지만, 겨우겨우 풀 수 있었지만 테스트7부터 오류가 발생하기 시작했다. 이상한 음수가 결과로 나온걸보고 하나하나 n값을 바꿔보면서 했지만 왜 음수가 나오는지 찾기가 힘들었다. ..결국 문제를 잘 못 이해했다. 재귀함수를 호출 할때마다 피보나치 값에 %1234567연산을 해야한다...(처음엔 범위가 초과되서 int형을 모두 long형으로 바꾸기도 해봤다.) [내 풀이] 다른 사람들 코드를 참조한 후 진짜 간단한 코드를 발견했다.
처음엔 DP(동적 계획법)을 이용하여 푸는 것인 줄 알고 고생을 많이 했다. 결국 도저히 모르겠어서 구글을 통해 알게 되었는데 "최솟값을 구하기 위한 규칙은 각 배열에서 가장 작은 값과 가장 큰 값을 곱하는 것이다." 그러기 위해 A배열은 오름차순, B배열은 내림차순으로 설정하여야 한다. A는 Arrays.sort()로 쉽게 할 수 있었지만, B를 역순으로 하는데 어려움이 있었다. aslist로 list로 넣은 뒤에 Collections.reverseorder로 역순으로 표현하려고 했지만, List list = Arrays.aslist(B)에 빨간 줄이 생기며 불가능하다는 것을 알게 되었다. 다시 한번 블로그를 참고하니 Primitive 타입에는 적용되지 않고 Non-primitive 타입에만 허용되는 ..
1. 우선 s가 문자열 이므로 split을 이용하여 공백으로 분리하였다(문제에서 숫자 사이에 공백이 존재한다고 했다.) 2. 분리한 값들을 int형으로 변환하여 int형 배열에 넣어준다. 3. for문을 통한 최솟값과 최댓값을 구한 후, String.format을 이용하여 answer에 넣어준다. [내 코드] class Solution { public String solution(String s) { String answer = ""; String[] tmp = s.split(" "); int[] num = new int[tmp.length]; for (int i = 0; i
재귀 함수를 이용하면 쉽게 풀이가 될 거 같아서 재귀 함수를 이용하여 보았다. main에서 n만큼 for문을 돌린다. i의 범위는 1부터 n(1부터 n까지 차례대로 덧셈을 하면서 딱 n값이 나오면 true값을 리턴하는 recursive 함수를 만들었다.) recursive함수 내에서 n보다 작을 경우 계속 재귀함수를 호출하면서 값을 키워나간다. 그러다가 n과 같아지면 flag 값을 true로 반환하고 main에서 받은 flag 값이 true일 경우만 answer 값을 ++한다. [내 코드] class Solution { public int solution(int n) { int answer = 0; for (int i = 1; i