일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 정처기 공부법
- racing car
- Github
- 기능개발
- 개발지식정리
- 개발지식
- 정처기필기
- 프로그래머스
- 올바른 괄호
- 공부법 추천
- 정처기 요약집
- 정처기 필기 공부법
- 코딩테스트
- 우테코 6기 프리코스
- 우테코
- 프리코스
- 레이싱카 회고
- git
- 프리코스 baseball 회고
- 깃허브
- 우테코 프리코스
- 정처기 노트 공유
- 프리코스 회고
- 세션
- 자바
- 깃vs깃허브
- baseball java
- 개발기초
- 깃허브 사용법
- 혼공얄코
- Today
- Total
Muhly's Note
[우테코 프리코스 회고] 본문
1주차를 한달이 넘어서야 회고하는 나 대.다.나.다.
사실 회고를 하는 이유는 프리코스를 진행하면서 내가 이제껏 헛공부하고 부족했다는 것을 깨달았기 때문이다.😖
이번프리코스를 진행하면서도 코드를 짤때 솔직히 완전히 내가 짜지는 못했다...
여러 블로그를 참조한편!코드짜는거 넘 어렵다...기능목록구현도 ....특히 테스트코드는 처음봤어여😂
이건 쉬운편이라는데 이것도 어렵다니...ㅎ
하지만 이걸 넘어서기 위해서 회고를 하는거쥬~?
그럼 힘내서 회고해보겠습니당~!!!!

However 난 기본도 부족해서 일단 난 6기지만 5기 프리코스하신분들의 회고록을 보면서 미션을 먼저 시작하려고 한다.뭐든 기본이 중요한법.......
📚problem1
포비와 크롱의 책펼치대결을 짜바와요...대결은 안했으면 좋겠사와요 사이좋게 지내세여
😂처음 코드
package onboarding.problem1;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Stream;
public class Problem1 {
//도전 1. 제한사항도 도전해보자
//도전 2.클론 코딩만하지말고 내가 바꿔보자 ->기본 구조와 메소드 구현 먼저
//도전 3.기능 구현도 생각해보자
static final int FIRST_PAGE = 1;
static final int LAST_PAGE = 400;
public static void main(String[] args) {//도전 2.
Scanner sc = new Scanner(System.in);
System.out.println("포비의 페이지 번호를 입력하세요 : ");
int pobiLeft = sc.nextInt();
int pobiRight = sc.nextInt();
System.out.println("크롱의 페이지 번호를 입력하세요 : ");
int crongLeft = sc.nextInt();
int crongRight = sc.nextInt();
List<Integer>pobi = Arrays.asList(pobiLeft, pobiRight);
List<Integer>crong =Arrays.asList(crongLeft, crongRight);
}
public static int solution(List<Integer>pobi, List<Integer>crong){ //도전1.
if(isNotPageValid(pobi) || isNotPageValid(crong)){
return -1;
}
//포비의 페이지 get
int pobiLeftPage = pobi.get(0);
int pobiRightPage = pobi.get(1);
//크롱의 페이지 get
int crongLeftPage = crong.get(0);
int crongRightPage = crong.get(1);
//도전3의 메서드를 모아 포비의 결과 리스트 생성 && 그 중 비교메서드를 통해가장 큰값 구해오기
List<Integer> pobiResultList = List.of(getSumValue(pobiLeftPage), getSumValue(pobiRightPage),
getMultiplyValue(pobiLeftPage), getMultiplyValue(pobiRightPage));
int pobiScore = getMaxValue(pobiResultList);
//도전3의 메서드를 모아 크롱의 결과 리스트 생성 && 그 중 비교메서드를 통해가장 큰값 구해오기
List<Integer> crongResultList = List.of(getSumValue(crongLeftPage), getSumValue(crongRightPage),
getMultiplyValue(crongLeftPage), getMultiplyValue(crongRightPage));
int crongScore = getMaxValue(crongResultList);
return compareResult(pobiScore, crongScore);
}
//도전 1.
//입력 페이지에 대한 검증 진행
private static boolean isNotPageValid(List<Integer>pageNums) {
int leftPage = pageNums.get(0);
int rightPage = pageNums.get(1);
//도전1.페이지에 대한 최종 검증 return
return isNotPageRange(leftPage, rightPage);
}
//도전1.왼쪽, 오른쪽 페이지가 범위를 벗어나지않는지 확인하는 메서드
private static boolean isNotPageRange(int leftPage, int rightPage){
return leftPage < FIRST_PAGE || leftPage >= LAST_PAGE || rightPage <= FIRST_PAGE || rightPage > LAST_PAGE;
}
//도전1.입력페이지가 시작 면이나 마지막 면인지 확인하는 메서드
private static boolean isFristPage(int leftPage, int rightPage){
return leftPage ==FIRST_PAGE || rightPage == LAST_PAGE;
}
//도전1.페이지의 왼쪽/오른쪽이 홀/짝임을 판단한다.
private static boolean isNotPageOddAndEven(int leftPage, int rightPage){
return leftPage %2 != 1 && rightPage % 2 != 0;
}
//도전1.입력 페이지의 차가 1인지 판단
private static boolean isNotPageContinuous(int leftPage, int rightPage){
return rightPage - leftPage != 1;
}
//도전3.입력받은 페이지의 각 자릿수를 담은 배열 받아오기
private static int[] getPageValueArray(int page) {
String[] digitStrArr = String.valueOf(page).split("");
return Stream.of(digitStrArr).mapToInt(Integer::parseInt).toArray();
}
//도전3.sum받아오기
private static int getSumValue(int page){
int[]pageArr = getPageValueArray(page);
return Arrays.stream(pageArr).sum();
}
//도전 3.multiply받아오기
private static int getMultiplyValue(int page){
int[] pageArr = getPageValueArray(page);
int multiVal = 1;
for(int pageVal : pageArr){
multiVal *= pageVal;
}
return multiVal;
}
//도전3.maxValue 받아오기 _ 자리값 비교
private static int getMaxValue(List<Integer>resultArr){
int maxVal = 0;
for(int resultVal : resultArr){
maxVal = Math.max(maxVal, resultVal);
}
return maxVal;
}
//도전3.compareREsult받아오기
//도전3.입력받은 페이지의 각 자릿수를 담은 배열 받아오기
private static int compareResult(int pobiScore, int crongScore) {
if (pobiScore > crongScore) {
return 1;
}
if (pobiScore < crongScore) {
return 2;
}
return 0;
}
}
처음 짠 코드다.하지만 이런 주의사항이 떠서 다시 수정했다.

