스펙도 쌓니/코테 막푸니
[해커랭크] 코딩테스트 문제 시도 [if else] [10 포인트]
군포망나니
2024. 11. 5. 22:49
[해커랭크] 코딩테스트 문제 시도 [nn번] [해결 =? O/X]
"풀이" 가 아닌 "시도" 를 추구합니다.

풀이 환경
언어 버전 : Java8
사용 패키지 : x
문제 요약
odd / 짝수고 n 이 6 ~20 범위 안이면 => "유별나" 출력
짝수고 n 이 2 ~ 5 / 짝수고 n 이 20 넘어가면 => "유별나지 않아" 출력
나의 코드 및 나의 해설
import 생략
public class Solution {
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int N = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
scanner.close();
if( N % 2 != 0){
System.out.println("Weird");
} else if ( (N % 2 == 0) && (N >= 2 || N <=5) || (N % 2 == 0) && (N > 20) ) {
System.out.println("Not Weird");
} else if (N % 2 == 0 && N > 6 && N <= 20){
System.out.println("Weird");
} else {
System.out.println("");
}
}
}
첫 코드이다. 사실 || 이거를 or 로 하니까 에러 나더라 (Cannot invoke or(boolean) on the primitive type boolean)
일단 돌려본 결과 테스트 케이스 8개 중 하나가 fail
흠... 테스트 코드 볼라면 5point 필요하댄다.
일단 || 이거 때문에 한 것 같아서 바꿔보자.
import 생략
public class Solution {
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int N = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
scanner.close();
if( N % 2 != 0){
System.out.println("Weird");
} else if ( (N % 2 == 0 && N >= 2 && N <=5) ) {
System.out.println("Not Weird");
} else if (N % 2 == 0 && N >= 6 && N <= 20){
System.out.println("Weird");
} else {
System.out.println("Not Weird");
}
}
}
정답. 흠... 아 !
아.. "20" 부분에서 문제인 줄 알았는데 (N >= 2 || N <=5) || 이렇게 하면 20도 포함이 된다. 먼저 실행되기 때문에 실패
(N >= 2 && N <=5) 요렇게 해야 N 이 범위 안에 잘 포함됨 ;)
문제 해답 풀이와 비교
일단 위 코드의 문제를 말하고 싶다.
첫 번째는 N % 2 == 0 이 반복적으로 나온다.
두 번째는 Weird 와 Not Weird 가 두 번씩 나오는데, 한 데 묶고 싶다.
세 번째, else if 가 난무하다.
if(N % 2 ==0 &&(N>1 && N<6 || N>20) ){
System.out.println("Not Weird");
}
else System.out.println("Weird");
좋은 코드를 얻었다 :)
시간복잡도 및 공간복잡도 비교
놓친 부분과 배운 개념
* 우선순위 && > || *