프로그래머스 코딩 기초 트레이닝 🔥 함수(메서드)

2025년 05월·자바

함수(메서드)

배열 비교하기

🗒️ 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int len1 = arr1.length, len2 = arr2.length;
        int sum1 = Arrays.stream(arr1).sum(), sum2 = Arrays.stream(arr2).sum();
        
        if (len1 == len2) {
            if (sum1 < sum2) return -1;
            else if (sum1 > sum2) return 1;
            else return 0;
        } else {
            return (len1 < len2) ? -1 : 1;
        }
    }
}

// 다른 풀이
class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = Integer.compare(arr1.length, arr2.length);

        if (answer == 0) {
            answer = Integer.compare(Arrays.stream(arr1).sum(), Arrays.stream(arr2).sum());
        }

        return answer;
    }
}

Integer.compare(a, b)

두 정수를 비교해서 결과를 정수(-1, 0, 1)로 알려주는 정수 전용 비교 메서드

  • a < b이면 -1 반환
  • a == b이면 0 반환
  • a > b이면 1 반환

 

문자열로 변환

🗒️ 정수 n이 주어질 때, n을 문자열로 변환하여 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public String solution(int n) {
        return String.valueOf(n);
    }
}

// 다른 풀이
class Solution {
    public String solution(int n) {
        return Integer.toString(n);
    }
}

// 또다른 풀이
class Solution {
    public String solution(int n) {
        return "" + n;
    }
}

📌 정수를 문자열로 변환

  • String.valueOf(n)
  • Integer.toString(n)
  • "" + n

📌 문자열을 정수로 변환

  • Integer.parseInt(s)
  • Integer.valueOf(s)

 

두 수의 합

🗒️ 0 이상의 두 정수가 문자열 a, b로 주어질 때, a + b의 값을 문자열로 return 하는 solution 함수를 작성해주세요.

import java.math.BigInteger;

class Solution {
    public String solution(String a, String b) {
        BigInteger numA = new BigInteger(a);
        BigInteger numB = new BigInteger(b);

        return numA.add(numB).toString();
    }
}

BigInteger ...? 이것 뭐예요 🤷🏼‍♂️

 

문자열 정수의 합

🗒️ 한 자리 정수로 이루어진 문자열 num_str이 주어질 때, 각 자리수의 합을 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(String num_str) {
        int answer = 0;
        String[] arr = num_str.split("");
        
        for (String n : arr) {
            answer += Integer.parseInt(n);
        }
        
        return answer;
    }
}

// 다른 풀이
class Solution {
    public int solution(String num_str) {
        return num_str.chars().map(c -> c - '0').sum();
    }
}

 

배열의 길이를 2의 거듭제곱으로 만들기

🗒️ 정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public int[] solution(int[] arr) {
        int newLength = 1;
        
        while (newLength < arr.length) {
            newLength *= 2;
        }
        
        return Arrays.copyOf(arr, newLength);
    }
}

Arrays.copyOf() 이거랑 Arrays.copyOfRange() 이거랑 다르니까 잘 구분해서 쓰자

⬆️ 얘는 복사 대상보다 크면 자동으로 남는 부분을 0으로 채움 ↖️ 얘는 단순 복사

🤓☝️ 그리고 2의 거듭제곱 찾는 로직 기억해두기

 

문자열 묶기

🗒️ 문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해주세요.

class Solution {
    public int solution(String[] strArr) {
        int[] strLen = new int[30];
        
        for (String str : strArr) {
            strLen[str.length() - 1]++;
        }
        
        return Arrays.stream(strLen).max().orElse(0);
    }
}

Arrays.stream().max().orElse(0)

배열에서 최댓값 찾기

 

전국 대회 선발 고사

🗒️ 0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다. 각 학생들의 선발 고사 등수를 담은 정수 배열 rank와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해주세요.

class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        // 학생 수만큼 인덱스 배열 생성
        List<Integer> candidates = new ArrayList<>();

        // 참여 가능한 학생의 인덱스만 수집
        for (int i = 0; i < rank.length; i++) {
            if (attendance[i]) candidates.add(i);
        }

        // 참여 가능한 학생들을 등수 기준으로 정렬
        candidates.sort(Comparator.comparingInt(i -> rank[i]));

        // 상위 3명의 인덱스를 가져와 수식에 적용
        int a = candidates.get(0);
        int b = candidates.get(1);
        int c = candidates.get(2);

        return 10000 * a + 100 * b + c;
    }
}

1️⃣ candidates는 참여 가능한 학생의 번호(인덱스)만 담긴 리스트

2️⃣ rank[i]는 i번 학생의 등수

👉 candidates를 rank 값 기준으로 오름차순 정렬

'자바' 카테고리의 다른 글

정렬  (0) 2025.05.06
김영한의 자바 입문에서 배운 내용 정리  (0) 2025.05.02
프로그래머스 코딩 기초 트레이닝 🔥 리스트(배열)  (1) 2025.05.02
지삐띠니야 메서드 알려줘  (0) 2025.05.02
프로그래머스 코딩 기초 트레이닝 🔥 조건문 / 반복문  (0) 2025.05.01
'자바' 카테고리의 다른 글
  • 정렬
  • 김영한의 자바 입문에서 배운 내용 정리
  • 프로그래머스 코딩 기초 트레이닝 🔥 리스트(배열)
  • 지삐띠니야 메서드 알려줘
토토이
토토이
토토이 님의 블로그 입니다.
  • 토토이
    토토이 님의 블로그
    토토이
    • 분류 전체보기 (18)
      • KT 에이블스쿨 (5)
      • 복습 (1)
      • 자바 (11)
      • 뻐꿈 (0)
  • 태그

    AICE
    java
    스택
    에이블스쿨
    인프런
    자격증
    자바
    취준
    코딩테스트
    코테
    프로그래머스
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
  • hELLO· Designed By정상우.v4.10.3
토토이
프로그래머스 코딩 기초 트레이닝 🔥 함수(메서드)
상단으로

티스토리툴바