일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 최소공배수
- 최대공약수와 최소공배수
- addDoc
- string
- sql 데이터형 변환
- stringbuilder의 reverse()
- toLowerCase()
- 스프링뼈대
- 자바 최소공배수
- 유클리드호제법
- 자바 유클리드
- while과 two-pointer
- 프로그래머스 레벨1
- 동일성과 동등성
- 베주계수
- StringBuilder
- 스프링
- isuppercase()
- 자바 스트링
- islowercase()
- string과 stringbuilder
- ineer join
- 자바 최대공약수
- git 컨벤션
- replaceAll()
- Git사용법
- 최대공약수
- 모던자바
- 래퍼타입
- 스프링환경설정
- Today
- Total
주노 님의 블로그
20240805 본캠프 16일차 TIL 본문
본캠프 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 : 질문 및 회의
오늘 해야할 일✔️ 🔺 ❌
✔️팀과제 코드 개선
주말 코드카타 문제
...
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번으로 들어온 메서드는 출력메서드를 출력하지않는다
다행히 메서드를 재사용 할 수 있었다
팀과제 회의내용
상태별 수강생 조회 메서드 합침
오늘의 회고 & 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 |