프로그래머스에 있던 작은 실습 문제를 내가 아는 것을 총 동원해서 풀어보았다.
쉬운 문제지만 그 문제를 처음 접했을 당시에는 문제에서 요구하는 숫자의 범위같은 조건을 맞추지도 못했고
코드의 수준도 겨우 문제를 통과할 수준만 어거지로 맞췄을 뿐 구멍이 많았었다.
물론 지금 내가 제대로 잘 알지도 못한채로 그냥 배운것들 생각나는대로 해봤는데 실행은 제대로 되긴 하지만 이게 얼마만큼 완성도가 높은지는 잘 모르겠음.
문제를 풀면서 느낀 점
1) 실제로 내가 코드를 작성하기 위해선 문제를 해결할 아이디어(이런걸 알고리즘이라고 하나?)부터 빨리 완성해야 한다.
이게 제일 중요한 것 같다. 이것만 잘 할 수 있으면 코드 작성하는건 그냥 기술의 숙련도 문제라 어찌됐건 해결하는게 시간문제가 된다.
2. 이 아이디어를 실현시켜줄 코드를 되도록 빠르게 작성할 줄 알아야 한다.(숙련도를 올려야 한다)
3. 작성하면서 생길 수 있는 오류들을 어떻게 처리할 것인지(얼마나 코드를 안정화 시킬 수 있는지)도 생각보다 중요한듯 싶다. 특히 나는 지금 초보단계라 코드 이곳저곳에 런타임 오류가 많을 수 밖에 없는 것 같다.
import javax.swing.JOptionPane;
public class Quiz { // 1부터 3000 사이의 자연수를 입력했을 때, 그 수의 약수를 모두 더해주는 프로그램 만들기
public static int solution(int n) { // n을 받아서 n의 약수를 모두 더해주는 메소드
int answer=0;
for (int i=1; i<=n; i++) {
if (n%i == 0) {
answer = answer + i;
}
}
return answer;
}
public static void main(String[] args) {
A:while(true) { // catch문에서 다시 돌아오기 위해 이중반복문을 썼음
try {
while(true) { // 무한 반복문을 사용해서, 프로그램을 켰을 때 계속 끄지 않고 쓸 수 있도록 했음
String a = JOptionPane.showInputDialog("1과 3000 사이의 자연수를 입력하세요.");
if (a==null) { // cancel 버튼을 누르면 프로그램이 종료되도록 했음
break A;
}
int input = Integer.parseInt(a);
if (input<=0 || input>3000) {
System.out.println("잘못된 수를 입력하셨습니다. 다시 입력하세요.");
continue; // 범위 밖의 숫자를 입력하면 다시 숫자를 입력받도록 했음
}
System.out.println(input+"의 약수의 총 합은 "+ Quiz.solution(input) +"입니다."); // 결과 출력
}
} catch (NumberFormatException e) {
System.out.println("1과 3000 사이의 자연수를 입력하세요.");
continue; // 숫자외 기호나 문자열이 들어가면 다시 숫자를 입력받도록 하였음
}
} System.out.println("프로그램을 종료합니다.");
}
}
진짜 작은 문제 같은데 이거 하나 작성하고 오류랑 예외 잡으려고 이곳 저곳 고쳐보는데 이렇게 시간이 많이 들어갈 줄 몰랐다.
갈 길이 멀다는 것을 다시 느꼈음
'간단 실습' 카테고리의 다른 글
220317 Java - 토이 프로그램 (0) | 2022.03.18 |
---|---|
220311 Java - Chapter 7 실습 (0) | 2022.03.12 |