점의 사분면을 알아내는 문제는 x좌표가 양수인지 음수인지, y좌표가 양수인지 음수인지만 구분하면 되기에 쉽게 풀었다.
public int solution(int[] dot) {
int answer;
if (dot[0] > 0) {
if (dot[1] > 0) {
answer = 1;
} else {
answer = 4;
}
} else {
if (dot[1] > 0) {
answer = 2;
} else {
answer = 3;
}
}
return answer;
}
다음 문제인 정수열에서 임의의 두 수를 뽑아 만들 수 있는 최댓값을 구하는 문제인데, 가장 큰 두 수와 가장 작은 두 수를 뽑아 각자 곱했을 때 더 큰 것이 최댓값이기에 이를 적용하려 했으나 두번째로 큰 수와 두번째로 작은 수를 구하는 과정에서 막히고, 어차피 number의 각 변수는 0 이상이므로 작은수의 곱을 구할 필요는 없었다. 각 숫자를 일일히 곱해봐서 가장 큰 값을 반환하도록 풀이를 바꿨다.
public int solution(int[] numbers) {
int answer = 0;
for (int i = 0; i < numbers.length; i++) {
for (int j = i+1; j < numbers.length; j++) {
int max = numbers[i] * numbers[j];
if (max > answer) {
answer = max;
}
}
}
return answer;
}
그래도 아쉬움이 남아 number에 음수가 들어간다고 가정하에 코드를 다시 만들어봤다.
public int solution2(int[] numbers) { // 멤버에 음수도 들어간다면
int max = numbers[0];
int maxPrev = 0;
for(int i = 1; i< numbers.length; i++){
if (max < numbers[i]) {
maxPrev = max;
max = numbers[i];
} else if (maxPrev < numbers[i]) {
maxPrev = numbers[i];
}
}
int maxMulti = max * maxPrev;
int min = numbers[0];
int minPrev = 0;
for (int i = 1; i < numbers.length; i++) {
if (min > numbers[i]) {
minPrev = min;
min = numbers[i];
} else if (maxPrev > numbers[i]) {
maxPrev = numbers[i];
}
}
int minMulti = min * minPrev;
System.out.println(maxMulti);
System.out.println(minMulti);
if (maxMulti > minMulti) {
return maxMulti;
} else return minMulti;
}
음수가 들어가지 않는다면 maxMulti만 반환하면 된다.
각자 도전을 위해 풀어보기로 했던 문자열 안에 있는 숫자만 오름차순으로 배열하기는 문자열을 char[]형태로 바꿔 각 변수를 정수로 형변환하고 나서 9 이하면 ArrayList에 넣은 뒤 이 ArrayList를 int[]로 바꿔서 Array.sort로 정렬해 해결했다.
public int[] solution(String my_string) {
ArrayList<Integer> numbers = new ArrayList<>();
char[] stringArr = my_string.toCharArray();
for (int i = 0; i < stringArr.length; i++) {
int value = Character.getNumericValue(stringArr[i]);
if (value <= 9) {
numbers.add(value);
}
}
int[] answer = new int[numbers.size()];
for (int i = 0; i < numbers.size(); i++) {
answer[i] = numbers.get(i);
}
Arrays.sort(answer);
return answer;
}