<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>처음부터 차근차근</title>
    <link>https://ksyy.tistory.com/</link>
    <description>현직 백엔드 개발자의 블로그입니다.
주로 개발에 관하여 공부한 것을 업로드합니다.</description>
    <language>ko</language>
    <pubDate>Fri, 3 Jul 2026 00:24:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>_soyoung</managingEditor>
    <image>
      <title>처음부터 차근차근</title>
      <url>https://tistory1.daumcdn.net/tistory/4935668/attach/9b738e8f1e7b4096a9d17d1a4601116a</url>
      <link>https://ksyy.tistory.com</link>
    </image>
    <item>
      <title>class2 - 10773번 제로 (자바)</title>
      <link>https://ksyy.tistory.com/334</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/10773&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/10773&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자는 해당 문제를 배열로 풀고 정답이라 나왔는데, 다른 사람들 풀이 보니까 stack을 쓰는 사람이 많아서 stack공부도 할겸 업로드하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제에서 사용하는 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Stack 클래스&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #353638; text-align: left; border-collapse: collapse; width: 100%; height: 176px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;color: #000000; width: 18.0233%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;함수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 13.8371%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;반환 형식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 53.6047%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;color: #000000; width: 18.0233%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;push(item)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 13.8371%; height: 40px;&quot;&gt;void&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 53.6047%; height: 40px;&quot;&gt;스택에 요소 추가.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;color: #000000; width: 18.0233%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;pop()&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 13.8371%; height: 40px;&quot;&gt;item&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 53.6047%; height: 40px;&quot;&gt;스택의 맨 위 요소를 제거하고 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;color: #000000; width: 18.0233%; height: 36px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;peek()&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 13.8371%; height: 36px;&quot;&gt;item&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 53.6047%; height: 36px;&quot;&gt;스택의 맨 위 요소를 반환하나, 제거하지 않음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;color: #000000; width: 18.0233%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;empty()&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 13.8371%; height: 40px;&quot;&gt;boolean&lt;/td&gt;
&lt;td style=&quot;color: #000000; width: 53.6047%; height: 40px;&quot;&gt;스택이 비어 있는지 여부를 반환. 비어있으면 false, 아니면 true&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716453499981&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int num = Integer.parseInt(br.readLine());
            Stack&amp;lt;Integer&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
            
            for (int i = 0; i &amp;lt; num; i++) {
                int val = Integer.parseInt(br.readLine());
                
                if (val == 0) { // 0이면
                    stack.pop(); // 값 삭제
                    
                }
                else {
                    stack.push(val);
                }
            }
            
            int sum = 0; 
            
            
            while(!stack.empty()) {
                sum += stack.pop();
            }
            
            bw.write(String.valueOf(sum) + &quot;\n&quot;);
            
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 Stack 클래스를 이용한 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래는 배열을 이용한 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1716453571428&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int num = Integer.parseInt(br.readLine());
            int sum = 0;        
            Integer[] arr = new Integer[num];
            
            for (int i = 0; i &amp;lt; num; i++) {
                arr[i] = Integer.parseInt(br.readLine());
                sum += arr[i];
                
                // 0이면
                if (arr[i] == 0) {
                    
                    // 최신값 삭제
                    for(int j = i-1; j &amp;gt;= 0; j--) {
                        if (arr[j] != null) {
                            sum -= arr[j];
                            arr[i] = null; // 0을 null로 만들기
                            arr[j] = null; // 최신값 null로 만들기
                            break;
                            
                        }
                    }
                    
                }
            }
            
            bw.write(String.valueOf(sum) + &quot;\n&quot;);
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 Stack 클래스를 쓰니까 코드가 깔끔해 진것을 볼 수 있다.&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/334</guid>
      <comments>https://ksyy.tistory.com/334#entry334comment</comments>
      <pubDate>Thu, 23 May 2024 17:39:55 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 11650번 좌표 정렬하기 (자바)</title>
      <link>https://ksyy.tistory.com/333</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/11650&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/11650&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arrays.sort함수는 1차원 배열 뿐만아니라 2차원 배열도 정렬 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, Comparator 객체를 써서 커스텀 해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제에서 쓰인 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arrays.sort로 2차원 배열 정렬.&lt;/p&gt;
