ballqs 님의 블로그
TIL - 2024년 08월 02일 - 팀 프로젝트 2일차 본문
오늘의 일정
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수강생 상태 변경 성공!");
}
등으로 하여 오늘 코딩 일정을 마무리 하였다.
'내일배움캠프 > Java' 카테고리의 다른 글
TIL - 2024년 08월 08일 - 팀 프로젝트 종료 및 KPT 작성 (0) | 2024.08.08 |
---|---|
TIL - 2024년 08월 07일 - 팀 프로젝트 7일차(PPT 작성시 문제 발생) (0) | 2024.08.07 |
TIL - 2024년 08월 01일 - 팀 프로젝트 시작 (0) | 2024.08.01 |
TIL - 2024년 07월 19일 공부한 내용 정리하기(int long BigInteger) (0) | 2024.07.19 |
TIL - 2024년 07월 18일 공부한 내용 정리하기(Set) (0) | 2024.07.18 |