본문 바로가기

코딩테스트

코딩테스트에서 활용했던 자바 문법 정리

Map 정렬하기(Integer values 내림차순)

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

정렬 전 map / 정렬 후 list 출력 결과

        List<Integer> arr = new ArrayList<>(map.values());
        
        Collections.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });

문자열 길이순 오름차순 정렬

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

정렬 적용 전/후 출력 예시

        // 문자열 길이순 정렬
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });

 

숫자 형태의 문자열 내림차순 정렬

https://school.programmers.co.kr/learn/courses/30/lessons/42746

정렬 적용 전/후 출력 예시

        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return (o2+o1).compareTo(o1+o2);
            }
        });

 

 


유클리드 호제법(최대공약수, 최소공배수)

GCD(최대 공약수)

-2개의 자연수의 최대공약수(GCD)를 구하는 알고리즘

-2개의 자연수 a, b(a>b)에서 a를 b로 나눈 나머지를 r이라고 할 때,

GCD(a,b) = GCD(b,r)이며, r=0이면 그때 b가 최대 공약수이다. 

 

  public int gcd(int a, int b) { //최대공약수
  
    while(b!=0) {
      int r=a%b;
      a=b;
      b=r;
    }
    
    return a;
  }

 

 

LCM(최소공배수)

두 자연수 A,B의 최대공약수가 G, 최소공배수가 L일 때, 

A=a*G, B=b*G(a,b는 서로소)라고 하면,

L=a*b*G

L=A*B/G

 

	public int lcm(int a, int b) { //최소공배수
    
		//L=A*B/G
		//0이 아닌 두 수의 곱 / 두 수의 최대 공약수
        
		return a*b / gcd(a,b);
	}