🥹수정한 코드
package onboarding.problem1;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Stream;
public class Problem1 {
//도전 1. 제한사항도 도전해보자
//도전 2.클론 코딩만하지말고 내가 바꿔보자 ->기본 구조와 메소드 구현 먼저
//도전 3.기능 구현도 생각해보자
static final int FIRST_PAGE = 1;
static final int LAST_PAGE = 400;
public static void main(String[] args) {//도전 2.
Scanner sc = new Scanner(System.in);
System.out.println("포비의 페이지 번호를 입력하세요 : ");
int pobiLeft = sc.nextInt();
int pobiRight = sc.nextInt();
System.out.println("크롱의 페이지 번호를 입력하세요 : ");
int crongLeft = sc.nextInt();
int crongRight = sc.nextInt();
List<Integer>pobi = Arrays.asList(pobiLeft, pobiRight);
List<Integer>crong =Arrays.asList(crongLeft, crongRight);
int result = solution(pobi,crong);
System.out.println("결과: " + result);
}
public static int solution(List<Integer>pobi, List<Integer>crong){ //도전1.
if(isNotPageValid(pobi) || isNotPageValid(crong)){
return -1;
}
//포비의 페이지 get
int pobiLeftPage = pobi.get(0);
int pobiRightPage = pobi.get(1);
//크롱의 페이지 get
int crongLeftPage = crong.get(0);
int crongRightPage = crong.get(1);
//도전3의 메서드를 모아 포비의 결과 리스트 생성 && 그 중 비교메서드를 통해가장 큰값 구해오기
List<Integer> pobiResultList = List.of(getSumValue(pobiLeftPage), getSumValue(pobiRightPage),
getMultiplyValue(pobiLeftPage), getMultiplyValue(pobiRightPage));
int pobiScore = getMaxValue(pobiResultList);
//도전3의 메서드를 모아 크롱의 결과 리스트 생성 && 그 중 비교메서드를 통해가장 큰값 구해오기
List<Integer> crongResultList = List.of(getSumValue(crongLeftPage), getSumValue(crongRightPage),
getMultiplyValue(crongLeftPage), getMultiplyValue(crongRightPage));
int crongScore = getMaxValue(crongResultList);
return compareResult(pobiScore, crongScore);
}
//도전 1.
//입력 페이지에 대한 검증 진행
private static boolean isNotPageValid(List<Integer>pageNums) {
int leftPage = pageNums.get(0);
int rightPage = pageNums.get(1);
//도전1.페이지에 대한 최종 검증 return
return isNotPageRange(leftPage, rightPage) || isFirstPage(leftPage, rightPage) ||
isNotPageOddAndEven(leftPage, rightPage) || isNotPageContinuous(leftPage, rightPage);
}
//도전1.왼쪽, 오른쪽 페이지가 범위를 벗어나지않는지 확인하는 메서드
private static boolean isNotPageRange(int leftPage, int rightPage){
return leftPage < FIRST_PAGE || leftPage >= LAST_PAGE || rightPage <= FIRST_PAGE || rightPage > LAST_PAGE;
}
//도전1.입력페이지가 시작 면이나 마지막 면인지 확인하는 메서드
private static boolean isFirstPage(int leftPage, int rightPage){
return leftPage == FIRST_PAGE || rightPage == LAST_PAGE;
}
//도전1.페이지의 왼쪽/오른쪽이 홀/짝임을 판단한다.
private static boolean isNotPageOddAndEven(int leftPage, int rightPage){
return !(leftPage % 2 == 1 && rightPage % 2 == 0);
}
//도전1.입력 페이지의 차가 1인지 판단
private static boolean isNotPageContinuous(int leftPage, int rightPage){
return rightPage - leftPage != 1;
}
//도전3.입력받은 페이지의 각 자릿수를 담은 배열 받아오기
private static int[] getPageValueArray(int page) {
String[] digitStrArr = String.valueOf(page).split("");
return Stream.of(digitStrArr).mapToInt(Integer::parseInt).toArray();
}
//도전3.sum받아오기
private static int getSumValue(int page){
int[]pageArr = getPageValueArray(page);
return Arrays.stream(pageArr).sum();
}
//도전 3.multiply받아오기
private static int getMultiplyValue(int page){
int[] pageArr = getPageValueArray(page);
int multiVal = 1;
for(int pageVal : pageArr){
multiVal *= pageVal;
}
return multiVal;
}
//도전3.maxValue 받아오기 _ 자리값 비교
private static int getMaxValue(List<Integer>resultArr){
int maxVal = 0;
for(int resultVal : resultArr){
maxVal = Math.max(maxVal, resultVal);
}
return maxVal;
}
//도전3.compareREsult받아오기
//도전3.입력받은 페이지의 각 자릿수를 담은 배열 받아오기
private static int compareResult(int pobiScore, int crongScore) {
if (pobiScore > crongScore) {
return 1;
}
if (pobiScore < crongScore) {
return 2;
}
return 0;
}
}
🧐 뭘 공부했냐구?

