<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>일단 시작해보는 블로그</title>
    <link>https://selina-park.tistory.com/</link>
    <description>web developer, javascript를 중심으로 공부하는 취업준비생입니다.
#react.js #redux #node.js</description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 00:14:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Selina Park</managingEditor>
    <item>
      <title>[자료구조] 힙 (Heap)  - java</title>
      <link>https://selina-park.tistory.com/153</link>
      <description>&lt;pre id=&quot;code_1602060182913&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.algorithm2020;
import java.util.ArrayList;

enum HeapType {
    MIN,
    MAX
}

public class Heap {
    ArrayList&amp;lt;Integer&amp;gt; arr;
    int n; // 남아 있는 노드 개수
    HeapType type;

    // 생성자
    public Heap(ArrayList&amp;lt;Integer&amp;gt; arr, int firstN, HeapType type) {
        this.arr = arr;
        this.n = firstN;
        this.type = type;

        if (type.equals(HeapType.MIN)) {
            sortMinHeap(n);
        } else {
            sortMaxHeap(n);
        }
    }

    public int top() {
        return arr.get(1);
    }

    public void push(int insertValue) {
        // 제일 마지막에 insertValue를 넣는다.
        arr.add(insertValue);
        ++n;

        if (type.equals(HeapType.MIN)) {
            sortMinHeap(n);
        } else {
            sortMaxHeap(n);
        }
    }

    public int pop() {
        int rtn = 0;

        swap(1, n);

        // n-1 ~ 2 까지 sort!
        if (type.equals(HeapType.MIN)) {
            sortMinHeap(n-1);
        } else {
            sortMaxHeap(n-1);
        }

        rtn = arr.remove(n--);

        return rtn;
    }

    private void sortMinHeap(int lastIndex) {
        for (int i=lastIndex; i&amp;gt;1; i--) {
            if (arr.get(i/2) &amp;gt; arr.get(i)) swap(i / 2, i);
        }
    }

    private void sortMaxHeap(int lastIndex) {
        for (int i=lastIndex; i&amp;gt;1; i--) {
            if (arr.get(i/2) &amp;lt; arr.get(i)) swap(i/2, i);
        }
    }

