*오늘의 개고생 문제
isOdd
입력받은 수가 홀수면 true, 짝수면 false를 리턴하기
조건1. while문을 사용해야 한다. for문 사용은 금지된다.
조건2. /와 % 연산자 사용은 금지된다.
Pair)
public boolean isOdd(int num) {
int i = 0;
boolean odd = true;
if (num<0) {
num *= -1;
}
while(i<=num){
odd = !odd;
i++;
}
if(odd){
return true;
}
return false;
}
일단 이 문제에만 시간 거의 50분 썼다. 라고 생각하고 코플릿 제출 시간 보는데 정확히 36분 썼다. 과장이 좀 심한 편 ㅎㅎㅎ 아무튼 페어분이랑 같이 보다가 조건 보는 순간부터 동시에 멍때렸다. 홀수를? 판별을? 하는데? %를? 쓰지? 말라고요? /도요? 완전 대혼란 ㅠ 그럼 +, -, *만 써야 하는데 도대체 어떻게 할 수 있나요.....? 하면서 같이 10분쯤 고민해보다가 결국 구글의 도움을 받았다.
문제 푸는 데 제일 많이 참고한 reference. 근데 또 우리가 풀어야 하는 문제 조건은 while문을 사용해야 하는 거라 바로 적용 못하고 또 헤맸다. 아직 while문이 낯선 코딩 초보라구요 😭 살려줍쇼..... 아무튼 풀이를 시작하자면
int i = 0;
boolean odd = true;
while(i<=num){
odd = !odd;
i++;
}
일단 처음에 int i=0과 odd 변수를 선언하고 true 값을 주는 데서 시작했다. 그리고 while문에서 i를 1씩 증가시켜가면서 num과 같아질 때까지 odd = !odd를 넣어주는 연산을 계속한다. 이 연산은 i=0에서 시작하므로 while문을 통해 계산될 때 num이 짝수라면 반복 연산을 통해 odd값으로 false를, num이 홀수라면 odd값으로 true를 반환한다. 엥 근데 쓰면서 다시 코드 보니까 if문 필요 없었다........................ 그냥 바로 return odd;로 끝냈으면 됐는뎁쇼? 하
아무튼 처음엔 코드를 이렇게만 작성하고 다 됐다! 했는데 결과는 오답이었다 ^.^ 한숨 쉬면서 다시 보니까 i=0으로 초기화를 해주었는데 만약 num으로 음수값이 들어온다면 while문 조건에 부합하지 않고 그대로 odd의 초기값인 true를 반환하는 문제가 있었다.
if(num<0){
num *= -1;
}
그래서 num에 -1을 곱해 양수로 만들어 주는 연산을 while문 앞에 추가했고 풀이에 성공했다.
개선 방안
1. 일단 제일 간단한 것부터 시작해보자면 작성한 처음 if문은
if(num<0) {
num = -num;
}
으로 작성할 수 있다. 사실 성능에 크게 차이가 있는지는 모르겠지만 더 간단해 보인다,,,,, 아님 말고여,, 그리고 오늘 알았는데 if문에서 실행할 문장이 하나뿐이라면 {} 블록을 생략할 수도 있다!
if(num<0) num = -num;
따라서 위의 코드는 이렇게도 작성 가능하다.
2. 위에서도 말했지만 마지막 if문 필요 없었다....... 그냥 while문 밖에서 바로 odd 값을 리턴해주면 됐다.
return odd;
다른 풀이 방안
while문 조건을 다르게 주어 풀 수도 있다.
while(num>0){
if(num==1){
return true;
}
num -= 2;
}
return false;
while문으로 들어오는 num의 값이 1이 될 때까지 2씩 빼주는 연산을 계속하다가 num==1(즉, 홀수)이 되는 순간 true 값을 리턴한다. 나머지의 경우(num이 짝수인 경우) false를 리턴하게 되는 구조.
'diary > codestates (be39)' 카테고리의 다른 글
05/06/22 [pair: java: 반복문: 3] 소수를 판별하는 여러가지 방법 (0) | 2022.05.07 |
---|---|
05/06/22 [pair: java: 반복문: 2] if-elseif-for-if-.... (0) | 2022.05.07 |
05/06/22 [pair: java: 조건문] there is jam (0) | 2022.05.06 |
05/04/22 [2/2] [pair: java: 변수, 타입, 문자열] 갑분 메서드요? (0) | 2022.05.05 |
05/04/22 [1/2] [Java] 자바 자바 자바 기초 떼기 (0) | 2022.05.04 |