함수(메서드)
배열 비교하기
🗒️ 이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.
- 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
- 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.
두 정수 배열 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 |