๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

์†Œ์ธ์ˆ˜๋ถ„ํ•ด - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

by ๊ทคํ”ผํ‚ค 2022. 11. 27.

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋ž€ ์–ด๋–ค ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 12๋ฅผ ์†Œ์ธ์ˆ˜ ๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3 ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 12์˜ ์†Œ์ธ์ˆ˜๋Š” 2์™€ 3์ž…๋‹ˆ๋‹ค. ์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ n์˜ ์†Œ์ธ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์€ ๋ฐฐ์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • 2 ≤ n ≤ 10,000

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no n result
1 12 [2, 3]
2 17 [17]
3 420 [2, 3, 5, 7]
  1. 12๋ฅผ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [2, 3]์„ returnํ•ฉ๋‹ˆ๋‹ค.
  2. 17์€ ์†Œ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [17]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. 420์„ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3 * 5 * 7 ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [2, 3, 5, 7]์„ returnํ•ฉ๋‹ˆ๋‹ค.

 


 

๐Ÿ’› Solution

ํ’€์ด 1

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
class Solution {
    public int[] solution(int n) {

        Set<Integer> st = new TreeSet<Integer>();
        int primefactor = 2;
        while (primefactor<=n) {
            if(n%primefactor==0) {
                st.add(Integer.valueOf(primefactor));
                n /= primefactor;
            } else {
                primefactor++;
            }
        }

        int[] arr = new int[st.size()];
        Iterator iter = st.iterator();
        for(int i =0; i<st.size(); i++) {
            if(iter.hasNext()) {
                arr[i] = (int) iter.next();
            }
        }

        return arr;      
    }
}

 

์ฒ˜๋ฆฌ์†๋„์— ๋Œ€ํ•œ ๋ณด์™„์ด ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค

 

ํ’€์ด 1์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ

 


 

ํ’€์ด 2

import java.util.ArrayList;
import java.util.List;
class Solution {
    public int[] solution(int n) {
        List<Integer> list = new ArrayList<>();
        int primeFactor = 2;
        while(n >  1){
            if(n%primeFactor==0){
                if(!list.contains(primeFactor))
                    list.add(primeFactor);
                n /= primeFactor;
                continue;
            }
            primeFactor++;
        }
        int[] answer = new int[list.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = list.get(i);
//                System.out.println(answer[i]);
        }
    return answer;
    }
}

 

์ฒ˜๋ฆฌ์†๋„ ๋ณด์™„ ์™„๋ฃŒ

 

ํ’€์ด 2์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ

 


 

๐Ÿ’œ Comment

ํ’€์ด 1์˜ ์ฝ”๋“œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋Š๋ ธ๋˜ ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๋ ค TreeSet์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

TreeSet์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต๋ฐฉ์ง€ + ์ˆœ์„œ์œ ์ง€ ๋‘ ํšจ๊ณผ๋ฅผ ๋…ธ๋ ค๋ดค์ง€๋งŒ ๋‚˜์ค‘์— TreeSet์—์„œ Array๋กœ ๊ฐ’์„ ๋‚ด๋ณด๋‚ด๋Š” ๊ณผ์ •์—์„œ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ํ˜„์ €ํ•˜๊ฒŒ ๋Š๋ ค์ง„ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋œ๋‹ค.

TreeSet์˜ ํŠน์ง•์—๋งŒ ๊ฝ‚ํžŒ ๋‚˜๋จธ์ง€ ํ™œ์šฉ์„ฑ์„ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. Set์— ๊ฐ’์„ ์‚ฝ์ž…ํ•  ๋•Œ ์ •ํ•ด์ง„ ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Array๋‚˜ ArrayList์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ์‹์ด ํ†ตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž๋‹ค.

๋”ฐ๋ผ์„œ ํ’€์ด 2์—์„œ๋Š” Set์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ค‘๋ณต๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด ArrayList์— ์ด๋ฏธ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ์ดํ›„์—๋Š” ArrayList์˜ ๊ฐ’์„ Array๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋.

 


 

๐Ÿค Concept

Set

  • Collection ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜์ธ ์ธํ„ฐํŽ˜์ด์Šค
    ( == Collection interface๋ฅผ ์ƒ์†ํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ)
  • ์ˆœ์„œ์™€ ์ƒ๊ด€ ์—†์ด "๊ฐ’"์˜ ์กด์žฌ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ

 

Set์˜ ํŠน์ง•

  • ๊ฐ’ ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅ
  • ๊ฐ’ ์‚ฝ์ž… ์‹œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
  • ์ •๋ ฌ ๋ถˆ๊ฐ€๋Šฅ (์˜ˆ์™ธ: TreeSet)
  • ๋™๊ธฐํ™” ๋ถˆ๊ฐ€๋Šฅ (not thread-safe)
  • ์›์‹œํ˜• ๊ฐ’์€ ์ €์žฅ์ด ๋ถˆ๊ฐ€๋Šฅ
  • ๊ฐ’ ์ถœ๋ ฅ ์‹œ ๋ฐ˜๋ณต๋ฌธ ๋˜๋Š” Iterator๋กœ ์ถœ๋ ฅ (<-> ArrayList๋Š” get ์‚ฌ์šฉ)Set์˜ ์ข…๋ฅ˜
public static void main(String[] args) {
	HashSet<Integer> set = new HashSet<>();
	for (int i = 0; i < 10; i++) {
    	set.add(i);
    }
	//Iterator ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’ ๊บผ๋‚ด๊ธฐ
	Iterator<Integer> iter = set.iterator();
	while(iter.hasNext()){
    	System.out.println(iter.next());
	}
	//๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฐ’ ๊บผ๋‚ด๊ธฐ
	for(int i : set) {
		System.out.println(i);
	}
}

 

  1.  HashSet
    • HashMap๊ณผ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†
    • ๊ฐ€์žฅ ๋น ๋ฅธ ์ž„์˜ ์ ‘๊ทผ ์†๋„ (๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ์ข‹์Œ)
    • ์ •๋ ฌ ๋ถˆ๊ฐ€๋Šฅ
    • ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
  2. TreeSet
    • Tree์™€ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†
    • HashSet๋ณด๋‹ค ์ฒ˜๋ฆฌ ์†๋„๋Š” ๋Š๋ฆผ
    • ์ •๋ ฌ ๊ฐ€๋Šฅ (๊ฐ’ ์‚ฝ์ž…๊ณผ ๋™์‹œ์— ์ •๋ ฌ)
    • ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ
    • ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’ ๋ฉ”์†Œ๋“œ, ํ†ต๊ณ„ ๋ฉ”์†Œ๋“œ ์กด์žฌ
  3. LinkedHashSet
    • ๊ฐ’ ์‚ฝ์ž… ์ˆœ์„œ๋ฅผ ๋ณด์žฅ
    • ์—ฐ๊ฒฐ๋œ ๋ชฉ๋ก ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋จ -> ๋Š๋ฆฌ๋‹ค
    • ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

 

 

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ
https://bangu4.tistory.com/203 [Java] Set ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ž˜์Šค - ์ด์ •๋ฆฌ
https://bangu4.tistory.com/194 [Java] Java Collection ๊ตฌ์กฐ ์ •๋ฆฌ

 

 

๋Œ“๊ธ€