일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 레디스
- error
- FLAB
- 로드밸런서
- 데이터구조
- redis
- 트러블슈팅
- 성능테스트
- java
- 부트캠프
- 자바백엔드
- 후기
- 자바
- 백엔드
- Spring
- 에프랩
- 코딩테스트
- 도커
- F-Lab
- AWS
- 플러터
- nGrinder
- backend
- 멘토링
- EC2
- grafana
- Flutter
- MySQL
- 알고리즘
- github
- Today
- Total
민스씨의 일취일장
구름톤 챌린지 | 1주차 학습일기 2 [4일차 / 5일차] 본문
구름톤 챌린지 1주차 학습일기이다.
구름톤 챌린지 학습일기 2
이전글
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개나 모았다.
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]);
}
결과
이번 테스트는 정말 많은 에러가 나왔다.
에러 발생한 이유
1. N개의 수 중 같은 수가 입력될 수 있는 것을 간과해다.
2. 입력받는 수들의 구간이 아래 사진에서 2의 20승인 것을 확인할 수 있다. 1의 개수는 2의 승수에 의존적인데 이 수를 임의로 계산하고 19로 넣어서 계속 오류가 발생했다.
교훈 : 입력값의 구간을 꼼꼼히 확인하자!
많은 시행 착오가 있었지만 구르미에게 깃발을 선물해 주었고 블록도 1주차 5개를 모두 모을 수 있었다.
자랑하고 싶은 1주차 구르미 진화
구르미 꾸미면서 아래 모습 꼭 만들어 주고 싶었다. 4주차까지 다른 구르미들 진화도 만들 수 있도록!!
다음글
'Personal Development' 카테고리의 다른 글
구름톤 챌린지 | 2주차 학습일기 [9일차 / 10일차] (0) | 2023.08.24 |
---|---|
구름톤 챌린지 | 2주차 학습일기 [6일차 / 7일차 / 8일차] (0) | 2023.08.21 |
구름톤 챌린지 | 1주차 학습일기 [1일차 / 2일차 / 3일차] (0) | 2023.08.19 |
구름톤 챌린지 | 20일간의 코딩테스트 챌린지 시작 (Feat. 3일차) (0) | 2023.08.16 |
YdMinS' 일취월장 | 구름톤 풀스택 부트캠프 5주차 & 6주차 (0) | 2023.08.01 |