복습 1

2020-01-18

복습 1 (1월 3주차)

  1. 최소 공배수

    두가지만 생각하기 1)m%n==0 이라는 뜻은 n이 m으로 나누어 진다는 것 2)아닐때는 계속 계산해주기


  2. 10진수 n을 m진수로 만들기

    몫이 m보다 작을때까지 나누기 & 기저에서부터 출력하는지 아닌지 확인해주기

    	static public void sol(int n , int m) {
    		//숫자 n과 m진수
    		if(n<m) {
    			System.out.print(n);
    			return;
    		}
    		else {
    			sol(n/m, m);
    			System.out.print(n%m);
    		}
    	}
    


  3. List to Array & Array to List

    	static public void sol() {
    		//primitive 일 때
    		ArrayList<Integer> list = new ArrayList<Integer>();
    		int arr[] = {};
       		
    		arr = list.stream().mapToInt(i->i).toArray();
       		
    		//non primitive 일 때
    		ArrayList<String> list1 = new ArrayList<String>();
    		String arr1[] = {};
       		
    		arr1 = (String[]) list1.toArray();
    	}
       
       
    
    	static public void sol() {
    		//primitive 일 때
    		int arr1[] = {};
    		List<Integer> list1 = new ArrayList();
       		
    		list1 = Arrays.stream(arr1).boxed().collect(Collectors.toList());
       		
    		//non primitive 일 때
    		String arr2[] = {};
    		List list2 = new ArrayList();
       		
    		list2 = Arrays.asList(arr2);
       		
    	}
    
    List reverse
    	List<Integer> list1 = new ArrayList();
       		
    		Collections.reverse(list1);
    		Collections.sort(list1,Collections.reverseOrder());
       
    


  4. 라면공장 (프로그래머스)

	static public void sol() {
		1. pq reverse 한다 매번
		2. for문은 k까지 돌리고
		3. if i dates[i] 되면 pq 넣는다
		4. if stk==0, pq 가장   넣는다 (이때만 ++answer)
		5. stk 매번 --
	}
  • PriorityQueue를 reverseOrder하기 위해서는 PriorityQueue생성할 때
		PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Comparator.reverseOrder());


  1. 소수 찾기 (프로그래머스)
	static ArrayList<Integer> list = new ArrayList<Integer>();
	static int ans = 0;
	
	static public void sosu(int n) {
		if(n==1 || n ==0)
            return;
        
        boolean chk = false;
		for(int i=2;i<n;i++) {
			if(n%i == 0)
				chk=true;
		}
		if(chk == false)
			ans++;
	}
	
	static public void swap(int arr[], int depth, int i) {
		int temp = arr[depth];
		arr[depth] = arr[i];
		arr[i] = temp;
	}
	
	static public void perm(int arr[], int depth, int n, int r) {
		if(depth == r){
            String a = "";
            for(int i=0;i<r;i++){
                a = a + arr[i];
            }
            int aa = Integer.parseInt(a);
            
			if(!list.contains(aa)){
                list.add(aa);
				sosu(aa);                
            }
			
			return;
		}
		
		for(int i=depth; i<arr.length;i++) {
			swap(arr,depth,i);
			perm(arr,depth+1,n,r);
			swap(arr,depth,i);
		}
	}
	
	
	static public int solution(String numbers) {
		int arr[] = new int[numbers.length()];
		
		for(int i=0;i<numbers.length();i++)
			arr[i] = Integer.parseInt(String.valueOf(numbers.charAt(i)));
		
		for(int i=1; i<=numbers.length();i++)
			perm(arr,0,numbers.length(),i);
		
		return ans;
	}
  • a에 “” 빈 게 들어갔다는건 depth==r==0이라는 뜻이고 0일때 뭔가 잘못들어갔다는 걸 알아챘어야했다
  • 또 소수를 구할 때는 n ==1   n ==0 일때도 체크해줘야 한다