우아한테크코스/1주차 프리코스

[1주차 프리코스] 1일차 리뷰

행복한라이언 2023. 10. 19. 23:38
728x90
반응형

1. 미션제출

     2023년 10월 24일 (화요일) 15시 00분 ~ 2023년 10월 25일 (수요일) 23시 59분

    ▷ 제출 장소 : https://apply.techcourse.co.kr/recruits

 

우아한형제들의 교육 프로그램 지원하기

우아한형제들의 교육 프로그램에서 개발자들을 위해 디자인된 강의를 수강해보세요.

apply.techcourse.co.kr

     2023년 10월 26일 0시 이후 추가 push도 허용하지 않는다.    

    ▷ 정해진 시간을 지키지 않은 경우, 미션을 제출하지 않은 것으로 한다.


2. (환경설정) 에러 발생 및 해결

1) IntellJ 'this file is not runnable', 'run 비활성화' 에러 발생

→ 에러: 아이콘이 C가 아니라 찻잔 아이콘인 경우 : 클래스 파일 인식 ×

src 폴더 우측 클릭 > Mark Directory as > Sources Root 설정 을 통해 src 폴더를 root 경로로 인식

참고) https://sunghee2.tistory.com/entry/intellij-spring-run-%EC%95%84%EC%9D%B4%EC%BD%98-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94

 

[intellij] spring run 아이콘 비활성화

intellij run 아이콘 비활성화시 Run > Add Configuration > 좌측 상단의 + 버튼 > Application > main class 추가 ※ 여기서 폴더들이 만약 안 보인다면, .idea 폴더 삭제 후 프로젝트 재오픈하기 ※ class 파일이 인식

sunghee2.tistory.com

2) IntellJ 'Cannot resolve symbol' 에러 발생

 View > Tool Windows > Gradle > java-baseball(프로젝트명) 우클릭 > Refresh Gradle Dependencies > 해결 

참고) https://ottl-seo.tistory.com/entry/IntelliJ-Cannot-resolve-symbol-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0

 

IntelliJ `Cannot resolve symbol` 에러 해결 방법 총정리

잘만 돌아가던 프로젝트에 온갖 빨간 줄이 그어졌다. 에러 내용은 "Cannot resolve symbol.. " 사실 이 에러는 IntelliJ IDEA에서 잊을 만 하면 나오는,, 그만큼 자주 보이는 에러이다. 다시 말해 아래와 같

ottl-seo.tistory.com


3. 진행상황

1) 💡기능 목록 작성

## 💡 기능 목록

(A)컴퓨터의 생성 
  - (a) 1~9로 구성된
  - (b) 서로 다른(중복금지)
  - (c) 3자리 자연수 생성
  
- (B)사용자의 입력
 	- (a) 1~9로 구성된
  	- (b) 서로 다른 
  	- (c) 세자리 수 입력
  	- (d)잘못된 입력에 판단(예외처리)
        - 예외 발생시 시 IllegalArgumentException 
          - 모두 숫자인지 판단
          - 3자리 숫자인지 판단
          - 서로 다른 자리수를 가지고 있는지 판단
          - 1~9로만 구성되어있는지 판단(0제외)
          
- (C)입력에 대한 정답 유무 판단 기능
  - (a) 정답: 게임 지속(1) 또는 종료(2) 선택
  - (b) 오답: 사용자 힌트 제공
    - 힌트 제공 기능
    	- 볼
        - 스트라이트
        - 낫싱

 

2) 구현 진행 상황: 성공(BUILD SUCCESSFUL in 2s)

(A)컴퓨터의 생성 
  - (a) 1~9로 구성된
  - (b) 서로 다른(중복금지)
  - (c) 3자리 자연수 생성
  
(B)사용자의 입력
   - (a) 1~9로 구성된
   - (b) 서로 다른 
   - (c) 세자리 수 입력
   - (d)잘못된 입력에 판단(예외처리)
        - 예외 발생시 시 IllegalArgumentException 
          - 모두 숫자인지 판단
          - 3자리 숫자인지 판단
          - 서로 다른 자리수를 가지고 있는지 판단
          - 1~9로만 구성되어있는지 판단(0제외)
          
(C)입력에 대한 정답 유무 판단 기능
  - (a) 정답: 게임 지속(1) 또는 종료(2) 선택
  - (b) 오답: 사용자 힌트 제공
    - 힌트 제공 기능
        - 볼
        - 스트라이트
        - 낫싱


4. FAILED 발생 및 해결, 원인 파악하기

1) 에러: ApplicationTest. 게임종료_후_재시작() FAILED

해결: computeNumber 생성방식 변경

