2025-04-04 java

성현규·2025년 4월 4일
post-thumbnail

📌 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;
}

profile
학생

0개의 댓글