주노 님의 블로그

20240805 본캠프 16일차 TIL 본문

TIL

20240805 본캠프 16일차 TIL

juno0432 2024. 8. 6. 08:11

본캠프 16일차 내용 간단요약

  • 09:00 ~ 10:00 : 코드카타
  • 10:00 ~ 12:00 : 개인 과제
    LV2 과제 개선
  • 12:00 ~ 13:00 : 점심시간
  • 13:00 ~ 13:30 : 회의
  • 13:30 ~ 14:30 : 아티클 정리
  • 14:30 ~ 16:00 : 스프링 복습
  • 16:00 ~ 18:00 : 회의
  • 18:00 ~ 19:00 : 저녁시간
  • 19:00 ~ 21:00 : 질문 및 회의

오늘 해야할 일✔️ 🔺 ❌

✔️팀과제 코드 개선


주말 코드카타 문제

더보기

거진 2일간 고민한 문제였다

...

 

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        ArrayList<Integer> list = new ArrayList<>();
        int index = 0;

        for (int i = 0; i < Math.min(k, score.length); i++) {
            list.add(score[i]);
        }
        
        Collections.sort(list);
        
        for (int i = 0; i < Math.min(k, score.length); i++) {
            answer[index++] = list.get(0);
        }
        
        for (int i = k; i < score.length; i++) {
            if (score[i] >= list.get(0)) {
                list.remove(0);
                list.add(score[i]);
                Collections.sort(list);
            }
            answer[index++] = list.get(0); 
        }
        
        return answer;
    }
}

 

분명 내 코드에서는 이론상 맞는것 같았다

초기 K값까지는 모두 들어가야하니 LIST를 정렬 후, 최하값을 K수 만큼 넣어주고

k값이 score의 length를 넘을 수 있으니 k와 score의 길이의 min값을 가져왔다

그리고 정렬을 하면 오름차순 정렬이 되니까 list의 0번째가 명예의 전당에 들어가는게 맞고

list.get보다 score이 크면 k번째값(최하위)이 빠지게되고

현재값은 추가된다

였는데.. 아무리 생각해도 모르겠다..

 

튜터님께 찾아가보니 테스트 케이스 추가가 있다고...

 

 

 

프로그래머스 저부분이 테스트케이스를 추가하는거였다

나는 저게 채점하기에 등록되는것인줄 ㅇㅇ...

 

 

그래서 질문하기 찾아보니까 나의 문제점을 알아버렸다

 

100이 첫번째에 들어왔으면 k번째 상관없이 100이 제일 처음에 들어가야 한다는것...

 

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        ArrayList<Integer> list = new ArrayList<>();
        int index = 0;

        for (int i = 0; i < Math.min(k, score.length); i++) {
            list.add(score[i]);
            Collections.sort(list);
            answer[index++] = list.get(0);
        }

        for (int i = k; i < score.length; i++) {
            if (score[i] > list.get(0) || (score[i] == list.get(0) && !list.contains(score[i]))) {
                list.remove(0);
                list.add(score[i]);
                Collections.sort(list);
            }
            answer[index++] = list.get(0); 
        }
        
        return answer;
    }
}

 

그래서 코드를 수정했다.. list add를 한다음 정렬하는것으로..

첫번째는 정렬해도 첫번째 혼자 있으므로 100이 들어가게 된것이다

 

내코드는 k까지 모두 추가한다음 정렬을했으니, 첫번째에 큰수가 들어오면 그걸 잡지 못한것이다

 

 

2016년 문제

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        int [] days = {31,29,31,30,31,30,31,31,30,31,30,31};
        int result = 0;
        for(int i=0; i<a-1; i++)
        {
            result += days[i];
        }
        result += b-1;
        result %= 7;
        switch (result) {
            case 0 : 
                answer = "FRI";
                break;
            case 1 :
                answer = "SAT";
                break;
            case 2 :
                answer = "SUN";
                break;
            case 3 :
                answer = "MON";
                break;
            case 4:
                answer = "TUE";
                break;
            case 5:
                answer = "WED";
                break;
            case 6 :
                answer = "THU";
                break;     
        }
        return answer;
    }
}

 

어디서 풀어본듯한 기억이 나는 나

풀이법은 이거다

