🧩 문제 4. 완벽한 햄버거 만들기
> 배운 점
: 정렬을 활용해 주어지는 값들이 올바르게 배치되어 있는지 확인하는 문제
// 리스트에서 최대값과 그 인덱스 찾는 방법
int maxIdx = list.indexOf(Collections.max(list));
// 좌측/우측 리스트 생성
ArrayList<Integer> left = new ArrayList<>(list.subList(0, maxIdx));
ArrayList<Integer> right = new ArrayList<>(list.subList(maxIdx, N));
> 느낀 점
문제 의도를 제대로 파악하지 않고 문제를 풀었다고 한다...
무작정 일단 최댓값을 찾는 걸 먼저하고,정렬은 하지 않고그걸 기준으로 왼쪽 배열이 오름차순인지, 오른쪽 배열은 내림차순으로 진행하지 확인하는 식으로 찾았었다..(브루트포스,,?)
근데 해설을 보니 정렬을 굉장히 자주 하심 (아무래도 정렬 문제니까...ㅎ)
> 풀이 방법
: 먼저 입력을 받으면서 햄버거 맛 총 합을 구했고, 최댓값과 최댓값이 있는 인덱스 값을 찾았다.
그리고 배열을 처음부터 끝까지 돌면서 최댓값이 있는 인덱스 기준으로 왼쪽은 오름차순인지, 오른쪽은 내림차순인지 확인
🧩 문제 5. 이진수 정렬
> 배운 점
: 배열 다중 조건에 맞춰 사용자 정의 정렬하는 방법
(현대 모비스 알고리즘 대회 변형 문제?!)
배열 정렬 기준
1. 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬
2. 1의 개수가 같다면, 원래 십진수를 기준으로 내림차순 정렬
Arrays.sort(A, new Comparator<Long>() {
@Override
public int compare(Long n1, Long n2) {
int bitCountComp = Integer.compare(Integer.bitCount(n2.intValue()), Integer.bitCount(n1.intValue()));
return bitCountComp != 0 ? bitCountComp : Long.compare(n2, n1);
}
});
> Integer.compare(A, B)
: A와 B가 같은 경우,
> Integer.bitCount()
: 해당 수를 이진수로 변환했을 때, 1의 개수
> .intValue()
: Long형인 n2를 int로 형 변환
+ 이외에도 클래스를 선언해 Comparable 인터페이스 구현을 통해 compareTo 메소드를 정의해
아래와 같이 다중 조건 정렬할 수 있다.
class Pair implements Comparable<Pair> {
int bits;
int num;
public Pair(int bits, int num) {
this.bits = bits;
this.num = num;
}
public int compareTo(Pair o) {
if (this.bits == o.bits) {
return o.num - this.num;
}
else {
return o.bits - this.bits;
}
}
}
> 느낀 점
: 다중 조건 정렬 문제는 풀 때마다 익숙하지 않은 것 같다.
보고나면 은근 어렵지 않은데 혼자서 생각하면 이 조건이 맞나?하는 의구심이 들곤 한다,,ㅎ
그래도 bitCount() 메소드를 알게 되었고, 앞으로 이진수 변환 후 필요할 때 잘 사용할 수 있을 것 같다.
> 헷갈렸던 점
- 다중 조건 정렬,, 이렇게 해도 되는 게 맞나 싶었다.
2주차 문제들도 기대가 된다ㅎㅎ
가보자고~~
(참고)
- 배열 정렬하는 방법
Java - 배열 정렬(Sorting) (오름차순, 내림차순)
Arrays.sort()을 이용하면 쉽게 배열(Array)을 내림차순, 오름차순으로 정렬(sorting)할 수 있습니다. Integer, String 등 구분없이 모든 객체를 정렬할 수 있습니다. 또한, 클래스에 Comparable을 구현하면 객체
codechacha.com
- 주어진 정수를 이진수로 변환 해 비트 수 빠르게 세기
[Java] 이진수의 비트 수(1) 빠르게 세는 방법 알아보기
2022-09-24 1. 방법 사실 직접 구현할 필요 없이 아래와 같은 Integer.bitCount(i) 라는 메소드를 사용하면 빠르고 쉽게 구할 수 있다. int num = 12345; int cntBit = Integer.bitCount(num); System.out.println(cntBit); //6 메인
seeminglyjs.tistory.com
Java BitCount 주어진 정수에서 true bit의 개수를 찾는 함수
leetcode 에서 문제를 풀다가 Integer.bitCount 라는 함수를 알게되었다. 이걸 진작에 알았더라면 여러 알고리즘 문제를 겁나 편하게 풀었을텐데 이진수에서 1의 개수를 세어주는 함수이다.
blog.yevgnenll.me
'챌린지 > 구름톤 챌린지' 카테고리의 다른 글
구름톤 챌린지 3주 차 학습 일기 (Day14 ~ 15) (0) | 2023.09.03 |
---|---|
구름톤 챌린지 3주 차 학습 일기 (Day11 ~ 13) (0) | 2023.08.30 |
구름톤 챌린지 2주 차 학습 일기 (Day9 ~ 10) (0) | 2023.08.27 |
구름톤 챌린지 2주 차 학습 일기 (Day6 ~ 8) (0) | 2023.08.23 |
구름톤 챌린지 1주 차 학습 일기 (Day1 ~ 3) (0) | 2023.08.16 |