관리 메뉴

ballqs 님의 블로그

TIL - 2024년 08월 02일 - 팀 프로젝트 2일차 본문

내일배움캠프/Java

TIL - 2024년 08월 02일 - 팀 프로젝트 2일차

ballqs 2024. 8. 2. 23:12

오늘의 일정

9:00 ~ 10:00 - 알고리즘 코드카타
10:00 ~ 12:00 - 팀 프로젝트
12:00 ~ 13:00 - 점심시간
13:00 ~ 16:00 - 팀 프로젝트

16:00 ~ 17:00 - 나무반 강의

17:00 ~ 18:00 - 팀 프로젝트
18:00 ~ 19:00 - 저녁시간

19:00 ~ 22:00 - 팀 프로젝트
22:00 ~         - TIL 작성

알고리즘 코드카타

프로그래머스의 롤케이크 자르기 문제를 풀이를 진행했다.

해당 문제는 롤케이크에 토핑이 올라가 있는데 해당 토핑에는 여러가지 종류가 있다.  이 롤케이크를 형과 동생이 두조각으로 나눠 먹을때 서로 먹은 토핑의 개수가 같을 경우가 몇회 정도인지 구하는 문제이다.

잘린 롤케이크 위에 올려진 토핑은 중복을 제거하고 개수를 세어서 비교하면 된다.

 

제한사항

  • 1 <= topping의 길이<= 1,000,000
    • 1<= topping[i] <= 10,000

입출력 예

topping result
[1, 2, 1, 3, 1, 4, 1, 2] 2
[1, 2, 3, 1, 4] 0

 

코드

import java.util.*;
class Solution {
    public int solution(int[] topping) {
        int answer = 0;
        
        Map<Integer , Integer> map = new HashMap<>();
        Set<Integer> set = new HashSet<>();
        // 형한테 담으면서 토핑별 카운트
        for (int i : topping) {
            map.put(i , map.getOrDefault(i , 0) + 1);
        }
        
        // 토핑 반복문
        for (int i : topping) {
            int t = map.get(i);
            set.add(i);

            if (t == 1) {
                // 해당 토핑의 개수가 1개이면 삭제
                map.remove(i);
            } else {
		            // 해당 토핑의 개수 -1
                map.put(i , t - 1);
            }
            
            // 형과 동생의 토핑 크기 비교
            if (map.size() == set.size()) {
                answer++;
            }
        }
        
        return answer;
    }
}

팀 프로젝트

앞날에 작성되었던 List<> 부분을 Map<> 컬렉터로 바꾸기로 했다.

그리고 파일을 따로 빼기로 했다.

package camp.data;

import camp.model.Score;
import camp.model.Student;
import camp.model.Subject;

import java.util.List;
import java.util.Map;

public class Data {    // index 관리 필드
    public static int studentIndex;     // 학생 고유번호 INDEX
    public static int subjectIndex;     // 과목 고유번호 INDEX

    // 데이터 저장소
    public static Map<String , Student> studentStore;
    public static Map<String , Subject> subjectStore;
    public static List<Score> scoreStore;
}

 

Map으로 바뀐 것에 따라 다른 코드들이 많이 바뀌었다.

 

interface 상속받은 파일 수정

package camp;

import camp.data.Data;
import camp.model.Subject;

import java.util.List;

public class SubjectManagement implements ManagementInterface<Subject>{
    @Override
    public Subject getData(String value) {
        return Data.subjectStore.get(value);
    }

    @Override
    public void selectAll() {
        System.out.println("==================================");
        for (String str : Data.subjectStore.keySet()) {
            System.out.println("과목 고유번호 : " + Data.subjectStore.get(str).getSubjectId());
            System.out.println("과목 이름 : " + Data.subjectStore.get(str).getSubjectName());
            System.out.println("과목 타입 : " + Data.subjectStore.get(str).getSubjectType());
            System.out.println("==================================");
        }
    }

    @Override
    public void update(String id , String fleid , String value) {

    }

    @Override
    public void delete() {

    }

    @Override
    public void insert() {

    }
}

 

수강생 등록 기능 구현 완료

// 수강생 등록
public void createStudent() {
    System.out.println("\n수강생을 등록합니다...");

    // 1.수강생 이름 저장
    System.out.print("수강생 이름 입력: ");
    String studentName = sc.next(); // 수강생 이름

    // 2.과목리스트 조회(Subject 에서 가져와서 뿌리기) 필수:3 , 선택:2 검증 필요!!
    SubjectManagement subjectManagement = new SubjectManagement();
    subjectManagement.selectAll();

    // 3.과목 담기
    int required = 0;   // 필수
    int choice = 0;     // 선택
    Map<String , Subject> subjectList = new HashMap<>();
    while (true) {
        System.out.print("과목 고유번호 입력: ");
        String subjectId = sc.next(); // 과목 고유번호

        // null이 리턴될 경우 어떻게 처리할지
        Subject subject = subjectManagement.getData(subjectId);

        // null 검증
        if (Objects.isNull(subject)) {
            System.out.println("과목 고유번호를 제대로 입력해주세요.");
            continue;
        }

        // 중복으로 등록된건지 검증 (anyMatch : 일치하는게 있는지 검증[return boolean])
        // subject 이게 명칭 중복 등 문제가 있으면 다른 명칭으로 대체
        if (subjectList.containsKey(subject.getSubjectId())) {
            System.out.println("이미 등록된 과목이 있습니다.");
            continue;
        }
        subjectList.put(subject.getSubjectId() , subject);

        if (subject.getSubjectType().equals(SubjectType.MANDATORY.name())) {
            required++;     // 필수 증가
        } else {
            choice++;       // 선택 증가
        }

        if (required < 3 || choice < 2) {
            System.out.println("등록된 과목은 현재 필수 : " + required + " , 선택 : " + choice);
            System.out.println("과목을 더 등록해주세요.");
        } else {
            System.out.println("과목을 더 등록하시겠습니까?");
            String result = sc.next(); // 과목 고유번호
            if (!result.equals("예")) {
                System.out.println("과목 등록을 마쳤습니다.");
                break;
            }
        }
    }

    String id = sequence.sequence(IndexType.ST.name());
    // 4.studentStore 에 저장
    Student student = new Student(id, studentName , subjectList ,"Green"); // 수강생 인스턴스 생성 예시 코드
    Data.studentStore.put(id , student);
    // 기능 구현
    System.out.println("수강생 등록 성공!\n");
}

 

수강생 상태 관리 기능 구현 완료

// 수강생 상태 관리
public void  changeStudentStatus() {
    inquireStudent();
    String studentId = getStudentId(); //수강생 고유번호

    StudentManagement studentManagement = new StudentManagement();
    Student student = studentManagement.getData(studentId);

    String status = "";
    while (true) {
        System.out.println("==================================");
        System.out.println("수강생 상태 리스트");
        System.out.println("1.Green");
        System.out.println("2.Red");
        System.out.println("3.Yellow");
        System.out.print("변경할 항목을 선택하세요...");
        int input = sc.nextInt(); // 상태 번호

        switch (input) {
            case 1 -> status = "Green";
            case 2 -> status = "Red";
            case 3 -> status = "Yellow";
            default -> {
                status = "Error";
            }
        }
        if (!status.equals("Error")) {
            student.setStudentStatus(status);
            break;
        } else {
            System.out.println("잘못된 입력입니다.");
        }
    }

    studentManagement.update(studentId , "studentStatus" , status);
    System.out.println("\n수강생 상태 변경 성공!");
}

 

등으로 하여 오늘 코딩 일정을 마무리 하였다.