📌 1. 자바 코딩테스트
📌 1-1. 최댓값 만들기
🔍 핵심 개념 및 주의할 점
- 배열 정렬은
Arrays.sort()를 사용한다.
- 가장 큰 두 수의 곱이 최댓값이다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 입력 배열을 정렬한다.
- 가장 마지막 두 원소를 곱하여 반환한다.
💻 코드 (Java)
public int solution(int[] numbers) {
Arrays.sort(numbers);
return numbers[numbers.length - 1] * numbers[numbers.length - 2];
}
📌 1-2. 모음 제거
🔍 핵심 개념 및 주의할 점
replaceAll()로 패턴 매칭하여 모음을 제거할 수 있다.
- 반복문과
contains()로도 구현 가능하다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 문자열 순회 → 모음 포함 여부 검사 → 새로운 문자열에 추가
- 혹은 정규식을 이용해 모음 패턴을 한 번에 제거
💻 코드 (Java) - 반복문 풀이
public String solution(String my_string) {
String answer = "";
for (char i : my_string.toCharArray()) {
if (!"aeiou".contains(String.valueOf(i))) {
answer += String.valueOf(i);
}
}
return answer;
}
💻 코드 (Java) - 정규식 풀이
public String solution(String my_string) {
return my_string.replaceAll("[aeiou]", "");
}
📌 1-3. 배열 원소의 길이
🔍 핵심 개념 및 주의할 점
mapToInt 내부에서 바로 길이를 가져오면 더욱 간결하다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 문자열 배열 → 스트림 변환 → 원소 길이 매핑 → 배열 반환
💻 코드 (Java) - 분리형
public int[] solution(String[] strlist) {
return Arrays.stream(strlist)
.map(s -> s.length())
.mapToInt(Integer::intValue)
.toArray();
}
💻 코드 (Java) - 간결형
public int[] solution(String[] strList) {
return Arrays.stream(strList)
.mapToInt(String::length)
.toArray();
}
📌 1-4. 삼각형의 완성조건
🔍 핵심 개념 및 주의할 점
Arrays.sort()는 void 반환이다.
- 가장 큰 변의 길이가 나머지 두 변의 합보다 작아야 삼각형이 성립한다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 배열 정렬 → 가장 큰 값과 나머지 두 변의 합 비교 → 조건에 따른 값 반환
💻 정답 코드 (Java)
public int solution(int[] sides) {
Arrays.sort(sides);
return sides[2] < sides[1] + sides[0] ? 1 : 2;
}
📌 1-5. 배열의 유사도
🔍 핵심 개념 및 주의할 점
- 중첩 반복문을 사용하여 배열 간 동일 원소 개수를 센다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 배열 1 순회 → 배열 2 순회 → 값이 같으면 카운트 증가
💻 코드 (Java)
public int solution(String[] s1, String[] s2) {
int answer = 0;
for (String i : s1) {
for (String j : s2) {
if (i.equals(j)) {
answer += 1;
}
}
}
return answer;
}
📌 1-6. n의 배수 고르기
🔍 핵심 개념 및 주의할 점
filter를 사용하여 조건에 맞는 요소만 필터링한다.
🧠 기억해야 할 패턴 또는 로직 흐름
💻 코드 (Java)
public int[] solution(int n, int[] numlist) {
return Arrays.stream(numlist)
.filter(s -> s % n == 0)
.toArray();
}
📌 1-7. 자릿수 더하기
🔍 핵심 개념 및 주의할 점
chars()는 IntStream이다.
- 유니코드 값으로 반환되므로
'0'을 빼서 정수값으로 변환한다.
- 단위수가 크면 병렬처리가 효율적일 수 있다. 다만 정통 for문이 가장 효율적이다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 정수 → 문자열 변환 → 문자 stream 생성 → 정수 변환 및 합계
💻 코드 (Java) - 기본형
public int solution(int n) {
return String.valueOf(n)
.chars()
.map(i -> i - '0')
.sum();
}
💻 코드 (Java) - 병렬 스트림
public int solution(int n) {
return String.valueOf(n)
.chars()
.parallel()
.map(i -> i - '0')
.sum();
}
📌 1-8. 배열의 평균값
🔍 핵심 개념 및 주의할 점
average()는 OptionalDouble을 반환하므로 orElse로 기본값을 처리한다.
🧠 기억해야 할 패턴 또는 로직 흐름
💻 정답 코드 (Java)
public double solution(int[] numbers) {
return Arrays.stream(numbers)
.average()
.orElse(0.0);
}
📌 1-9. 아이스 아메리카노
🔍 핵심 개념 및 주의할 점
- 몫과 나머지를 동시에 구하여 배열로 반환한다.
🧠 기억해야 할 패턴 또는 로직 흐름
- 총 금액 → 몫과 나머지 계산 → 배열로 반환
💻 코드 (Java)
public int[] solution(int money) {
return new int[] { money / 5500, money % 5500 };
}
📌 1-10. 배열 뒤집기
🔍 핵심 개념 및 주의할 점
🧠 기억해야 할 패턴 또는 로직 흐름
- 시작 포인터, 끝 포인터 설정 → 서로의 값을 교환 → 포인터 이동
💻 코드 (Java)
public int[] solution(int[] num_list) {
int start = 0;
int end = num_list.length - 1;
while (start < end) {
int tmp = num_list[start];
num_list[start++] = num_list[end];
num_list[end--] = tmp;
}
return num_list;
}