개발지식 먹는 하마 님의 블로그
[내일배움캠프 12일차] _ 시소 짝꿍 풀이, GUI 계산기 입력 제한 구현 본문
코드 카타 시간에 푼 알고리즘 중, 조금 난이도가 있던 lv2 문제의 풀이를 정리하였다.
GUI 계산기에서 입력을 받을 때, 입력의 제한 부분과 이를 구현한 내용에 대해 정리하였다.
📚 학습 내용 정리
- 시소 짝꿍 문제
시소 짝꿍 문제를 풀이할 때, 고민한 내용을 정리하였다.
https://devhippo.tistory.com/80
프로그래머스 lv2 - 시소 짝꿍
✏️ 문제 풀이 - 최대공약수로 비율을 구하기두 Weight의 최대공약수를 구한다.최대공약수가 없는 경우 넘어간다.최대공약수가 있는 경우 기존 무게에 각각의 비율을 적용해 일치하는 경우의
devhippo.tistory.com
⏳ 학습하며 겪었던 문제점
< 까다로운 입력받기 >
콘솔창을 사용해 구현한 계산기에서는 정수를 요청한 후 정수를 입력받고,
연산 기호를 요청한 후 그에 따른 문자를 입력받은 후 이를 판별해 연산을 하면 끝이었다.그런데 GUI로 구현한 계산기는 따로따로 입력을 받지 않고
전체적인 수식을 입력받은 후 계산을 하도록 구현했다.
따라서, 버튼을 눌러 입력을 받을 때 고려해야 할 점이 매우 많았다.
1) 실수형을 나타내는 온점
- 한 숫자에서 온점이 2개 이상 사용되면 안된다. ex) 0.123.456 불가
boolean형의 isDouble 변수를 선언하여, 실수형을 입력할 수 있는 상태의 여부를 구분했다.
- 빈 텍스트에 온점이 입력된 경우, 앞에 0을 삽입해주어야 한다.
if(result.isEmpty()){ //아무것도 입력되지 않은 상황이라면
result = result + "0" + command; //앞에 0을 생성한 후 온점 추가
}
- 온점을 사용했으나 이 이후 아무 숫자도 입력되지 않은 경우, 뒤에 0을 삽입해주어야 한다.
별도의 메서드를 생성한 후 연산 기호 또는 괄호 입력 시 이를 호출해, 해당 상황을 검사 및 조치를 취하도록 했다.
private String isEndDot(String text){
String result = text;
if(!isDouble){ //이미 온점이 사용된 상태이고
char lastChar = text.charAt(text.length()-1);
if(lastChar == '.'){ //온점 뒤에 숫자가 입력되지 않았다면
result = result + "0";
}
}
return result;
}
2) 괄호
- 여는 괄호가 존재해야 닫는 괄호도 입력될 수 있다.
boolean형의 isParentheses 변수를 선언하여, 괄호가 열려있는지의 여부를 구분했다.
- 여는 괄호가 사용된 만큼 닫는 괄호도 사용되어야 한다.
정수형의 numParentheses 변수를 선언하여, 여는 괄호가 사용된 횟수를 반영했다.
- 여는 괄호 앞 문자가 숫자라면, 생략된 곱셈 기호를 추가한다.
char lastChar = result.charAt(result.length()-1);
if (Character.isDigit(lastChar)) { //여는 괄호의 바로 앞 문자가 숫자라면
result = result + "*("; //곱하기 연산자를 여는 괄호 앞에 추가
isParentheses = true; //괄호가 열려 있다고 설정
numParentheses++; //닫아야 하는 괄호의 개수 1 증가
isDouble = true;
}
- 닫는 괄호 뒤에 바로 숫자가 올 수 없다.
if(lastChar == ')'){ //닫는 괄호로 끝나 있는 경우
result = result + ""; //숫자 입력 불가
}
3) BackSpace
- 온점을 지운 경우, 실수형 입력 가능 상태로 변경해주어야 한다.
- 괄호 열림 여부, 개수를 변경해주어야 한다.
4) = 으로 입력을 마무리 할 때
- 온점 마무리 여부, 온점을 사용했으나 이후 아무 숫자도 입력되지 않은 경우 뒤에 0을 삽입해주어야 한다.
- 괄호가 다 닫히지 않은 경우, 남은 횟수 만큼 닫아주어야 한다.
for(int i = numParentheses; i > 0; i--){
result = inputCloseParentheses(result);
}
혹시 놓친 부분이 없는지 계속 직접 테스트 해보면서 입력 제한을 추가했다.
실수형을 지운 후, 앞서 입력된 실수형에 대해서 온점이 한 번더 입력되지 않도록 해줘야 하지만
이 부분 까지는 처리하지 못했다.
예시)
지우기 전 입력
: 0.2 + 0.5
지운 후의 상태 가정
: 0.2
이 때 제한하지 못한 입력 상황
: 0.2.
⭐ 내일 학습할 것
과제 제출 마감 전까지, 우선순위에 따라 연산하고 결과를 보여주는 부분까지는 구현해 낼 계획이다.
14시 과제 해설 특강 이후에는 코드카타를 최대한 풀어볼 것이다.
'내일배움캠프 (CS25)' 카테고리의 다른 글
[내일배움캠프 14일차] _ 수학적으로 더 간편하게 풀기, Git 커밋 컨벤션 (0) | 2025.03.07 |
---|---|
[내일배움캠프 13일차] _ GUI 계산기 구현, 트러블 슈팅 (0) | 2025.03.06 |
[내일배움캠프 11일차] _ 계산기 lv3 구현, 트러블 슈팅 (1) | 2025.03.04 |
[내일배움캠프 10일차] _ 문자열, Pattern&Matcher, 계산기 lv3 구현 (0) | 2025.02.28 |
[내일배움캠프 9일차] _ 탐욕법, 계산기 lv2 구현, Git 오류 (0) | 2025.02.27 |