+들어가며
오늘은 교수님이 출제하신 문제들을 몇개 풀어보며 이제껏 배운 내용을 얼마나 내가 알고 있고 또 그것을 얼마나 문제에 맞게 적재적소에 사용하여 해결할 수 있는지 테스트를 했다. 결과는 갠적으로 좀 참혹했다. 물론 내가 게으른 성격이라 복습을 소홀히하고 수업이 종료되면 집에서 쉬고 싶다는 생각 뿐이라 이정도의 가벼운 학습으론 어느정도 깨질 것은 예상하고 있었지만. 문법을 익히는거랑 문제를 풀고 직접 프로그램을 작성하는 것은 엄청 커다란 간극이 있다는 것을 체감한 것 같다. 1학년 때엔 과제도 그리 많지 않았고 문제도 다소 간단해서 몇 줄 풀다보면 해결되고 그러다보니 설계를 하고 들어가기보단 느낌적으로 그때그때 필요한 것을 맞춰가는 식의 풀이를 자주 했었는데 요즘은 그런 방식에 대한 한계를 점점 크게 느끼는 것 같다. 이번 문제 풀이를 하며 그런 부분을 반성하는 시간을 가져야 할 것 같다.
+문제 풀이
모든 문제를 해설하기보단 몇몇개의 중요하거나 내가 크게 막혀 아예 손도 못댄 것들을 정리하고 이후 내가 필요할 때 이 글을 읽으며 복기하려고한다.

이건 어려운건 아니고 갠적으로 기억하고 싶은 코드인데 문제를 제출한 뒤엔 볼 수 없어 코드만 가지고 설명을 해보자면 정수n을 입력받고 이 n이 홀수일 때와 짝수일 때 다른 계산 값을 출력하는 문제로 기억한다. 이 코드를 가져온건 짝수인 경우 2로 나눈 나머지를 출력해야하는데 짝수는 2로 나눈 나머지가 없기에 바로 0을 출력하는 형식으로 작성한 것처럼 문제가 써준대로 그대로 코드를 구성하는 것이 아닌 불필요한 계산이나 코드를 줄일 수 있다면 그 방식을 한번 생각해서 작성할 수 있다는 것을 항상 상기하고 싶어서이다.

이 문제는 정삼각형을 대문자 알파벳으로 그리는 것이 목표인데 정삼각형의 경우 예전에 실습했던 것과 같이 중첩 반복문으로 구성했고 이번엔 공백대신 "."으로 빈 칸을 채우는 부분을 신경썼다. 또 대문자를 가지고 있는 c를 하나 씩 증가 시키면 아스키코드 값이 증가하며 다른 알파벳으로 변화하는 부분을 처음엔 생각하지 못하다 교수님의 설명을 듣고 구현한 기억이 있다. 또 아스키코드 값이 알파벳의 범주를 벗어나지 않도록 "Z"의 코드값보다 c의 값이 큰지 항상 확인하는 코드가 핵심이라고 생각하고 이러한 도형을 그리는 문제는 프린트문의 종류에 항상 주의를 기울일 필요가 있는 것 같다.

배열의 평균 구하는 문제이다. 반복문으로 배열에 있는 값들을 하나하나 total에 더해주고 배열의 길이로 나눠서 평균을 계산하는 프로그램인데 이 문제에서 복기할 것은 배열의 길이도 int형 total도 int 형이라 그대로 나눠서 ans에 값을 넘겨주면 소숫점 밑의 값들은 소실되어 프로그램이 원하는 값과 달라져서 나눌 때 double을 명시해야한다는 것이다.

이 문제는 배열로 전달 받은 좌석을 예약하는 프로그램이다. 내가 기억하기론 예약하기 파트만 작성하면 된걸로 알고 있어서 그 파트를 중점으로 설명하자면 우선 메인에서 예약이 성공 할 경우 result가 예약하기 함수에서 return한 0을 받아 사용자에게 좌석을 보여주는 방식으로 구성되어 있으니 void가 아니라 리턴할 변수형인 int로 함수를 작성하고 함수에 필요한 2차원 배열 , x좌표, y좌표를 받는 형식으로 함수의 틀을 잡았다. 이후 좌석 범주에서 벗어나는 좌표 값을 입력 받으면 out 출력 후 -1을 return, 맞는 값을 입력했으면 해당 좌표에 1을 넣어주고 0을 return하는 형태로 작성했는데 이때도 역시 인덱스 값의 차이로 값을 하나 내려주는 것이 포인트라 이 부분을 항상 짚고 넘어가야 할 것 같다.

개인적으로 가장 어려웠던 문제인데 내가 평소에 하던거 처럼 계획을 잡지 않고 무작정 작성해보는 방식에 정말 맞지 않은 문제이기도 하고 이미지를 회전했을때 어떤 방식으로 좌표가 변화하는지 그 규칙을 쉽게 찾지 못해서 더 난감했었다. 2차원 배열이라 중첩 for문으로 원 배열인 a의 크기를 기준으로 값을 가져오는 것까진 구성했지만 그 후를 잡는데에 많이 어려움을 겪었는데 직접 그려보고 좌표를 하나하나 따져보니 어느정도 감이 와서 작성할 수 있었다. 또 여기서도 b에게 전달할 값의 좌표를 설정할때 i값이 0일때를 상정하지 못하고 그냥 a.length - i 로 작성했다 콘솔이 나를 혼내는 상황을 여러번 당했는데 이 부분은 계속 반복해서 강조하고 있지만 반드시 기억해야 할것이다.
+마치며
다이아몬드도 원석일땐 그냥 돌멩이나 다름 없이 생겼다. 그것을 깎고 다듬고 또 깎는 과정에서 자신의 본모습을 찾고 비로소 빛나는 보석이 되어 사회에서 큰 가치를 지닌 물건으로 바뀌는 것이다. 난 내가 보석이라고 생각하진 않지만 적어도 자신을 다듬고 깎아 진짜 내 진가가 무엇일까에 대한 질문에 답을 해 나가는 과정 정도는 반드시 겪어야 한다고 생각하고 그동안 태만했던 나를 조금은 모질게 대해야한다고 느꼈다.
'JAVA' 카테고리의 다른 글
| 6주차 객체 지향 프로그래밍 체험 (0) | 2026.04.14 |
|---|---|
| 4주차 배열 (0) | 2026.03.29 |
| 3주차 비교문과 반복문 (0) | 2026.03.22 |
| 2주차 변수와 자료형 (0) | 2026.03.15 |