본문 바로가기

개발 일지/TIL

[ #13 ] TIL (개인과제 Level 2)

✏️ 0501      


코딩테스트 연습

개인과제 Level 2 도전

개인과제 해설


코드테스트_알고리즘

 

자연수 n 을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴하는 문제

n = 12345 라면 결과값은 [5,4,3,2,1] 이 출력되어야 한다

 

class Solution {
    public int[] solution(long n) {
        String str = n + "";
        int[] answer = new int[str.length()];
        int count = 0;
        while (n > 0) {
            answer[count] = (int)n%10;
            n /= 10;
            count++;
        }
        return answer;
    }
}

 

처음에 보고 이전에 비슷한 문제처럼 나머지 값으로 받아버리면 되지 않을까? 라고 생각해서 코드를 짰지만

분명 코드를 제대로 한 것 같은데 무엇이 문제일까? ㅠㅠ 자꾸 몇가지 테스트 중에 틀렸다고 한다

 

하도 안풀려서 그냥 초기화 하고 다시 생각해 보기로 했다

터가 안 좋은 걸 수 있으니(?) 인텔리제이를 꺼내서 코드를 작성하고 검색도 해봤다

 

이번에 사용한 방법은 long 타입을 받아오니 형변환 하지 말고 저걸 차라리 이용해보자 결심했다

 

Long.toString(n).length();

 

이 코드는 long 타입을 문자열로 바꿔서 그 길이를 반환해준다!

차라리 이 코드를 사용해서 길이를 int 로 받아서 반복문을 돌리려고 한다

 

class Solution {
    public int[] solution(long n) {
        int length = Long.toString(n).length();
        int[] answer = new int[length];
        
        for (int i = 0; i < length; i++) {
            answer[i] = (int) (n % 10);
            n /= 10;
        }
        return answer;
    }
}

 

변경된 코드!

 

범위를 확실하게 지정할 수 있어서 이번엔 for 문을 사용해봤다

하지만 여기서 또 달라진 코드를 알 수 있을 것이다...

 

(int) n % 10 과 (int) (n % 10) 의 차이를!!!

 

그렇다 사실 위의 코드도 ( ) 묶음 처리만 잘해줬다면 정답이었던 것이다..!!! 😱

이게 바로 어 다르고 아 다르다는 건가..?

 

그래도 새로운 코드도 알게 되었고..

연산의 묶음 처리도 중요하다는 것을 다시 한번 알게 되었다

TIL 작성하는 도중에 알게 되었다 ㅋㅋㅋㅋㅋ...

어케 해결 해야할지 모르겠다고 적으려고 왔는데 자체해결 해버렸다

 

개인과제 Level 2

 

아침에 코드카타 하고 바로 Level 2 에 도전해봤다

 

예외 처리, 계산 기능 분리까진 어려움 없이 했던 것 같다

어제 4주차 강의를 들었던 게 다행히 도움이 되었다

 

문제는 2-3 Getter, Setter 부분이다

 

캡슐화 => private 쓰면 되지!

Getter, Setter 구현 => 구현 했다! ...어라 근데 이걸 어떻게 사용하지?

public ArrayList<Integer> getList() {
    return numberList;
}
public void setList(ArrayList<Integer> numberList) {
    this.numberList = numberList;
}

 

분명 굉장히 잘한 것 같은데?

어떻게 사용해야하지?? 에서 막혀버렸다

 

getter 와 setter 에 대한 지식이 모자란 탓인가

get 은 가져오는 거고.. set 은 새로 추가하거나 수정할 때 사용하는 거고..

 

result = calc.calculate(operator,firstNum,secondNum);
System.out.println("결과: " + result);

// remove 를 입력 받았을 때 수행
if (inputRemove.equals("remove")) {
    // calc.numberList.remove(0);
    calc.delList();
}

// inquiry 를 입력 받았을 때 수행
if (intQuiry.equals("inquiry")) {
    // for (int i : calc.numberList) {
    for (int i : calc.getList()) {
        System.out.print(i + " ");
    }

 

주석 처리된 부분이 캡슐화 하기 전 코드이다

이렇게 작성했는데 이것도 간접이 아니라 직접으로 가져오게 되는 걸까?

 

고민을 조금 해봤다

주석 처리된 내용은 생성된 리스트에서 바로 수행하고 있고

그 아래 캡슐화 후 코드는 Calculator 클래스 내부의 메서드만 가져와서 실행되고 있다

그럼 캡슐화가 된거 아닐까!? 하고 다음 문제로 넘어갔다 ㅎㅎ

 

너무 오래 붙잡고 있어도 시간만 낭비고

이 코드를 작성하고 있었을 쯤에는 제출 시간이 다가와서 할 수 있는 만큼 다하고 제출하고 싶었다!

그 이후에는 정답 코드와 해설 영상도 올라왔다

 

Level 1 내용부터 천천히 보면서 내가 쓴 코드와 비교해봤다

다행히 출제자의 의도에 맞게 코드를 잘 작성한 것 같았다

 

그리고 대망의 getter 와 setter 부분 영상을 봤는데

조금 다르긴 하지만!? 내부 동작으로 해둔 것 만큼은 같은 거 아닐까 라고 생각한다

// remove 를 입력 받았을 때 수행
if (inputRemove.equals("remove")) {
    // calc.numberList.remove(0);
    calc.getList().remove(0);
}

 

요로케 원래 배열 이름이 들어갔던 부분에 getter 를 불러오면 되는 거였다!

생각보다 간단한 문제여서 신기했다

 

 

회고

 

제출 시간까지 Level 2 를 다 풀지 못하고 제출하게 되었지만

그래도 2-6 까지는 열심히 풀어서 제출했다 반이상은 할 수 있었다!!

 

그리고 제출시간은 지났지만 해설 영상이 길어서 업로드 되는 걸 기다리는 동안

못 풀었던 2-7도 혼자서 도전해봤다 !!

풀던 도중에 어려워서 결국엔 영상을 기다렸지만 😅

 

문제 해결할 때의 그 느낌은 언제나 재밌다

물론 해결할 때까지의 스트레스는..어쩔 수 없지만!

화이팅❗

'개발 일지 > TIL' 카테고리의 다른 글

[ #15 ] TIL  (0) 2024.05.07
[ #14 ] TIL  (0) 2024.05.02
[ #12 ] TIL (개인과제 Level 1)  (1) 2024.04.30
[ #11 ] TIL  (0) 2024.04.30
[ #10 ] TIL  (0) 2024.04.27