    private void swap(int index1, int index2) {
        int tmp = arr.get(index1);
        arr.set(index1, arr.get(index2));
        arr.set(index2, tmp);
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/자료구조</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/153</guid>
      <comments>https://selina-park.tistory.com/153#entry153comment</comments>
      <pubDate>Wed, 7 Oct 2020 17:43:24 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 종이접기 - 프로그래머스 java</title>
      <link>https://selina-park.tistory.com/151</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/62049&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/62049&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1585624215739&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62049&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62049&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gGNAa/hyFuVQZNlm/DUcSTUM5ZIFfvkSycsILok/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bntWyA/hyFtpTKabq/ASFI6wlhy0iK0ybwEjOw5k/img.png?width=390&amp;amp;height=360&amp;amp;face=0_0_390_360,https://scrap.kakaocdn.net/dn/cbqa6D/hyFtwkZwdZ/YVe7beyC6KmjTh4Tpg6wkk/img.png?width=390&amp;amp;height=309&amp;amp;face=0_0_390_309&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/62049&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62049&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gGNAa/hyFuVQZNlm/DUcSTUM5ZIFfvkSycsILok/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bntWyA/hyFtpTKabq/ASFI6wlhy0iK0ybwEjOw5k/img.png?width=390&amp;amp;height=360&amp;amp;face=0_0_390_360,https://scrap.kakaocdn.net/dn/cbqa6D/hyFtwkZwdZ/YVe7beyC6KmjTh4Tpg6wkk/img.png?width=390&amp;amp;height=309&amp;amp;face=0_0_390_309');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1585624189382&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
  public int[] solution(int n) {
      // 접혀질 개수 : 2^n-1
      int size = (int)Math.pow(2, n)-1;
      int[] answer = new int[size];
      
      String first = &quot;0&quot;;
      String flag = &quot;1&quot;; // &quot;0&quot; 또는 &quot;1&quot;로 계속 바뀜
      for(int i=2; i&amp;lt;=n; i++) {
          flag = &quot;1&quot;;
          StringBuilder tmp = new StringBuilder(&quot;0&quot;);
          for(int j=0; j&amp;lt;first.length(); j++) {
              tmp.append(first.charAt(j) + flag);
              flag = flag.equals(&quot;1&quot;) ? &quot;0&quot; : &quot;1&quot;; 
          }
          first = tmp.toString();
      }
      
      // first를 배열로 만들기
      for(int i=0; i&amp;lt;first.length(); i++) {
          answer[i] = first.charAt(i) - 48;
      }
      
      return answer;
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/151</guid>
      <comments>https://selina-park.tistory.com/151#entry151comment</comments>
      <pubDate>Tue, 31 Mar 2020 12:10:18 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 괄호변환 - 카카오 공채</title>
      <link>https://selina-park.tistory.com/150</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/60058&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1585623976356&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dCRllW/hyFuZFRjP3/QT1HrrSkfpFNESn4F3Utq0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dCRllW/hyFuZFRjP3/QT1HrrSkfpFNESn4F3Utq0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1585623958415&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Stack;
class Solution {
    public String solution(String p) {
        String answer = &quot;&quot;;
                
        if(isRightString(p) == true) return p; // 올바른 문자열이면 바로 자기자신 리턴한다.
        
        // 여기서부터는 균형잡힌 문자열일 경우만 있다. 
        // 올바른 문자열로 바꾸는 함수가 결과 값을 리턴하고 이게 답이 된다.
        answer = transformToRightString(p);
        
        return answer;
    }
    
    // 올바른 문자열인지 확인
    public boolean isRightString(String p) {
        // 시작부터 ')' 이거나, p.length()가 0, 1이면 일단 올바른 문자열은 아니다. 바로 리턴
        if(p.charAt(0) == ')' || p.length() &amp;lt; 2) return false;
        
        Stack&amp;lt;Character&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
        stack.add('(');
        
        for(int i=1; i&amp;lt;p.length(); i++) {
            char c = p.charAt(i);
            if(c == '(') { // 같으면 stack에 넣는다.
                stack.add(c);
                continue;
            }
            
            // stack이 이미 비워져 있는데 ')'있다는건 올바른문자열이 아니라는 것. 바로 리턴
            if(stack.isEmpty()) return false; 
            
            stack.pop(); // 다르면 뺀다.
        }
        
        // 스택이 비워진 상태여야 올바른 문자열
        return stack.isEmpty();
    }
    
    // w를 u와 v로 나누는 함수
    public String[] devide_w_to_u_v(String w) { 
        String[] rtn = {&quot;&quot;, &quot;&quot;}; // rtn[0] = u, rtn[1] = v 넣을거임
        
        if (w.length() == 0) return rtn;

        char put_in_stack = w.charAt(0);
        Stack&amp;lt;Character&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
        stack.add(put_in_stack);
        
        int index = -1; // u가 끝난 지점을 담는 index 값
        
        for(int i=1; i&amp;lt;w.length(); i++) {
            char c = w.charAt(i);
            
            if(stack.isEmpty()) { // stack이 이미 비워져 있는 상태이면 바로 반복문 종료
                index = i;
                break;
            }
            
            if(c == put_in_stack) { // 같으면 stack에 넣는다.
                stack.add(c);
                continue;
            }
                        
            stack.pop(); // 다르면 뺀다.
        }
        
        if(index &amp;lt; 0) {
            rtn[0] = w;
            rtn[1] = &quot;&quot;;

            return rtn;
        }
            
        rtn[0] = w.substring(0, index); // u
        rtn[1] = w.substring(index);
                
        return rtn;
    }
    
    // 올바른 문자열로 변환하는 함수
    public String transformToRightString(String w) {
        if (w.length() == 0) return w; // 빈 문자열이면 그대로 반환.
        
        String rtn = &quot;&quot;;
        
        // w를 u, v로 분리한다.
        String[] u_v = devide_w_to_u_v(w); // return string[2] u와 v
        
        String u = u_v[0];
        String v = u_v[1];

        
        String new_v = transformToRightString(v); // v를 재귀 함수에 넣은 결과
        boolean isRightU = isRightString(u); 
        if(isRightU) { // u 가 올바른 문자열이라면
            rtn = u + new_v;
            return rtn;
        }
        
        
        // u가 올바르지 않았던 문자열일 경우
        rtn = &quot;(&quot;;
        rtn += new_v;
        rtn += &quot;)&quot;;
        
        if(u.length() &amp;gt; 2) {
            String tmp = &quot;&quot;;
            for(int i=1; i&amp;lt;u.length()-1; i++) { // 맨앞, 맨뒤 char 제외하고 뒤집어서 출력할 수 있게
                char tmp_c = u.charAt(i);
                if(tmp_c == '(') {
                    tmp += &quot;)&quot;;
                    continue;
                }
                tmp += &quot;(&quot;;
            }
            rtn += tmp;
        }
        
        return rtn;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/150</guid>
      <comments>https://selina-park.tistory.com/150#entry150comment</comments>
      <pubDate>Tue, 31 Mar 2020 12:06:20 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 프로그래머스 - 멀쩡한 사각형 java</title>
      <link>https://selina-park.tistory.com/149</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/62048&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1584157044050&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmG1kH/hyFhOkuYgp/RAzXvxl7JIGYr6llK1I91k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/6cvTV/hyFhTlOhLP/cpkOpoCk7FsqyS1FnEou80/img.png?width=412&amp;amp;height=570&amp;amp;face=0_0_412_570&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmG1kH/hyFhOkuYgp/RAzXvxl7JIGYr6llK1I91k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/6cvTV/hyFhTlOhLP/cpkOpoCk7FsqyS1FnEou80/img.png?width=412&amp;amp;height=570&amp;amp;face=0_0_412_570');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1584157035077&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public long solution(int w,int h) {
        long answer = 0;
        
        for(int i = 0; i &amp;lt; w; i++) {
            answer += Long.valueOf(h)*i / Long.valueOf(w);
        }
        
        return answer * 2;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lkhlkh23.tistory.com/154&quot;&gt;https://lkhlkh23.tistory.com/154&lt;/a&gt;&lt;/p&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/149</guid>
      <comments>https://selina-park.tistory.com/149#entry149comment</comments>
      <pubDate>Sat, 14 Mar 2020 12:47:12 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 프로그래머스 - 카펫 java</title>
      <link>https://selina-park.tistory.com/148</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42842&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1584152659786&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLJUfu/hyFhJQYekI/jZ3ichTF4Dvo4uigaMSsjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42842&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLJUfu/hyFhJQYekI/jZ3ichTF4Dvo4uigaMSsjK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1584152650677&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public int[] solution(int brown, int red) {
        int[] answer = new int[2];
        
        int col=1;
        int row=0;
        while(true) {
            if(red%col != 0) {
                col++;
                continue;
            }
            
            int redNum = red/col;
            
            int tmp = 2*(redNum + (col+2));

            if(tmp == brown &amp;amp;&amp;amp; redNum &amp;gt;= col) {
                row = redNum;
                break;
            }
        
            col++;
        }
        
        answer[0] = row+2;
        answer[1] = col+2;
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/148</guid>
      <comments>https://selina-park.tistory.com/148#entry148comment</comments>
      <pubDate>Sat, 14 Mar 2020 11:24:21 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 백준 - 1로 만들기 java</title>
      <link>https://selina-park.tistory.com/147</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1463&quot;&gt;https://www.acmicpc.net/problem/1463&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1584087526029&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1463번: 1로 만들기&quot; data-og-description=&quot;첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1463&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1463&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ydpza/hyFhO5puQA/74IkIdmag5RROIcGuRrK7k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1463&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1463&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ydpza/hyFhO5puQA/74IkIdmag5RROIcGuRrK7k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1463번: 1로 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;BottomUp&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;: 2-&amp;gt;1, 3-&amp;gt;1, 4-&amp;gt;1, ... , 결국 N-&amp;gt;1 를 계산하는 방식으로 풀었다.&lt;/p&gt;
&lt;pre id=&quot;code_1584087492665&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		
		int[] d = new int[N+1];
		
		for(int i=2; i&amp;lt;d.length; i++) {
			int tmp = d[i-1];
			if(i%2 == 0) tmp = Math.min(tmp, d[i/2]);
			if(i%3 == 0) tmp = Math.min(tmp, d[i/3]);
			
			d[i] = tmp + 1;
		}
		
		System.out.println(d[N]);
	}

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;TopDown&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1584088699994&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
	static int[] dp;
	// top-down
	public static int memoization(int targetNum) {
		if(targetNum == 1) return 0;
		if(dp[targetNum] &amp;gt;= 0) {
			return dp[targetNum];
		}
		
		int tmp = memoization(targetNum-1);
		
		if(targetNum%2 == 0) tmp = Math.min(tmp, memoization(targetNum/2));
		if(targetNum%3 == 0) tmp = Math.min(tmp, memoization(targetNum/3));

		dp[targetNum] = tmp + 1;
		
		return dp[targetNum];
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		
		dp = new int[N+1];
		Arrays.fill(dp, -1);
		
		System.out.println(memoization(N));
	}

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/147</guid>
      <comments>https://selina-park.tistory.com/147#entry147comment</comments>
      <pubDate>Fri, 13 Mar 2020 17:38:35 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 백준 - 토마토 java</title>
      <link>https://selina-park.tistory.com/145</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7576&quot;&gt;https://www.acmicpc.net/problem/7576&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583921017607&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;7576번: 토마토&quot; data-og-description=&quot;첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 &amp;le; M,N &amp;le; 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/7576&quot; data-og-url=&quot;https://www.acmicpc.net/problem/7576&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKdAus/hyFgvEHT2Y/aKdEntvdy2FcgCCdPnpzi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dVBrfR/hyFgnGFQDC/nKXYKWN0YN7pDxZYuoWawk/img.png?width=250&amp;amp;height=208&amp;amp;face=0_0_250_208&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/7576&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/7576&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKdAus/hyFgvEHT2Y/aKdEntvdy2FcgCCdPnpzi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dVBrfR/hyFgnGFQDC/nKXYKWN0YN7pDxZYuoWawk/img.png?width=250&amp;amp;height=208&amp;amp;face=0_0_250_208');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;7576번: 토마토&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 &amp;le; M,N &amp;le; 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1583921001461&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
	static int answer = 0;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int M = sc.nextInt(); // 가로, j
		int N = sc.nextInt(); // 세로, i
		
		Node[][] a = new Node[N][M];
		Queue&amp;lt;Node&amp;gt; queue = new LinkedList&amp;lt;&amp;gt;();
		
		for(int i=0; i&amp;lt;N; i++) {
			for(int j=0; j&amp;lt;M; j++) {
				int input = sc.nextInt();
				a[i][j] = new Node(i, j, input);
				if(input == 1) {
					queue.add(a[i][j]);
					a[i][j].level = 0;
				}
			}
		}
		
		bfs(a, queue, M, N);
		
		
		for(int i=0; i&amp;lt;N; i++) {
			for(int j=0; j&amp;lt;M; j++) {
				if(a[i][j].value == 0) {
					answer = -1;
					break;
				}
			}
		}
		
		System.out.println(answer);
	}
	
	static void bfs(Node[][] a, Queue&amp;lt;Node&amp;gt; queue, int M, int N) {
		int[] di = {-1, 0, 1, 0};
		int[] dj = {0, 1, 0, -1};
		
		while(!queue.isEmpty()) {
			Node out = queue.remove();
			for(int k=0; k&amp;lt;4; k++) {
				int i = di[k] + out.yi;
				int j = dj[k] + out.xj;
				
				if(i&amp;lt;0 || i&amp;gt;=N || j&amp;lt;0 || j&amp;gt;=M) continue;
				
				if(a[i][j].value == 0) {
					queue.add(a[i][j]);
					a[i][j].level = out.level+1;
					a[i][j].value = out.level+1;
					answer = out.level+1;
				}
			}
		}
	}
	
	static class Node {
		int yi;
		int xj;
		int value;
		int level;
		
		Node(int yi, int xj, int value) {
			this.yi = yi;
			this.xj = xj;
			this.value = value;
			this.level = 0;
		}
	}

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bfs&lt;/p&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/145</guid>
      <comments>https://selina-park.tistory.com/145#entry145comment</comments>
      <pubDate>Wed, 11 Mar 2020 19:04:00 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 프로그래머스 - 최솟값 만들기 java</title>
      <link>https://selina-park.tistory.com/144</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/12941&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583917646336&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HmQyZ/hyFeLbjk77/ugtGcTYbzeaz1r3GurfsOK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HmQyZ/hyFeLbjk77/ugtGcTYbzeaz1r3GurfsOK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1583917636307&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;
        Arrays.sort(A);
        Arrays.sort(B);
        
        for(int i=0; i&amp;lt;A.length; i++) {
            answer += A[i]*B[A.length-1-i];
        }
    
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그리디&lt;/p&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/144</guid>
      <comments>https://selina-park.tistory.com/144#entry144comment</comments>
      <pubDate>Wed, 11 Mar 2020 18:07:41 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 프로그래머스 - 숫자 야구 java</title>
      <link>https://selina-park.tistory.com/143</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42841&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1583910349098&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;코딩테스트 연습 - 숫자 야구 | 프로그래머스&quot; data-og-description=&quot;[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAluVq/hyFeS9g3ge/ncKLXANgdKuSNYMJ5yO6d0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAluVq/hyFeS9g3ge/ncKLXANgdKuSNYMJ5yO6d0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;코딩테스트 연습 - 숫자 야구 | 프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1583910336543&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution {
   static int solution(int[][] baseball) {
        int[] tmp = new int[3];
        
        // 가능한 모든 경우의 수를 stack에 넣는다.
        Stack&amp;lt;String&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
        for(int i=1; i&amp;lt;=9; i++) {
        	for(int j=1; j&amp;lt;=9; j++) {
        		for(int k=1; k&amp;lt;=9; k++) {
        			if(i!=j &amp;amp;&amp;amp; j!=k &amp;amp;&amp;amp; i!=k) {
        				stack.add(String.valueOf(i*100 + j*10 + k));
        			}
        		}
        	}
        }
        
        // 맞는 경우의 수를 넣어줄 answerList 선언
        Stack&amp;lt;String&amp;gt; answerList = new Stack&amp;lt;&amp;gt;();
        
        // 조건의 개수는 baseball.length
        // 조건이 하나라도 안맞는 경우 flag를 통해서 걸러낸다.
        while(!stack.isEmpty()) {
        	String out = stack.pop();
        	
    		boolean flag = false;
        	for(int i=0; i&amp;lt;baseball.length; i++) {
        		int strike = strike(out, String.valueOf(baseball[i][0]));
            	int ball = ball(out, String.valueOf(baseball[i][0])) - strike;

            	if(strike != baseball[i][1] || ball != baseball[i][2]) {
            		flag = true;
            		break;
            	}
        	}
        
        	
        	if(flag == false) {
        		answerList.add(out);
        	}
        }
                
        return answerList.size();
    }
    
    static int strike(String n1, String n2) {
    	int rtn = 0;
    	for(int i=0; i&amp;lt;3; i++) {
    		if(n1.charAt(i) == n2.charAt(i)) {
    			rtn++;
    		}
    	}
    	return rtn;
    }
    
    static int ball(String n1, String n2) {
    	int rtn = 0;
    	
    	List&amp;lt;Character&amp;gt; tmp = new ArrayList&amp;lt;&amp;gt;();
    	for(int i=0; i&amp;lt;3; i++) {
    		tmp.add(n2.charAt(i));
    	}
    	
    	for(int i=0; i&amp;lt;3; i++) {
    		if(tmp.contains(n1.charAt(i))) {
    			rtn++;
    		}
    	}
    	
    	return rtn;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;완전탐색 문제인데, 알고리즘 먼저 생각하고 접근해서 풀다가 지쳐서 구글링해서 참고했다ㅠㅠ&amp;nbsp;&lt;/p&gt;
&lt;p&gt;뭔가.... 이렇게 다 해보는 방식일줄 몰랐는데 문제 많이 풀어보고 적응해야겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42841&quot;&gt;https://programmers.co.kr/learn/courses/30/lessons/42841&lt;/a&gt;&lt;/p&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/143</guid>
      <comments>https://selina-park.tistory.com/143#entry143comment</comments>
      <pubDate>Wed, 11 Mar 2020 16:07:05 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘_풀이] 프로그래머스 - 네트워크 java</title>
      <link>https://selina-park.tistory.com/142</link>
      <description>&lt;pre id=&quot;code_1583901124888&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;
class Solution {
    
    public int solution(int n, int[][] computers) {
        int answer = 0;
        
        Node[] graph = new Node[n+1];
        for(int i=1; i&amp;lt;=n; i++) {
            graph[i] = new Node(i);
        }
        
        // 인접리스트 추가
        for(int i=0; i&amp;lt;computers.length; i++) {
            for(int j=0; j&amp;lt;computers[0].length; j++) {
                if(i == j || computers[i][j] == 0) continue;
                if(!graph[i+1].adjacent.contains(j+1)) {
                    graph[i+1].adjacent.add(j+1);
                }
            }
        }
        
        answer = dfs(graph, 1, n);
        
        return answer;
    }
    
    public int dfs(Node[] graph, int begin, int n) {
        int rtn = 0;
        Stack&amp;lt;Integer&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
      
        for(int i=1; i&amp;lt;=n; i++) {
            if(graph[i].checked == true) continue;
            
            rtn++;
            
            stack.add(i);
            graph[i].checked = true;
            
            while(!stack.isEmpty()) {
                int out = stack.pop();
                graph[out].checked = true;
                for(int adj: graph[out].adjacent) {
                    if(graph[adj].checked == false) {
                        stack.add(adj);
                    }
                }
            }
        }
        
        return rtn;
    }
    
    class Node {
        int key;
        LinkedList&amp;lt;Integer&amp;gt; adjacent;
        boolean checked;
        Node(int key) {
            this.key = key;
            this.adjacent = new LinkedList&amp;lt;&amp;gt;();
            this.checked = false;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS/알고리즘 풀이</category>
      <author>Selina Park</author>
      <guid isPermaLink="true">https://selina-park.tistory.com/142</guid>
      <comments>https://selina-park.tistory.com/142#entry142comment</comments>
      <pubDate>Wed, 11 Mar 2020 13:32:37 +0900</pubDate>
    </item>
  </channel>
</rss>