1. 배열의 최대값 최소값 찾기
// 배열의 최대값 최소값 찾기
int[]arr = {1,2,3,4,5};
int max = arr[0];
int min = arr[0];
for(int i = 0; i < arr.length; i++){
//최대값
if(max < arr[i]){
max = arr[i];
}
//최소값
if(min > arr[i]){
min = arr[i];
}
}
return max+min;
2. 중복값 찾기
#학습 필요
- Set<type> list = new HashSet<>(); // 클래스명 HashSet임
- HashSet은 Set내부에 이미 값이 있으면, 값을 중복으로 저장하지 않음 (vs List클래스와 다름)
* Set에는 HashSet, LinkedHashSet, TreeSet이 있으며,
- HashSet : 중복 허용 x, 순서가 중요하지 않을 때 사용
- LinkedHashSet : 중복 허용 x, 순서가 중요할 때 사용
- TreeSet : 중복 허용 x, 오름차순으로 정렬할 때 사용
1) 내가 쓴 답 (비효율적)
import java.util.HashSet;
import java.util.Set;
int[] arr = { 1, 2, 3, 3, 4, 4, 5 };
Set<Integer> setList = new HashSet<>();
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length; j++){
if(i != j && arr[i] == arr[j]){
setList.add(arr[i]);
}
}
}
return setList;
2) 다른 사람의 풀이
import java.util.HashSet;
import java.util.Set;
int[] arr = { 1, 2, 3, 3, 4, 4, 5 };
Set<Integer> setList = new HashSet<>();
for(int i = 0; i < arr.length; i++){
for(int j =i+1; j < arr.length; j++){ // arr.length는 7
if(arr[i] == arr[j]){
setList.add(arr[i]);
}
}
}
return setList;
3. 배열 뒤집기
1) 내가 쓴 답(오답)
# 배열의 절반 부분까지만 반복하면 됨 --> arr.length / 2까지만
# 배열 내부의 값 설정 부분 신경쓰기 --> arr[arr.length]로 설정하면 배열의 범위를 초과함
// 풀이 : arr배열의 i번째 값을 arr.length에 넣고, arr의 i+1의 값을 arr.length-1에 넣으면 될듯
int[] arr = {1, 2, 3, 4, 5};
for(int i = 0; i < arr.length; i++){
int temp = arr[i]; // arr[i] 예, arr[0]인 1을 temp에 넣어두기
arr[i] = arr[arr.length-i-1]; // i = 0 일 때, arr[0]의 위치에 arr[4]을 넣고,
// i = 1 일 때, arr[1]의 위치에 arr[3]을 넣음
arr[arr.length-1-i] = temp;
}
return arr;
2) 다른 사람의 풀이
# 비효율적인 부분 제외 --> i < arr.length / 2 까지 실행
int[] arr = {1, 2, 3, 4, 5};
for(int i = 0; i < arr.length / 2; i++){
int temp = arr[i]; // arr[i] 예, arr[0]인 1을 temp에 넣어두기
arr[i] = arr[arr.length-1-i]; // i = 0 일 때, arr[0]의 위치에 arr[4]을 넣고,
// i = 1 일 때, arr[1]의 위치에 arr[3]을 넣음
arr[arr.length-1-i] = temp;
}
return arr;
# while문 사용
int[] arr = {1, 2, 3, 4, 5};
int left = 0;
int right = arr.length;
while(left < right){
int temp = arr[left];
arr[left] = arr[right-1]; // arr[0]에다가 arr[4]의 값 넣기
arr[right-1] = temp;
left++;
right--;
}
return arr;
4. 문자열 뒤집기
1) 내가 쓴 답(오답)
# new StringBuffer()객체 생성 시, new StringBuffer(str); 내부에 변수를 넣어줘야 적용됨.
# sb.reverse()이렇게 반환하면, 여전히 str값이 StringBuffer객체 내부에 뒤집어진 상태로만 남아있어서, toString() 사용해야함
// 문자열 뒤집기
// 해결 : 문자열 변경 도와주는 StringBuffer 사용하기
import java.util.StringBuffer;
String str = "hello";
StringBuffer sb = new StringBuffer();
sb.reverse(str);
return sb;
2) 다른 사람이 쓴 풀이(정답)
import java.util.StringBuffer;
String str = "hello";
StringBuffer sb = new StringBuffer(str);
sb.reverse();
return sb.toString();
5. 중복된 문자열 제거
# 모르거나 헷갈리는 부분
- HashSet이 String타입에도 적용되는지? --> 적용 가능
- new HashSet<>();의 경우 초기 크기를 설정 안해도 되는지? --> 안해도 됨, [ ] 배열과 다른 형태임
- HashSet객체에 값을 저장할 때, arr값이 여러개라면, add(arr)를 통하여 값을 바로 저장할 수 없음
--> arr의 값들을 하나씩 찾아서 저장해야함
- .(new String[0])은 크기가 0인 String 배열을 넘기면 내부적으로 스트림 크기에 맞게 새로운 배열을 생성함
- (String[]::new) --> toArray()가 적절한 크기의 배열을 생성하도록 돕는 역할을 함
→ 즉, (size) -> new String[size]을 간결하게 표현한 것
- (String[]::new) 여기서 ::은 메서드 참조를 의미
1) 내가 쓴 답(오답)
// 중복된 문자열 제거
// 해결 : HashSet을 통하여, 새로운 배열에 다시 저장해보기 (HashSet이 String에도 적용되는지?)
import java.util.HashSet;
import java.util.Set;
String[] arr = { "p", "e", "o", "p", "l" ,"e" };
Set<String> strArr = new HashSet<>(); // 크기 설정 안해줘도 되는건지?
// !! add는 하나의 값만 저장하는 용도이므로, 하나씩 꺼내서 저장해야 함
return strArr.add(arr);
2) 다른 사람의 풀이(정답)
# 특이점
• HashSet을 사용하면 순서가 실행할 때마다 바뀔 수 있음
• Arrays.stream(arr).distinct()를 사용하면 순서가 유지됨
// 중복된 문자열 제거
// 해결 : HashSet을 통하여, 새로운 배열에 다시 저장해보기 (HashSet이 String에도 적용되는지?)
import java.util.HashSet;
import java.util.Set;
String[] arr = { "p", "e", "o", "p", "l" ,"e" };
Set<String> strArr = new HashSet<>(); // 크기 설정 안해줘도 되는건지?
// !! add는 하나의 값만 저장하는 용도이므로, 하나씩 꺼내서 저장해야 함
for(String a : arr){
strArr.add(a);
}
return strArr;
import java.util.Arrays;
String[] arr = { "p", "e", "o", "p", "l" ,"e" };
arr= Arrays.stream(arr).distinct().toArray(String[]::new);
System.out.println(Arrays.toString(arr));
}
'Coding Test' 카테고리의 다른 글
SQL) WHERE 1 = 1 사용 이유? (0) | 2025.02.13 |
---|---|
(SQL > JOIN) : 8일차 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 ★★★ (1) | 2025.02.13 |
(CodingTest) : 7일차 개미 군단 (5-5) ★ (0) | 2025.02.11 |
(CodingTest) : 7일차 순서쌍의 개수 (5-4) ★ (0) | 2025.02.11 |
(CodingTest) : 7일차 진료순서 정하기 (5-3) ★★ (0) | 2025.02.11 |