ballqs 님의 블로그
TIL - 2024년 08월 01일 - 팀 프로젝트 시작 본문
오늘의 일정
9:00 ~ 10:00 - 알고리즘 코드카타
10:00 ~ 10:30 - 팀프로젝트 발제
10:30 ~ 12:00 - 팀 회의
12:00 ~ 13:00 - 점심시간
13:00 ~ 17:00 - 팀 회의
17:00 ~ 18:00 - 팀 프로젝트
18:00 ~ 19:00 - 저녁 시간
19:00 ~ 20:30 - 팀 프로젝트
20:30 ~ 21:00 - TIL 작성
알고리즘 코드카타
뒤에 있는 큰 수 찾기 알고리즘 풀이를 진행했다.
해당 문제는 정수로 이루어진 배열 numbers가 있는데 여기서 각 원소들의 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 큰수를 배열이 담아서 return 하는 방법이다.
다만 하나의 예외적인 상황이 있는데 큰수가 존재하지 않으면 -1를 담는다.
제한사항
- 4 <= numbers <= 1,000,000
- 1<= numbers[i] <= 1,000,000
입출력 예
numbers | result |
[2, 3, 3, 5] | [3, 5, 5, -1] |
[9, 1, 5, 3, 6, 2] | [-1 ,5, 6, 6, -1 ,-1] |
코드
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
// 배열에 -1로 채우기
Arrays.fill(answer , -1);
// 스택 선언
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < numbers.length; i++) {
// while문 첫번째 조건 : 스택의 길이가 있을때
// while문 두번째 조건 : 스택에서 내보내야할 값과 현재 진행중인 값을 비교
while (stack.size() > 0 && numbers[stack.peek()] < numbers[i]) {
// 차례대로 비교해가면서 일치하는 것들만 담기
answer[stack.pop()] = numbers[i];
}
// 진행되는 모든 숫자를 스택에 담기
stack.add(i);
}
return answer;
}
}
풀이 흐름
[9, 1, 5, 3, 6, 2] 가 있다고 가정하자!
첫번째 흐름
- stack에 0를 담는다.(index)
두번째 흐름
- stack에 길이가 있고 두번째로 온 9 < 1 이 일치하지 않기에 넘어간다. ㄴ9는 index 기반으로 꺼낸 값이다
- stack에 1를 담는다.(index)
세번째 흐름
- stack에 길이가 있고 세번째로 온 1 < 5 가 일치하여 실행문 시작 ㄴ1는 index 기반으로 꺼낸 값이다
- 해당 index에 5를 담기
- stack에 길이가 있고 세번째로 온 9 < 5 가 일치하지 않기에 넘어간다. ㄴ9는 stack에 들어 있던 다음 출력값의 index가 가지고 있던 값
- stack에 2를 담는다.(index)
이런 흐름으로 값을 채워나가는 구조이다!
팀프로젝트 발제
ZOOM을 통해 팀 프로젝트가 발제되었다.
발제된 팀 프로젝트는 Java로 하는 팀 협업 프로젝트 수강생 점수 관리 시스템이다.
이 3가지 모델이 주어지며 이를 토대로 아래와 같은 기능들을 구현해야 한다.
- 수강생 관리
- 점수 관리
이 2가지로 나뉘어 지며
수강생 관리에는 2가지가 있으며
- 수강생 등록
- 수강생 목록 조회
점수 관리에는 3가지가 있다.
- 수강생의 과목별 시험 회차 점수를 등록
- 수강생의 과목별 시험 회차 점수를 수정
- 수강생의 특정 과목 회차별 등급을 조회
등이 있고 추가요구 사항은 다음에 개발 들어갈때 작성하겠다.
팀 회의
팀 회의를 통해 Git은 어떻게 구성할건지 branch는 사용할건지 파트 구분은 어떻게 나눌 것인지에 대한 의논을 했다.
우선 팀 과제에서는 merge 기능을 사용하는것을 권했기에 git을 무조건 적으로 사용하고 branch를 아래와 같이 나누기로 했다.
branch명 | 역할 | 비고 |
main | 배포용 | 제출 전에 작업 |
dev | 개발용 | 특정 간격에 따른 병합 및 테스트용 |
hojin | 과목 | |
junhyeong | Main 파일 | |
jonghyeok | 수강생 | |
score-feature/jeongik | 점수 | |
yujin | 점수 |
각 기능별 주어진 멤버변수에 적합한 데이터 타입이 무엇인지 의논하여 정하였다.
그리고 일정을 정하고 어떻게 진행할지 부족한게 있다면 어떤 방식을 채택하여 풀어나갈지 이야기했다.
경우에 따라 좀더 편리한 개발 방법이 없는지? 다형성 , extends 를 이용해서 묶어서 가능한지 검토 또한 진행하며 팀 회의를 마무리 지었다.
팀 프로젝트
프로젝트를 진행하면서 당장 테스트 해볼 기능이 있으면 바로 git에 올려서 연관 있는 팀원들에게 방해가 되지 않도록 전달하여 테스트를 해보았다.
코드는 아래와 같이 작성 되었다.
기본 main 파일
public class CampManagementApplication {
public List<Student> studentStore; // 수강생
public List<Subject> subjectStore; // 과목
public List<Score> scoreStore; // 점수
public static void main(String[] args) {
// 실행내용....
}
}
interface 작성
package camp;
import java.util.List;
public interface ManagementInterface<T> {
// 1개 조회용
T select(List<T> list , String id);
// 전체 조회
void selectAll(List<T> list);
// 수정(임시구현)
T update();
// 삭제(임시구현)
T delete();
// 등록(임시구현)
T insert();
}
interface 상속받은 파일 생성
package camp;
import camp.model.Subject;
import java.util.List;
// Subject를 제네릭에 사용하여 작성
public class SubjectManagement implements ManagementInterface<Subject>{
@Override
public Subject select(List<Subject> subjectStore , String subjectId) {
for (Subject subject : subjectStore) {
if (subject.getSubjectId().equals(subjectId)) {
return subject;
}
}
return null;
}
@Override
public void selectAll(List<Subject> subjectStore) {
System.out.println("==================================");
for (Subject list : subjectStore) {
System.out.println("과목 고유번호 : " + list.getSubjectId());
System.out.println("과목 이름 : " + list.getSubjectName());
System.out.println("과목 타입 : " + list.getSubjectType());
System.out.println("==================================");
}
}
@Override
public Subject update() {
return null;
}
@Override
public Subject delete() {
return null;
}
@Override
public Subject insert() {
return null;
}
}
Subject getter setter 추가
public class Subject {
private String subjectId; // 과목 고유번호
private String subjectName; // 과목 이름
private String subjectType; // 과목 타입(필수 , 선택)
// getter , setter 추가
}
등으로 하여 오늘 코딩 일정을 마무리 하였다.
'내일배움캠프 > Java' 카테고리의 다른 글
TIL - 2024년 08월 07일 - 팀 프로젝트 7일차(PPT 작성시 문제 발생) (0) | 2024.08.07 |
---|---|
TIL - 2024년 08월 02일 - 팀 프로젝트 2일차 (0) | 2024.08.02 |
TIL - 2024년 07월 19일 공부한 내용 정리하기(int long BigInteger) (0) | 2024.07.19 |
TIL - 2024년 07월 18일 공부한 내용 정리하기(Set) (0) | 2024.07.18 |
TIL - 2024년 07월 17일 공부한 내용 정리하기(for문 수행순서 , toCharArray , StringBuilder) (0) | 2024.07.17 |