days 배열을 쫙 놓고 해당하는 달의 전달까지 일수를 모두 더하고

해당하는 날 (b)만큼을 더하는 것이다

예를들면 5월 24일이면

4월까지 달을 더한다음 마지막으로 +24

다른 문제 풀이떄는 아마도 5월까지 더한다음 뺀거같은데

오히려 이 코드가 더 간단하고 좋다

 

그리고 7을 나눠 나오는값을 switch case문으로 나누어서 

 


 코드카타

 

더보기

문제링크

 

class Solution {
    public String solution(String[] cards1, String[] cards2, String[] goal) {
        String answer = "";
        boolean flag = true;
        int card1Index = 0;
        int card2Index = 0;
        int goalIndex =0;
        
        while (goalIndex < goal.length)
        {
            if(card1Index < cards1.length && cards1[card1Index].equals(goal[goalIndex]))
            {
                card1Index++;
                goalIndex++;
            }
            else{
                if(card2Index < cards2.length && cards2[card2Index].equals(goal[goalIndex]))
                {
                    card2Index++;
                    goalIndex++;
                }
                else
                {
                    return "No";
                }
            }
        }
        return "Yes";
    }
}

 

while을 사용해야했으며

순차적으로 진행할수 있게

첫번째 if문에서 card1inedx의 값이 goal index와 맞으면 추가,

맞지 않으면 card2index로 가서 비교한다

만약 그것도 맞지않으면 맞는 순서가 없으니 return NO를

모든 배열을 다 돌고나면 Yes를 뱉어준다

 

하다가 깜빡한게 있는데

card1Index < card1.length를  cards1[card1Index].equals(goal[goalIndex])보다 앞에 둬야한다

왜냐하면 card1인덱스가 초과한경우 cards1[cardIndex]를 넣는 순간 뻗는다는것

그래서 card1Index < card1.length를 꼭 앞에둬야한다


팀과제 개발

더보기

 

위 코드는 비슷한 기능을 하는 다른코드이다.

내가 짜면서 위 메서드와 합칠수 있다고 생각이 되었다

 

for (Student student : students.values()) {
    if(student.getStatus().name().equals(status)) {
        if(cmd == 8)
            System.out.println(" ID : " + student.getId() + " 이름 : " + student.getName());
        studentList.add(student);
        count++;
    }
}

 

getStudentByStatus(String status, int cmd)

 

하나로 합치고

매개변수를 cmd를 두어

 

else if (cmd == 8) {
    // 상태별 수강생 목록 조회
    System.out.print("조회할 상태를 입력하세요 : ");
    sc.nextLine();
    String state = sc.nextLine().toUpperCase();
    //상태별 수강생 목록 조회 메서드
    studentControl.getStudentByStatus(state, cmd);

 

키보드로 입력받은 cmd를 체크한다

그래서 상태별 수강생목록 조회는 print를 출력해주고

 

11번으로 들어온 메서드는 출력메서드를 출력하지않는다

다행히 메서드를 재사용 할 수 있었다


팀과제 회의내용

더보기
남은 진도
수강생 목록 조회
수강생 특정 과목 회차별 등급 조회
수강생 정보 조회
수강생 정보 수정
오늘이나 내일중에 끝낼 수 있을것 같은느낌!
 
 
시나리오 테스트
엣지 케이스 테스트
내일은 이 두개를 중점적으로 회의하면 될것같다!
 
코드개선
점수 수정 로직에서 등록되지 않은 점수 수정 예외처리가  구현이 어렵다고 하셨다
한번 알아보기!
 
github readme 수정

 

상태별 수강생 조회 메서드 합침

오늘의 회고 & 12시간 몰입했는가?

집중하려고 했지만! 3시간정도는 딱히 뭔갈한게없는거같다

+ 물어보고 알려주는시간까지

스프링 내일까지 끝내야하는데!!

 

'TIL' 카테고리의 다른 글

20240807 본캠프 18일차 TIL  (0) 2024.08.07
20240806 본캠프 17일차 TIL (추가추가추가해야함)  (0) 2024.08.07
20240802 본캠프 15일차 TIL  (0) 2024.08.03
20240801 본캠프 14일차 TIL  (0) 2024.08.01
20240731 본캠프 13일차 TIL  (0) 2024.07.31