스펙도 쌓니/코테 막푸니

[해커랭크] 코딩테스트 문제 시도 [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");

 

좋은 코드를 얻었다 :) 

 

시간복잡도 및 공간복잡도 비교 

 

 

 

놓친 부분과 배운 개념

 

* 우선순위 && > || *