1️⃣ intelliJ에서 알려주는 주의사항을 반드시 보자.
이건 단순 주의사항이 아닌 "뭔가 잘못된것...코드는 돌아가도 정확하지않다"라고 생각하자
2️⃣ 변수를 잘 사용하자.
변수명명 규칙만 중요한것이 아니라 다양하게 활용할수 있다는 것을 알았다.
예를 들면
pobiLeft -> Listpobi 로 담는다.
3️⃣ 메서드도 잘 사용하자.
메서드가 여러 메서드를 담고 이용할수있다는건 알기는했다.
하지만 꼭 뭔가 기능을 짤때는 이리 담고 저리담고....난 이제껏 너무 헷갈렸다.

그래서 이런식으로 도전1,2,3으로 나누고 짜봤다->이걸 하려면 기능목록ReadME는 필수다.
내 github에 가면 기능목록구현도 있다!!!
🤔 모르는건 뭔데?

1️⃣ stream
stream은 데이터 컬렉션을 함수형 스타일로 처리할 수 있도록 해주느 api라고 한다.

뜻은 알겠는데 분석이 안되서 챗gpt한테 물어봤다.
https://hbase.tistory.com/171 -> 스트림 추천블로그, 잘 설명해주셨다
2️⃣ 매개변수는 아직도 헷갈려
private static int[] getPageValueArray(int page) {
String[] digitStrArr = String.valueOf(page).split("");
return Stream.of(digitStrArr).mapToInt(Integer::parseInt).toArray();
난 전체 클래스에서 page라는 변수도 메서드도 생성을 안했는데 어떻게 받아오는건지 궁금하다...헷갈료

이렇게 물어봐서 답은 얻었는데 page를 정의도 안했는데 어떻게 받아오지....?점점 아리송 ㅎ
그래도 문제를 해결하면서 많이 배웠다.모른다고 좌절하지말고 계속 보고 반복하면 언젠가 깨닫는다.
문제를 풀어보고 회고해보길 잘한것같다.이 문제와 코드는 dolmeng2님의 블로그를 참고했다...내가 참고하면서 공부할수있도록 허락해주신 dolmeng2님에게 감사를🥰🥰🥰
https://cl8d.tistory.com/
->dolmeng2님 블로그. 우테코 관련 외에도 좋은글이 많다.초면에 사...사랑합니다.

https://github.com/bir061521/WooStudy/tree/main/src/main/java/onboarding/problem1
->요건 내 깃허브

다들 하면된다 ㅎㅎㅎ나도 너도 될때까지 화이팅!!!!
'우테코 프리코스 회고' 카테고리의 다른 글
[우테코 프리코스 회고] racing car 회고(업데이트중인 글입니다) (0) | 2023.11.30 |
---|---|
[우테코 프리코스 회고] baseball 회고 (0) | 2023.11.30 |