▷ 질문: 왜 기존의 코드에서는 '예외_테스트() FAILED'로 실패하지 않았을까? 그 때도 break가 아니라서 실패해야했는데? 

 

// 초기 computeNumber 생성방식 -> 게임종료_후_재시작 에러 발생
	int computeNumber = Randoms.pickNumberInRange(111, 999)
// 해결
    public static String creatNumber(){
        List<Integer> computer = new ArrayList<>();
        while (computer.size() < 3) {
            int randomNumber = Randoms.pickNumberInRange(1, 9);
            if (!computer.contains(randomNumber)) {
                computer.add(randomNumber);
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Integer num : computer) {
            stringBuilder.append(num);
        }
        return stringBuilder.toString();
    }

 


2) 에러: ApplicationTest > 예외_테스트() FAILED

해결: 게임종료시 break 도입

▷ 질문: 왜 break문을 쓰지 않으면 computeNumber가 다시 만들어지면서 "숫자 야구 게임을 시작합니다."가 왜 또 실행될까?

              if (reGame.equals("2")) {
//                    playingGame = false; -> "예외_테스트" 에러
                    break;
                }

3) 힌트가 이상한 경우(10월20알 해결 완료)

▷ 원인: 현재는 countBall할 때 정렬(sort)를 시키고 각 인덱스마다 같은 값인지 판단하기 때문에 문제가 발생함!

    Ex) 기준 365 보다 큰 366, 367, 368, 369는 sort해도 큰 문제가 없음 > 2스트라이크

            기준 365보다 작은 36×(단, ×는 5보다 작으며 3과 6은 아니다.) 가 156으로 정렬된다

            > 정렬 후 356 과 ×36을 비교하면 cntB = 1

            > 365와 36× 비교하면 cntS = 2

    public static int countBall(String computeNumber, String userNumber){
        int cntB = 0;

        char[] computeNumberArray = computeNumber.toCharArray();
        char[] userNumberArray = userNumber.toCharArray();

        Arrays.sort(computeNumberArray);
        Arrays.sort(userNumberArray);

        for(int i = 0; i < 3; i++){
            if(userNumberArray[i] == computeNumberArray[i])
                cntB++;
        }
        return cntB;
    }

TODO

▶ 0. countBall 메서드 다시 작성하기

▶ 1. 예외처리 학습하기

▶ 2.컬렉션 학습하기

    - JAVA 스터디: https://cheddar-liquid-051.notion.site/1-7d30450363ce4f3b8579e8d0d5d232ab

 

1주차 주제

Java Collection

cheddar-liquid-051.notion.site

▶ 3. 코트 리팩토링하기

 

소감

 IntellJ 환경설정에 꽤나 애를 먹었다. VSCode 사용했을 때는 겪어 보지 못했더 import가 되지 않거나 클래스파일을 인식하지 못하는 등의 에러는 처음 겪어보았다. 구글링을 통해서 잘 해결되었지만 이유에 대해서는 학습할 필요성이 있어 보인다.

 

 볼의 개수 세는 메서드 제외하고는 기능 구현에 성공한 것 같다. 그런데 이제 Application에 전부 몰아서 구현을 했다. 따라서 내일부터는 객체지향에 맞도록 최대한 리팩토링하도록 한다.

 

 실수했던 점은 숫자야구게임은 자체로만 보면 백준에서도 푼 문제라서 쉽게 생각한게 문제였다. 볼은 컴퓨터 숫자와 유저 숫자의 교집합만 알면 되는데 뜬금없이 정렬해서 비교를 했으니 문제가 볼의 수가 스트라이크 수보다 적은 문제가 발생했다. 그런데 의문점은 테스트케이스를 성공해서 내가 성공했다고 착각한 점이다. 

 

이 문제에 대해서 내가 해야할 조치는 다음과 같다.

 첫 번째는 콜렉션을 공부하는 것이다. 콜렉션 공부를 아직 하지 않아서 무리하게 둘 사이를 비교하려다보니 문제가 발생한 것 같다. 내일은 콜렉션 - 리스트, 셋, 맵에 대해서 공부한다.

 두 번째는 테스트코드를 더 넣어야하는 점이다. 테스트코드를 작성하는 방법에 대해서는 아무것도 모르기 때문에 코드 리팩토링까지 끝내고 학습한다.

세 번 째는 예외처리가 전반적으로 아주 많이 쓰일 것 같다. 예외처리에 대해서도 공부해야한다.

 

전반적으로 매우 재밌었다. 백준 알고리즘 구현 문제를 처음부터 내가 설계하고 제대로 설계했는지 확인하는 과정을 거치는 것 같았다. 

 

728x90
반응형