6기 프리코스 우테코 회고록

Muhly·2023년 11월 21일
0

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

->요건 내 깃허브

다들 하면된다 ㅎㅎㅎ나도 너도 될때까지 화이팅!!!!

profile
https://muhlysstudynote.tistory.com/-> 블로그 이전하였습니다

1개의 댓글

comment-user-thumbnail
2023년 11월 21일

앞으로 천천히 수정하겠습니다

답글 달기