관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

반복문과 배열 그리고 예외 처리 27 - 연습문제 실습편 풀어보기 3 : 11~13번 문제 본문

프로그래밍 언어/자바

반복문과 배열 그리고 예외 처리 27 - 연습문제 실습편 풀어보기 3 : 11~13번 문제

huenuri 2024. 8. 15. 10:30

이제 나머지 3번째 연습문제 풀이를 시작해 본다. 어려운 문제들만 남아서 과연 할 수 있을지 걱정이 되지만 그래도 이 문제 또한 2시간 안에 풀어보는 것이 목표이다. 

그런 다음에 빨리 클래스 학습으로 넘어가고 싶다. 다 하고 나서 2~3시간 정도 휴식시간을 주려고 한다. 이런 보상이 있어야 잘할 수 있다는 걸 요즘 알게 되었다.


 

 

 

 

문제 11번

명령행인자로 매개변수를 처리하고 평균을 구하라.

 

 

 

콘솔창에서 그냥 실행하면 이런 문구가 뜬다. 이제 어제 배웠던 대로 매개변수 값을 입력해 보겠다.

 


 

 

 

매개변수로 2 3 4를 입력했더니 3이 나왔다. 여기서 정수가 아닌 실수를 입력하면 어떻게 될까?


 

 

 

 

 

 

스레드 오류가 떴다. 왜냐하면 값을 모두 int로 선언했기 때문이다. 이제 다음문제도 풀어보기로 하자. 이 문제는 원본 파일을 붙여넣었기에 스스로 코드를 짜보지는 않았다.

어떻게 하는지 잘 몰랐기 때문이다. 하지만 다음 문제는 직접 코드를 작성해보려고 한다.


 

 

 

 

문제 12번

명령행 인자 중에서 정수 만을 골라 합을 구하라. 

 

 

 

이렇게 코드를 짜보았다. 여기서 foreach 문이 조금 이해가 되지 않아서 추가 학습을 진행해 보았다.

 

  • String part : parts 배열의 각 요소를 저장할 변수
  • : parts : parts 배열에서 요소를 하나씩 꺼내 part 변수에 저장

즉, 이 코드는 parts 배열의 각 요소를 순차적으로 읽어 part 변수에 할당하고, 그 part를 사용하여 루프 내의 작업을 수행한다.

 

같은 작업을 일반적인 for 루프로 구현하기

향상된 for-each 루프 대신 일반적인 for 루프를 사용하여 동일한 작업을 수행할 수 있다. 일반적인 for 루프에서는 인덱스를 사용하여 배열의 각 요소에 접근한다.

for(int i = 0; i < parts.length; i++) {
    String part = parts[i];
    try {
        // 문자열이 정수로 변환될 수 있으면 변환하여 더하기
        int num = Integer.parseInt(part);
        sum += num;
    } catch (NumberFormatException e) {
        // 변환할 수 없으면 (즉, 정수가 아니면) 무시하고 넘어감
    }
}

 

for문을 사용하면 좀 더 복잡하다는 단점이 있다. foreach문을 잘 사용한다면 파이썬에서도 이 내용이 쉽게 이해될 것 같다. foreach 문을 잘 모르게 때문에 파이썬이 어렵게 느껴지는 지도 모르겠다. 파이썬은 대부분 리스트가 많이 사용되기 때문이다.


 

 

 

코드를 수정해 보았다. catch 문에서 경고 문장을 하나 작성했더니 이 문장이 2번이나 출력이 되었다. 그냥 무시하고 넘어가는 것이 더 좋을 것 같았다.

 

 

이 문제는 매개변수로 입력을 받으면 이상하게도 아무것도 출력이 되지 않았다. 아마도 try catch 문이 들어있어서 그런 것 같다. 그 이유는 다음과 같았다.

  1. Run Configurations에서 매개변수를 정확하게 입력했는지
  2. main(String[] args)에서 전달된 매개변수를 처리하는 코드가 있는지
  3. 프로그램이 매개변수를 처리한 후, 콘솔에 결과를 출력하는지 확인해야 한다.

 

 

 

 

문제 13번

반복문을 이용하여 369 게임에서 박수를 쳐야 하는 경우를 순서대로 화면에 출력하기. 1부터 시작하며 99까지만 한다.

이 문제부터는 너무 어려워서 혼자서 코드를 작성하는 건 못하겠고 정답을 참고하며 풀어보겠다.

 

메서드 없이 사용할 때

 

temp는 num의 복사본으로 현재 숫자를 복사한다. 

 

temp 변수

  • 목적: 원래의 num 값을 변경하지 않고도 각 자리의 숫자를 추출하고 분석하기 위해 사용된다.
  • 역할: temp는 num의 복사본으로 사용되어, num의 각 자리 숫자를 검사하는 동안 원본 num을 보존할 수 있다. 이를 통해 숫자를 추출하고 분석한 후에도 원본 값 num은 변하지 않는다.

숫자에서 3, 6, 9의 개수 세기:

  • temp 변수에 현재 숫자를 복사한다.
  • while 루프를 사용하여 temp의 각 자리에서 3, 6, 9를 검사한다.
  • temp % 10을 사용하여 일의 자리 숫자를 추출하고, 3, 6, 9와 비교한다.
  • 숫자를 10으로 나누어 다음 자리로 이동합니다.

이런 식으로 만들어볼 수 있다.


 

 

 

메서드를 사용할 때

함수를 사용하면 코드의 재사용성과 가독성이 높아지기에 이런 방식으로도 사용할 수 있다.

 

 

 

이렇게 99까지 출력되는 것은 모두 같다. 홀수 번호라서 연습문제 해답을 제공하고 있어 살펴보았는데 코드는 간단했지만 중요한 내용이 많이 빠져있어 이 코드를 익혀보았다. 이 문제를 혼자서도 풀 수 있어야 하지만 지금은 많이 어렵다.


 

 

 

 

학습을 마치고

나머지 문제 3문제는 코드도 길고 굉장히 어려워서 우선 여기까지 마무리하고 남은 문제는 다음 포스트에서 풀어보려고 한다. 이제 1시간 안에 나머지 3문제를 다 풀고 빨리 쉬고 싶다.

공부를 하는 게 내게 정말 어려운 일이지만 그래도 여기까지 잘 온 것 같다. 지난 1년이 다 되도록 개발 공부를 포기하지 않고 하고 있는 걸 보면 말이다.