코트카타
25) 나누어 떨어지는 숫자 배열
나의 풀이
static class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer = {};
List<Integer> answerList = new ArrayList<>();
for (int i=0; i<arr.length;i++) {
if(arr[i] % divisor == 0){
answerList.add(arr[i]);
}
}
if (answerList.isEmpty()){
return new int[]{-1};
}
answer = new int[answerList.size()];
for (int i=0; i<answer.length;i++) {
answer[i] = answerList.get(i);
}
Arrays.sort(answer);
return answer;
}
}
리스트를 생성하고 리스트에 조건에 부합하는 값을 넣었다.(add)
그런 다음 리스트의 크기만큼 배열 크기를 만들어주었다.
처음에는 if (arr.length==0){ answer[0]=-1; }로 하려고 했으나
arr 배열이 비어 있는 경우는 이미 메서드 초기에 처리해야 하며,
answer[0] = -1과 같은 접근은 빈 배열에서 발생할 수 없는 오류가 되어
answerList가 비어 있는 경우를 체크하는 것으로 바꿨다.
Stream을 사용할까도 생각했지만
일단은 최대한 사용하지 않고 생각해보고 싶어서
오늘은 그 방법은 찾지 않기로 했다.
개인 과제 진행
Lv3 트러블슈팅
튜터님 피드백 final 활용
private final List<MenuItem> menuItems;
그런데 참조 대상의 객체 값은 변경할 수 있다.
참조형 변수 `data` 에 `final` 이 붙었다. 이 경우 참조형 변수에 들어있는 참조값을 다른 값으로 변경하지 못한
다. 쉽게 이야기해서 이제 다른 객체를 참조할 수 없다. 그런데 이것의 정확한 뜻을 잘 이해해야 한다. 참조형 변수
에 들어있는 참조값만 변경하지 못한다는 뜻이다. 이 변수 이외에 다른 곳에 영향을 주는 것이 아니다.
`Data.value` 는 `final` 이 아니다. 따라서 값을 변경할 수 있다
정리하면 참조형 변수에 `final` 이 붙으면 참조 대상을 자체를 다른 대상으로 변경하지 못하는 것이지, 참조하는 대상
의 값은 변경할 수 있다.
Lv4 트러블슈팅
각 클래스의 역할 구분
Menu 클래스에서 MenuItem 클래스를 관리해야 한다.
클래스가 4개가 되다보니 각 클래스의 역할이 정리가 되지 않아서 처음에 힘들었다.
Main클래스에서 생성한 Menu의 각 객체를 어떻게 Kiosk 클래스에 값을 넘겨줄지에 대해서 가장 큰 고민을 했다.
// Menu 객체 생성을 통해 이름 설정
Menu burgers = new Menu("Burgers");
Menu drinks = new Menu("Drinks");
Menu desserts = new Menu("Desserts");
List<Menu> menuList = List.of(burgers,drinks,desserts);
// Menu 클래스 내 있는 List<MenuItem> 에 MenuItem 객체 생성하면서 삽입
MenuItem shackBurger = new MenuItem("ShackBurger",6.9,"토마토, 양상추, 쉑소스가 토핑된 치즈버거");
MenuItem SmokeShack = new MenuItem("SmokeShack",8.9,"베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
MenuItem Cheeseburger = new MenuItem("Cheeseburger",6.9,"포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
MenuItem Hamburger = new MenuItem("Hamburger",5.4,"비프패티를 기반으로 야채가 들어간 기본버거");
burgers.setMenuItems(List.of(shackBurger,SmokeShack,Cheeseburger,Hamburger));
// Kiosk 객체 생성
Kiosk kiosk = new Kiosk(menuList);
// Kiosk 내 시작하는 함수 호출
kiosk.start();
각 Menu 클래스의 참조값을 menuList라는 리스트에 넣어준 후,
Kiosk 클래스 객체 생성 시, 생성자에 menuList를 매개변수로 넘겨주었다.
public class Kiosk {
private final List<Menu> menuList;
public Kiosk(List<Menu> menuList) {
this.menuList = menuList;
}
/* 중략 */
}
Kiosk 클래스에서도 리스트를 생성하여
위에서 매개변수로 받은 menuList를 생성자를 통해 넣어주었다.
Lv5 트러블슈팅
사실 이전부터 캡슐화에 대해 신경쓰면서 구현했기 때문에
Lv4와 차이점이 없다.
계산기 과제 피드백 내용
아쉬운 점 부분이 공란이어서 튜터님께 문의드렸더니
아쉬운 점이 없어서 공란으로 남겨둔 것이라고 답변을 주셨다.😊
전체적으로 균형있게 잘 했고,
지금은 클래스와 메소드 필드 관련 개념을 잡아가는 주차여서
이해도, 개념 숙지 등을 위주로 피드백을 주셨다고 하셨다.
앞으로는 피드백이 더 디테일 해질 예정이라고도 하셨다.
첫 과제였는데 그래도 나름 잘 수행한 것 같아 기쁘다.
도전 과제도 완벽하지는 않지만 다 구현은 해서 그런지 좋은 점수를 주셨다.
스파르타 시작이 쉽지 않았지만
잘 적응하고 잘하고 있다는 메시지를 받은 것 같아 행복하다.
'CODING > 스파르타 내일배움캠프 TIL' 카테고리의 다른 글
25_핸드폰 번호 가리기_도전과제 레벨 6-1 구현_자바 강의 String_25.1.16(목) (1) | 2025.01.16 |
---|---|
24_음양 더하기_자바 강의 다형성, Object_25.1.15(수) (0) | 2025.01.15 |
22_서울에서 김서방 찾기_키오스크 필수과제 레벨 1,2 구현_객체지향 강의_25.1.13(월) (0) | 2025.01.13 |
21_콜라츠 추측_계산기 과제 해설_25.1.10(금) (0) | 2025.01.10 |
20_두 정수 사이의 합_개인 과제 정리_튜터님 특강_25.1.9(목) (0) | 2025.01.09 |