&lt;pre id=&quot;code_1716445447598&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Arrays.sort(dots, new Comparator&amp;lt;int[]&amp;gt;() { // 이차원 배열 정렬
    @Override
    public int compare(int[] one, int[] two) { 
        if (one[0] == two[0]) {  
            return one[1] - two[1]; // y좌표 오름차순
        }
        else {
            return one[0] - two[0]; // x좌표 오름차순
        }
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Comparator 객체의 제너럴 부분에 배열을 넣어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 arr = {&lt;span style=&quot;background-color: #f6e199;&quot;&gt;{1, 2}&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;{2, 3}&lt;/span&gt;, {4, 5}...}이 있다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;one은 {&lt;span style=&quot;background-color: #f3c000;&quot;&gt;1&lt;/span&gt;, 2} two는 {&lt;span style=&quot;background-color: #f6e199;&quot;&gt;2&lt;/span&gt;, 3}이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;one[0]은 1, two[0]은 2이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716445487521&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            int dotNum = Integer.parseInt(br.readLine());
            int[][] dots = new int[dotNum][2];
            
            for (int i = 0; i &amp;lt; dotNum; i++) {
                st = new StringTokenizer(br.readLine());
                
                int x = Integer.parseInt(st.nextToken());
                int y = Integer.parseInt(st.nextToken());
                
                dots[i][0] = x;
                dots[i][1] = y;
            }
            
            Arrays.sort(dots, new Comparator&amp;lt;int[]&amp;gt;() { // 이차원 배열 정렬
                @Override
                public int compare(int[] one, int[] two) {
                    if (one[0] == two[0]) { // x 좌표 비교
                        return one[1] - two[1]; // y좌표 오름차순
                    }
                    else {
                        return one[0] - two[0]; // x좌표 오름차순
                    }
                }
            });
            
            for(int[] dot : dots) {
                bw.write(String.valueOf(dot[0])+&quot; &quot;+String.valueOf(dot[1]) + &quot;\n&quot;);
            }
            
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Arrays.sort를 쓰니 어렵지 않게 문제를 해결할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/333</guid>
      <comments>https://ksyy.tistory.com/333#entry333comment</comments>
      <pubDate>Thu, 23 May 2024 15:28:18 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 2775번 부녀회장이 될테야 (자바)</title>
      <link>https://ksyy.tistory.com/332</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/2775&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2775&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제한 시간이 0.5초로 아주 짧다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 봤을 때 처음 떠올렸던 방식이 아예 처음에 2차원 배열을 초기화 시키는 방식이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 최대 층수도 안정해져있고, for문을 돌리기에는 제한 시간이 너무 적어서 다른 방법을 고안해냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 떠올린 방법이 재귀함수를 이용하는 방법이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어차피 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;k층 n호 사람 수 = k-1층 1~n호 사람 수의 합&lt;/span&gt; 이니까 재귀 함수를 통해서 구현할 수 있다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀기전 계획&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716441796691&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;k층 sum(n호 사람 수) = k-1층 sum(1호 ~ n호 사람 수) 

arr[15] = { 1....14}


a(int k층, int n호){
	if (k == 0)
	{
		return arr[n];
	}
	else {
		int temp = 0;
		for (int i = 0; i &amp;lt; n호; i++) {
			temp += a(int k - 1층, int i호);
		}
		return temp;
	}
		
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀기 전 이런식으로 큰 틀을 짠 다음에 실제 코드를 짰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716441827374&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
    static int[] zeroFloorPeopleNum = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int caseNum = Integer.parseInt(br.readLine());
            int[] results = new int[caseNum];
            
            for (int i = 0; i &amp;lt; caseNum; i++) {
                int floor = Integer.parseInt(br.readLine());
                int roomNum = Integer.parseInt(br.readLine());
                
                results[i] = countPeople(floor, roomNum);
            }
            
            for(int result : results) {
                bw.write(String.valueOf(result)+&quot;\n&quot;);
            }
            
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}
	
	
	public static int countPeople(int floor, int roomNum) {
	    if (floor == 0) {
	        return zeroFloorPeopleNum[roomNum];
	    }
	    else {
	       int sum = 0;
	       for (int i = 1; i &amp;lt;= roomNum; i++) {
	           sum += countPeople(floor - 1, i);
	       }
	       
	       return sum;
	    }
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답을 맞추고 다른 사람들은 어떻게 짰나 궁금해서 찾아봤는데 다른 문제랑 다르게 사람마다 풀이가 다 다르고, 다양해서 신기했다.&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/332</guid>
      <comments>https://ksyy.tistory.com/332#entry332comment</comments>
      <pubDate>Thu, 23 May 2024 14:25:32 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 2751번 수 정렬하기2 (자바)</title>
      <link>https://ksyy.tistory.com/331</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/2751&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2751&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 문제를 Arrays.sort 써서 했더니 실버5 문제임에도 불구하고 정답이 나와버려서 너무 허무했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다른 풀이 방법을 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 &lt;b&gt;Collections.sort()&lt;/b&gt;를 쓰면 더 빠르게 풀수있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제에서 사용하는 개념&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 20px;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 20px;&quot;&gt;알고리즘&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;평균 시간복잡도&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;최악 시간복잡도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Arrays.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;sort()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 17px;&quot;&gt;&lt;b&gt;dual-pivot Quicksort&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;&lt;i&gt;&lt;b&gt;O(nlogn)&lt;/b&gt;&lt;/i&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;&lt;i&gt;&lt;b&gt;O(n2)&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 19.186%; height: 17px;&quot;&gt;Collections.sort()&lt;/td&gt;
&lt;td style=&quot;width: 30.814%; height: 17px;&quot;&gt;&lt;b&gt;hybrid&lt;span&gt;&amp;nbsp;&lt;/span&gt;sorting&lt;span&gt;&amp;nbsp;&lt;/span&gt;algorithm&lt;/b&gt; &lt;br /&gt;(= &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Timsort)&amp;nbsp;&lt;br /&gt;(&lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: left;&quot;&gt;Timsort&lt;/span&gt; = 합병정렬 + 삽입정렬)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;합병정렬 : &lt;i&gt;&lt;b&gt;O(nlogn)&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;br /&gt;삽입정렬 : &lt;i&gt;&lt;b&gt;O(n)&lt;/b&gt;&lt;/i&gt; &lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 17px;&quot;&gt;합병정렬 : &lt;i&gt;&lt;b&gt;O(nlogn)&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;br /&gt;삽입정렬 : &lt;i&gt;&lt;b&gt;O(n2)&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1755&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GDxmm/btsHxQIYRrg/kuBApOWMMdhpFYSW6uZQQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GDxmm/btsHxQIYRrg/kuBApOWMMdhpFYSW6uZQQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GDxmm/btsHxQIYRrg/kuBApOWMMdhpFYSW6uZQQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGDxmm%2FbtsHxQIYRrg%2FkuBApOWMMdhpFYSW6uZQQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1755&quot; height=&quot;205&quot; data-origin-width=&quot;1755&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase%2F7%2Fdocs%2Fapi%2F%2F/java/util/Collections.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/javase%2F7%2Fdocs%2Fapi%2F%2F/java/util/Collections.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716435223989&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int num = Integer.parseInt(br.readLine());
            List&amp;lt;Integer&amp;gt; arr = new ArrayList&amp;lt;&amp;gt;();
            
            for(int i = 0; i &amp;lt; num; i++) {
                arr.add(Integer.parseInt(br.readLine()));
            }
            
            Collections.sort(arr);
            
            for(int val : arr) {
                bw.write(String.valueOf(val)+&quot;\n&quot;);
            }
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}
	
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/331</guid>
      <comments>https://ksyy.tistory.com/331#entry331comment</comments>
      <pubDate>Thu, 23 May 2024 10:38:10 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 2609번 최대공약수와 최소공배수 (자바)</title>
      <link>https://ksyy.tistory.com/330</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/2609&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2609&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;이 문제에서 필요한 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;유클리드 호제법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대공약수를 구하는 알고리즘.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 수를 작은 수로 나누어 떨어지게 한 뒤, 수를 반복적으로 수행하여 나머지 0이 될때까지 작동함.&lt;/p&gt;
&lt;pre id=&quot;code_1716427236408&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static int gcd(int num1, int num2) {
    if (num2 == 0) return num1;
    return gcd(num2, num1 % num2);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 재귀방식으로 최대공약수를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 주의할점은 큰수를 num1로, 작은수를 num2로 둬야한다는 점. 안그러면 무한루프에 빠지게 된다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최소공배수 = (두 수의 곱) / 최대공약수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716427328029&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st = new StringTokenizer(br.readLine());
            
            int num1 = Integer.parseInt(st.nextToken());
            int num2 = Integer.parseInt(st.nextToken());
            
            // 최대공약수 구하기
            int gcd = gcd(num1, num2);
            
            // 최소공배수 구하기
            int lcm = num1 * num2 / gcd;
            
            bw.write(String.valueOf(gcd)+&quot;\n&quot;); // 최대공약수
            bw.write(String.valueOf(lcm)+&quot;\n&quot;); // 최소공배수
           
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}
	
	public static int gcd(int num1, int num2) {
	    if (num2 == 0) return num1;
	    return gcd(num2, num1 % num2);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리드 호제법을 알고있으면 간단하게 풀 수 있는 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/330</guid>
      <comments>https://ksyy.tistory.com/330#entry330comment</comments>
      <pubDate>Thu, 23 May 2024 10:23:14 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 2108번 통계학 (자바)</title>
      <link>https://ksyy.tistory.com/329</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/2108&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2108&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최빈값 구하는데 시간이 너무 오래걸렸었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력값으로 음수가 들어와서 최빈값 구할 때 배열을 하나 더 만들었어야 했었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력하라는 조건도 있어서 로직이 복잡했다ㅠㅠ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;결국 최빈값 부분은 해답을 보고 풀었었는데, 코드를 짧고 간결하게 잘짠 사람들이 많아서 대단하게 느껴졌다...&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;문제에서 사용한 개념&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Math.round(소수) : 소수점 첫번째자리에서 반올림 하여 정수를 리턴함. 가장 가까운 정수를 리턴한다고 생각하면 편함.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 50.9302%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 22.093%; height: 20px;&quot;&gt;리턴 형식&lt;/td&gt;
&lt;td style=&quot;width: 28.8372%; height: 20px;&quot;&gt;매개변수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 22.093%; height: 17px;&quot;&gt;long&lt;/td&gt;
&lt;td style=&quot;width: 28.8372%; height: 17px;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #4c6b87;&quot; href=&quot;https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round(double)&quot;&gt;round&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #353833; text-align: left;&quot;&gt;(double&amp;nbsp;a)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 22.093%; height: 17px;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;width: 28.8372%; height: 17px;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #bb7a2a;&quot; href=&quot;https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round(float)&quot;&gt;round&lt;/a&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #eeeeef; color: #353833; text-align: left;&quot;&gt;(float&amp;nbsp;a)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서 : &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;풀이&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716361622450&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            
            int num = Integer.parseInt(br.readLine());
            int[] arr = new int[num];
            int sum = 0; // 합
          
            
            for (int i = 0; i &amp;lt; num; i++) {
                arr[i] = Integer.parseInt(br.readLine());
                sum += arr[i];
            }
            
            // 산술평균
            long arithmeticMean = Math.round((double)sum / num);
            
            // 중앙값 
            Arrays.sort(arr);
            int median = arr[(num -1) / 2];
            
            // 최빈값 
            int[] count = new int[8001]; // 빈도 수 카운팅 배열
            int mode = 0; // 최빈값
            int maxCount = 0; // 카운트 최대값
            boolean flag = false; // 두번째 최빈값 찾기 위한 플래그
            
            for (int i = 0; i &amp;lt; arr.length; i++) {
                count[arr[i] + 4000]++;
            }
            
            for (int i = 0; i &amp;lt; count.length; i++) { // 최빈값 찾기
                if (count[i] &amp;gt; maxCount) {
                    mode = i - 4000;
                    maxCount = count[i];
                    flag = true;
                } else if (count[i] == maxCount &amp;amp;&amp;amp; flag == true) {
                    mode = i - 4000;
                    flag = false;
                }
            }
           
            // 범위
            int range = arr[num - 1] - arr[0];
            
            bw.write(String.valueOf(arithmeticMean)+&quot;\n&quot;); // 산술평균
            bw.write(String.valueOf(median)+&quot;\n&quot;); // 중앙값
            bw.write(String.valueOf(mode)+&quot;\n&quot;); // 최빈값
            bw.write(String.valueOf(range)+&quot;\n&quot;); // 범위
           
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제는 모두 맞았는데 답 제출하기만 하면 틀렸다고 나와서 한참을 찾아보다가 산술평균 반환 형식이 잘못됐다는 것을 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;double형 매개변수를 넣었으면 리턴 형식이 long인데 int형을 써서 에러가 났었다...&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/329</guid>
      <comments>https://ksyy.tistory.com/329#entry329comment</comments>
      <pubDate>Wed, 22 May 2024 16:07:14 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 1920번 수 찾기 (자바)</title>
      <link>https://ksyy.tistory.com/328</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/1920&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1920&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 시간 제한이 1초로 굉장히 짧다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이분탐색(이진탐색) 알고리즘을 사용해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 놀라운 사실이.. 자바에는 이분탐색 함수가 이미 만들어져 있다!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 손쉽게 풀 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제에서 사용되는 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이분탐색(이진탐색)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{1, 2, 3, 4, 5} 배열이 있고, 찾고자 하는 값은 2 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 가운데 3을 찍어서 2가 3보다 큰지 작은지 같은지 비교하고, 3보다 작으면 왼쪽으로, 크면 오른쪽으로 가서 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Arrays.binarySearch(arr, key)&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;배열에서 이분탐색을 하는 메소드.&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;오름차순된 배열 arr&lt;/u&gt;&lt;/span&gt;에서 key인 요소를 찾음.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 성공 시 : &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;key와 일치하는 요소의 인덱스&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;를 반환( &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;만약 일&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;치하는 요소가 여러 개 있다면 무작위의 인덱스를 반환&lt;/span&gt; )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 실패 시 : 음수 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716269499792&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            // 값 받음1
            int num1 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr1 = new int[num1];
            for (int i = 0; i &amp;lt; num1; i++) {
                arr1[i] = Integer.parseInt(st.nextToken());
            }
            
            Arrays.sort(arr1); // 오름차순 정렬
            
            // 값 받음2
            int num2 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr2 = new int[num2];
            int result;
            for (int i = 0; i &amp;lt; num2; i++) {
                arr2[i] = Integer.parseInt(st.nextToken());
                
                // 이분 탐색
                result = Arrays.binarySearch(arr1, arr2[i]);
                if (result &amp;lt; 0) bw.write(&quot;0\n&quot;);
                else bw.write(&quot;1\n&quot;);
            }
           
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		

	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 Arrays 클래스의 &lt;b&gt;Arrays.binarySearch(arr, key)&lt;/b&gt; 함수를 이용한 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716271199974&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            // 값 받음1
            int num1 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr1 = new int[num1];
            for (int i = 0; i &amp;lt; num1; i++) {
                arr1[i] = Integer.parseInt(st.nextToken());
            }
            
            Arrays.sort(arr1); // 오름차순 정렬
            
            // 값 받음2
            int num2 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr2 = new int[num1];
            for (int i = 0; i &amp;lt; num2; i++) {
                arr2[i] = Integer.parseInt(st.nextToken());
            }
            
            
            // 있는지 확인 - 이분 탐색
            for (int j = 0; j &amp;lt; num2; j++) {
                int result = 0; // 없음
                int end = arr1.length - 1; // 끝 인덱스
                int start = 0; // 시작 인덱스
                int middle = 0;
                while (true) {
                    middle = (end - start) / 2;
                    if (middle &amp;lt; 0 || end &amp;gt; arr1.length - 1) break;

                    if ( arr2[j] &amp;gt; arr1[middle]) {
                        start = middle + 1;
                    }
                    else if (arr2[j] &amp;lt; arr1[middle]) {
                        end = middle - 1;
                        // if (value == 0 &amp;amp;&amp;amp; arr1[0] != arr2[j]) {
                        //     break;
                        // }
                    }
                    else if (arr1[middle] == arr2[j]) {
                        result = 1;
                        break;
                    }
                    
                }
                bw.write(String.valueOf(result) + &quot;\n&quot;);
            }
           
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
		

	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이진 탐색을 수동으로 하는 코드이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀었던 과정&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716267696778&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            int num1 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr1 = new int[num1];
            for (int i = 0; i &amp;lt; num1; i++) {
                arr1[i] = Integer.parseInt(st.nextToken());
            }
            
            int num2 = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            int[] arr2 = new int[num1];
            int result = 0;
            for (int i = 0; i &amp;lt; num2; i++) {
                arr2[i] = Integer.parseInt(st.nextToken());
                for (int j = 0; j &amp;lt; num1; j++) {
                    if (arr2[i] == arr1[j]) {
                        result = 1; // 존재함
                    }
                }
                
                bw.write(String.valueOf(result) + &quot;\n&quot;);
                result = 0;
            }
        

           
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 이런식으로 이분탐색을 사용하지 않고 풀었다가 시간초과가 났었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이분탐색 알고리즘을 사용하여 문제를 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/328</guid>
      <comments>https://ksyy.tistory.com/328#entry328comment</comments>
      <pubDate>Tue, 21 May 2024 14:37:42 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 1676번 팩토리얼 0의 개수 (자바)</title>
      <link>https://ksyy.tistory.com/327</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/1676&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1676&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 최댓값인 500!은 자릿수만 1135자 가까이 돼서 일반적인 int문으로 데이터를 담는것이 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 BigInteger을 써야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제에서 사용되는 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; BigInteger &lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #000000; text-align: start; border-collapse: collapse; width: 100%; height: 81px;&quot; border=&quot;1&quot; data-ke-style=&quot;style3&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 40px; width: 16.9767%;&quot;&gt;타입&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 40px; width: 36.3954%;&quot;&gt;범위&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 40px; width: 27.6744%;&quot;&gt;기본형/참조형&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 40px; width: 18.8372%;&quot;&gt;저장 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 20px; width: 16.9767%;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 20px; width: 36.3954%;&quot;&gt;-2,147,483,648 ~ 2,147,483,647&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 20px; width: 27.6744%;&quot;&gt;기본형(value type)&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 20px; width: 18.8372%;&quot;&gt;Stack&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 16.9767%;&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;BigInteger&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 36.3954%;&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;무한 (Infinity)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 27.6744%;&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;참조형(&lt;span style=&quot;color: #4d5156; text-align: left;&quot;&gt;reference type&lt;/span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center; height: 21px; width: 18.8372%;&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;Heap&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;선언 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716257016646&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.math.BigInteger;
BigInteger num = new BigInteger(&quot;1&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;연산&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716257197772&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;num.subtract(BigInteger.valueOf(2))
num.multiply(BigInteger.valueOf(2))
num.divide(BigInteger.valueOf(2))
num.remainder(BigInteger.valueOf(2))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;형변환&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716257343510&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;BigInteger.valueOf(1); // int -&amp;gt; BigIntger
num.intValue(); //BigIntger -&amp;gt; int
num.longValue(); //BigIntger -&amp;gt; long
num.floatValue(); //BigIntger -&amp;gt; float
num.doubleValue(); //BigIntger -&amp;gt; double
num.toString(); //BigIntger -&amp;gt; String&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716257242481&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
import java.io.*;
import java.math.BigInteger;

public class Main
{
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

            // 팩토리얼 구하기
            int num = Integer.parseInt(br.readLine());
            BigInteger fac = new BigInteger(&quot;1&quot;);
            for (int i = num; i &amp;gt; 0; i--) {
                fac = fac.multiply(BigInteger.valueOf(i));
            }
            
            char[] arr = String.valueOf(fac).toCharArray();
            
            int count = 0;    
            
            for (int i = arr.length - 1; i &amp;gt;= 0; i--) {
                if (arr[i] == '0') {
                    count++;
                }
                else {
                    break;
                }
            }
            
            bw.write(String.valueOf(count));
            
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 int로 담았다가 틀려서 BigInteger 사용해서 다시 짰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/327</guid>
      <comments>https://ksyy.tistory.com/327#entry327comment</comments>
      <pubDate>Tue, 21 May 2024 11:09:21 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 1929번 소수 찾기 (자바)</title>
      <link>https://ksyy.tistory.com/326</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/1929&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1929&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당문제는 변수는 1000000까지 될 수 있으나 제한 시간이 2초여서 알고리즘을 사용해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제 풀 때 필요한 개념&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 에라토스테네스의 체&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;고대 그리스의 수학자&lt;span&gt;&amp;nbsp;에라토스테네스&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;가 만들어 낸&lt;span&gt;&amp;nbsp;소수&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;를 찾는 방법.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #404040; text-align: start;&quot;&gt;임의의 수 N 까지의 소수를 구하고자 할 때, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt;2부터&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #404040; text-align: start;&quot;&gt;&lt;b&gt;&amp;radic;N&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt;&amp;nbsp;(제곱근)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt;까지 돌며 모든 배수들을 소수에서 제외시키는 방식이다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2 * 4 = 4 * 2 처럼 모든 약수를 구하기에는 겹치는 부분이 많아 비효율적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 주어진 수의 제곱근 까지만 약수를 구하면 효율적으로 소수를 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 2부터 &lt;span style=&quot;font-family: 'Noto Sans Light'; color: #404040; text-align: start;&quot;&gt;&lt;b&gt;&amp;radic;N&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt; 까지의 배수를 제외시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt;2. 배수를 구할 때는 자기 자신을 뺀다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #404040; text-align: start;&quot;&gt;3. 제외된 수는 배수를 구하지 않고 넘어간다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716187090654&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            
            Boolean[] arr = new Boolean[end+1];
            
            Arrays.fill(arr, true); // 초기값 세팅
            arr[0] = false; // 0은 무조건 false로 세팅한다.
            arr[1] = false; // 1은 무조건 false로 세팅한다.
            int real_end = (int)Math.sqrt((double)end); 
            
            for (int i = 2; i &amp;lt;= real_end; i++) {	
                if (!arr[i]) continue;
            	for (int j = 2; i*j &amp;lt;= end; j++) {
            	    arr[i*j] = false;
            	}
            }
            
            
            // 출력
            for (int i = start; i &amp;lt;= end; i++) {
                if (arr[i]) {
                    bw.write(String.valueOf(i)+&quot;\n&quot;);
                }
            }
           

            // close
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}	
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;문제푼 과정&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716122075749&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package backjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class q_1929 {
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            
            List&amp;lt;Integer&amp;gt; results = new ArrayList&amp;lt;&amp;gt;();
            
            for (int i = start; i &amp;lt; end; i++) {	
            	for (int j = 2; j &amp;lt; 1000000; j++) {
            		if (i == 2 || i == j) {
            			results.add(i);
            			break;
            		}
            		else if (i == 1 || i % j == 0) {
            			break;
            		}
            	}
            }
            
            
            // 출력
            for (Integer result : results) {
            	 bw.write(String.valueOf(result)+&quot;\n&quot;);
            }
           

            // close
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}	
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 했더니 시간초과가 나서 다른 방법을 찾아보게 되었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 알고리즘을 이용해서 풀어야 되는 문제임을 알게되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/326</guid>
      <comments>https://ksyy.tistory.com/326#entry326comment</comments>
      <pubDate>Sun, 19 May 2024 21:34:56 +0900</pubDate>
    </item>
    <item>
      <title>class2 - 1978번 소수 찾기 (자바)</title>
      <link>https://ksyy.tistory.com/325</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/1978&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/1978&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적으로 쉽게 풀 수 있는 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 분석 :&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소수 = 1과 자신만의 숫자를 약수로 가지는 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 1과 자기자신이 아닐 경우에 나눠서 0이 되면 count를 하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;소스&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1716120706541&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package backjoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class q_1978 {
	public static void main(String[] args) {
		try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
            StringTokenizer st;
            
            int num = Integer.parseInt(br.readLine());            
            
            int count = 0;
            int temp;
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i &amp;lt; num; i++) {
            	temp = Integer.parseInt(st.nextToken());
            	
            	for (int j = 2; j &amp;lt; 1000; j++) {
            		if (j == temp) {
            			count++;
            			break;
            		}
            		else if (temp == 1 || temp % j == 0) {
            			break;
            		}
            		
            	}
            }
            
            
            // 출력
            bw.write(String.valueOf(count)+&quot;\n&quot;);

            // close
            br.close();
            bw.flush();
            bw.close();
		}
		catch (IOException e) {
          System.out.println(&quot;IOException 발생&quot;);
		}	
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>알고리즘</category>
      <author>_soyoung</author>
      <guid isPermaLink="true">https://ksyy.tistory.com/325</guid>
      <comments>https://ksyy.tistory.com/325#entry325comment</comments>
      <pubDate>Sun, 19 May 2024 21:13:22 +0900</pubDate>
    </item>
  </channel>
</rss>