ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 스킬체크 레벨1 풀어보기
    Algorithm 2022. 4. 10. 23:36

     

    알고리즘 문제를 틈틈히 풀다가, 프로그래머스 사이트에 이런게 있어서 도전해봤다.

    물론 나는 입문 1주일차 조렙중의 조렙이기 때문에 당연히 레벨1로ㅎㅎ..

     

    두 문제를 40분 안에 푸는 건데 시간 제한은 넉넉했다.


    1. 배열에서 연속된 값 제거하기

    정수 배열이 주어지고, 연속된 숫자가 있으면 제거하라는 문제였다.

    처음엔 그냥 중복제거하란거네~~ set쓰면 되겠네 하고 풀었다가 빨간줄의 쓴맛을 맛보았다...

    다시보니까 연속된 숫자만 제거하란 뜻이었고 연속되지만 않으면 중복이 되든 상관하지 않는단 뜻이었다.

     

    import java.util.ArrayList;
    
    
    public class Solution {
    	
    	
        public int[] solution(int []arr) {
            
            ArrayList<Integer> list = new ArrayList<>();
            
            list.add(arr[0]);
            
            for(int i=0; i<arr.length - 1; i++) {
            	
            	if(arr[i] != arr[i+1]) {
            		list.add(arr[i+1]);
            	} // if
            	
            } // for
            
            int[] answer = new int[list.size()];
            
            for(int i=0; i<answer.length; i++) {
            	answer[i] = list.get(i);
            } // for
            
            return answer;
        } // solution
    } // end class

     

    Arraylist를 사용해서 배열의 바로 다음 요소와 비교해 다를 때만 list에 add해 주는 방식으로 풀었다.

    왜 Arraylist를 사용했냐 하면.. 기본타입 배열은 크기를 미리 정해줘야하는데 이 문제는 크기를 예상할 수 없어서였다.

    그냥 생각난게 이 방법뿐이었다...

     

    반복문을 돌리기 이전에 가장 첫번째 값은 필수로 있어야하니 0번째 인덱스 값을 추가해주고,

    메소드의 return타입이 기본타입배열로 고정이라 Arraylist에 있던 값을 꺼내 다시 answer에 넣어줬다.

     

    뭔가 너무 이상하게 푼 것 같지만 딱히 더 생각나는 것도 없다ㅋㅋㅎㅎ!

     


    2. a 와 b 사이의 수 모두 더하기

    정수 a, b가 주어지면 그 사이의 정수를 모두 더한값을 출력하는 문제.

    1번에서 오... 했는데 2번은 너무 쉬워서 오... 했다.

    약간의 함정이 있다면 a가 b보다 클 때도 있다는 것.

     

    class Solution {
    	
    	
        public long solution(int a, int b) {
            long answer = 0;
            
            if(a > b) {
            	a = a + b;
            	b = a - b;
            	a = a - b;
            } // if
            
            for(int i = a; i<= b; i++) {
            	answer += i;
            } // for
             
            return answer;
        } // solution
    } // end class

    a가 b보다 큰 경우 a랑 b 값을 바꿔준 다음 합을 구했다.

     


    시간제한을 두고 문제를 푼 적은 처음인데, 여기서 느낀 점이 꽤 많다.

     

    하나는 화면 밑에서 흐르는 시간이 생각보다 매우 거슬린다는 것.

    오늘은 레벨1이었지만 훗날 코딩테스트를 보게될 경우,

    어려운 문제 앞에서 가차없이 흐르는 시간이 주는 압박감은 굉장할 것 같다...

    나중에 알고리즘에 익숙해지면 시간을 정해놓고 푸는 연습을 해야겠다.

     

    두번째는 생각에 제약이 걸린다는 것.

    보통 한 문제를 가지고 더 나은 방법이 있다면 수정하거나, 완전히 새로 작성하기도 했었는데,

    시간제한이 있다보니 내가 처음에 선택한 방법대로 문제를 풀게된다.

     

    이런 환경에서 효율적으로 문제를 푸는 건 오로지 연습밖에 없다는 생각이 들었다.

    레벨 3를 풀 수 있는 날이 오기를...👊

    'Algorithm' 카테고리의 다른 글

    [백준] 8979 올림픽 - 자바(Java)  (1) 2022.08.03
    프로그래머스 스킬체크 레벨2  (0) 2022.05.08

    댓글

Designed by Tistory.