• Home
  • About
    • Develop2r photo

      Develop2r

      안녕하세요 IT 개발자 임기남입니다. 한걸음 한걸음 나아가는 개발자를 꿈꾸고 있습니다.

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Algorithm

2020_상반기_넷마블_1번

28 Jun 2020

Reading time ~1 minute

문제 풀이

  • 거듭제곱 수열을 만들어 n번째 숫자를 구하는 문제

Code Snippets



import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.TreeSet;

public class test1 {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long start = System.currentTimeMillis();
		long n=2;
		System.out.println("결과: " + solution(n));
		long end = System.currentTimeMillis();
		System.out.println("실행시간 :"+(end-start/1000.0));
	}
	
	public static long solution(long l) {
		//정렬을 위한 리스트
		ArrayList<Long> list = new ArrayList<>();
		//중복제거를 위한 셋
	    HashSet<Long> set = new HashSet<>();
	    //임의의 최대값
	    long n2 = l*l;
	    // 1은 거듭제곱해도 증가하지 않으므로 임의로 삽입
	    set.add((long) 1);
	    // 주어진 숫자까지의 제곱을 확인
	    for (int i = 2; i <= l; i++) {
	    	// 이미 다른 수의 거듭제곱에 포함 될 경우 다음 진행
	    	if(set.contains(i))
	    		continue;
	        long j = (long)i*(long)i;
	        while(j <= n2) {
	            set.add(j);
	            j *= (long)i;
	        }
	    }
	    list.addAll(set);
	    Collections.sort(list);
	    long answer = list.get((int) (l-1));
	    return answer;
    }
}

Result

n=1000000일경우

결과: 979846576384
실행시간 :1.591736648948611E12

제곱수열의 값이 해당 인덱스의 제곱보다 작다고 가정 주의 : Integer는 최대 범위가 (2^31)-1 이므로 대략 20억을 고려하여 Long자료형을 사용(필수!!!)



algorithmnetmable Share Tweet +1