민스씨의 일취일장

구름톤 챌린지 | 1주차 학습일기 2 [4일차 / 5일차] 본문

Personal Development

구름톤 챌린지 | 1주차 학습일기 2 [4일차 / 5일차]

읻민스 2023. 8. 19. 17:55
반응형

구름톤 챌린지 1주차 학습일기이다.

구름톤 챌린지 학습일기 2

구름톤 챌린지 첫째주 썸네일 이미지이다.
구름톤 챌린지 첫째주

이전글

 

구름톤 챌린지 | 20일간의 코딩테스트 챌린지 시작 (Feat. 3일차)

구름톤 챌린지(9oormthon CHALLENGE)에 대한 소개와 챌린지 과정을 기록하는 글입니다. 구름톤 챌린지 구름톤 챌린지라고 들어보셨나요? 구름톤 챌린지는 4주 동안 월요일부터 금요일까지 매일 한 문

ydmins.com

 

구름톤 챌린지 | 1주차 학습일기 [1일차 / 2일차 / 3일차]

구름톤 챌린지 1주차 학습일기이다. 구름톤 챌린지 1주차 학습일기 구름톤 챌린지란? 구름톤 챌린지 | 20일간의 코딩테스트 챌린지 시작 (Feat. 3일차) 구름톤 챌린지(9oormthon CHALLENGE)에 대한 소개와

ydmins.com

Day 4 완벽한 햄버거 만들기

문제분석

완벽한 햄버거란 가장 높은 맛의 강도의 재료를 기준으로 위와아래 방향으로 강도가 낮아지도록 재료를 위치시킨 햄버거를 말한다.

풀이 전략

1. 재료의 강도를 맨 밑에서부터 평가하면서 순차적으로 같거나 증가하는지 판단한다.

2. 증가하다가 감소를 시작한 다음엔 순차적으로 같거나 감소하는지 판단한다.

3. 감소가 시작된 다음 다시 증가하는 강도가 나오면 완벽하지 않기 때문에 판별을 종료시킨다.

static void execute() throws IOException{
    int ingredient;
    st = new StringTokenizer(br.readLine());
    for(int i=0; i<N; i++){
        ingredient = Integer.parseInt(st.nextToken());
        // check increasing
        if(ingredient >= max && isIncreasing){
            max = ingredient;
            sum += ingredient;
        }
        // check decreasing
        if(ingredient <= min && !isIncreasing){
            min = ingredient;
            sum += ingredient;
        }
        // switch from increasing to decreasing
        if(ingredient < max && isIncreasing){
            sum += ingredient;
            min = ingredient;
            isIncreasing = false;
        }
        // switch from decreasing to increasing
        if(ingredient > min && !isIncreasing){
            System.out.println(0);
            return;
        }
    }
    System.out.println(sum);
}

결과

구르미 바지와 노트북을 구할 수 있었다.

4일차 미션 완료한 모습이다.4일차 구르미 모습이다. 바지와 노트북을 획득었다.
4일차 미션 완료
4일차 블록 모습이다.
4일차 블록

미션 블록도 4개나 모았다.

Day 5 이진수 정렬

문제 분석

입력받은 N개의 수들을 이진수로 변환했을 때 1의 개수가 많은 순으로 나열하고, 1의 개수가 같을 경우는 10진수 크기 순으로 나열했을 때 K번째의 수를 출력한다.

풀이 전략

1. 정렬하지 않을 것이다.

2. 각 수가 이진수로 표현할 때 몇개의 1의 갖는지 센다.

static int findNumberOne(int i){
    int num = 0;
    while(i!=0){
        if(i%2==1){
            num++;
        }
        i /= 2;
    }
    return num;
}

3. 1의 개수를 인덱스로 갖는 배열(int[] arrInOne)에 갯수를 늘려준다.

4. 1의 개수를 인덱스로 갖는 배열 arrInOne의 값을 마지막 인덱스부터 K보다 커질 때까지 더해준다.

5. 4번에서 K보다 커지기 직전 값을 제공한 인덱스 값과 같은 수의 1의 수를 갖는 수들을 추출한다.

6. 그 수들을 정렬한 뒤 4번에서 더한값과 K값 차이 번째 위치의 수를 출력한다.

static void execute(){
    int sum = 0;
    int i = 20;
    while(K>sum && i>=0){
        sum += oneNum[i];
        i--;
    }
    i++;
    int[] candidate = new int[oneNum[i]];
    int k=0;
    for(int j=0; j<N; j++){
        if(arrInOne[j] == i){
                candidate[k] = arr[j];
                k++;
        }
    }
    Arrays.sort(candidate);
    System.out.println(candidate[sum-K]);
}

결과

이번 테스트는 정말 많은 에러가 나왔다.

테스트 결과 모습이다. 4개의 실패가 있다.테스트 결과 모습이다. 3개의 실패가 있다.
테스트 결과 [출처 : level.goorm.io]
테스트 결과모습이다. 2개의 실패가 있다.테스트 결과 모습이다. 모두 성공했다.
테스트 결과 [출처 : level.goorm.io]

에러 발생한 이유

1. N개의 수 중 같은 수가 입력될 수 있는 것을 간과해다.

2. 입력받는 수들의 구간이 아래 사진에서 2의 20승인 것을 확인할 수 있다. 1의 개수는 2의 승수에 의존적인데 이 수를 임의로 계산하고 19로 넣어서 계속 오류가 발생했다.

Day 5 문제 입력값 모습이다.
Day 5 문제 입력값 [출처 : level.goorm.io]

교훈 : 입력값의 구간을 꼼꼼히 확인하자!

많은 시행 착오가 있었지만 구르미에게 깃발을 선물해 주었고 블록도 1주차 5개를 모두 모을 수 있었다.

5일차 미션 블록 5개를 모두 모은 모습이다.깃발을 들고 있는 구르미 모습이다.
5일차 미션 완료

자랑하고 싶은 1주차 구르미 진화

구르미 꾸미면서 아래 모습 꼭 만들어 주고 싶었다. 4주차까지 다른 구르미들 진화도 만들 수 있도록!! 

구르미 진화

다음글

 

구름톤 챌린지 2주차 학습일기 [6일차 / 7일차 / 8일차]

구름톤 챌린지 2주차 학습일기이다. 구름톤 챌린지 학습일기 이전글 구름톤 챌린지 | 20일간의 코딩테스트 챌린지 시작 (Feat. 3일차) 구름톤 챌린지(9oormthon CHALLENGE)에 대한 소개와 챌린지 과정을

ydmins.com

 

728x90
반응형