<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>작심 24/7</title>
    <link>https://yeeybook.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 19 Aug 2026 14:27:00 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>모닝수박</managingEditor>
    <image>
      <title>작심 24/7</title>
      <url>https://tistory1.daumcdn.net/tistory/3921678/attach/f34b2079e49f4416806edb17d4f38fc5</url>
      <link>https://yeeybook.tistory.com</link>
    </image>
    <item>
      <title>힙 (Heap)</title>
      <link>https://yeeybook.tistory.com/165</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;lt;배열 사용 버전&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;최소힙, 루트 노드를 0번으로 지정.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(1번으로 지정하는 게 더 편리하긴 함)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644846941878&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int heap[100];
int heapSize = 0;

void init(){
    heapSize = 0;
}

int push(int value){
    if (heapSize == 100) return 0; // 최대 사이즈를 넘어가면 나가리
    heap[heapSize] = value; // 마지막 노드에 값 추가
    // 마지막 노드에 추가한 값을 올바른 위치로 옮김
    int current = heapSize; // 현재 위치 저장
    while(current &amp;gt; 0 &amp;amp;&amp;amp; heap[(current - 1) / 2] &amp;gt; heap[current]){ // 최소힙인데 부모 &amp;gt; 자식이면 안 되니까 바꿔주기
        // 부모랑 자식 swap
        int tmp = heap[(current - 1) / 2];
        heap[(current - 1) / 2] = heap[current];
        heap[current] = tmp;
        current = (current - 1) / 2; // current는 부모
    }
    ++heapSize; // 다음 노드
    return 1; // push 성공
}

int pop(){ // top(루트 노드) 뺌
    if (heapSize == 0) return -1; // empty인 경우
    int value = heap[0]; // 뻴 루트 노드
    --heapSize; // heap 사이즈 줄여주기
    heap[0] = heap[heapSize]; // 루트에 마지막 노드 저장

    int current = 0; // 현재 노드 = 루트 노드
    while(current * 2 + 1 &amp;lt; heapSize){
        int child, left = current * 2 + 1, right = left + 1;
        if (right == heapSize) child = left;  // 오른쪽 자식이 없는 경우 child는 무조건 왼쪽
        else child = left &amp;lt;= right ? left : right; //  더 작은 놈을 올려야 함
        if (heap[current] &amp;lt;= heap[child]) break; // 부모 &amp;lt;= 자식이면 더 이상 바꿔줄 필요가 없으므로 나옴

        int tmp = heap[current];
        heap[current] = heap[child];
        heap[child] = tmp;
        current = child; // current는 자식
    }
    return value; // 뺀 노드 리턴
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;lt;연결 리스트 사용 버전&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;최소힙, 루트 노드를 1번으로 지정.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;배열을 사용하게 되면 실행 속도는 빠르지만&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리가 커질 땐 좋은 방법이 아닐 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ex) 1000명의 user가 있고, user들에게 총 1000000개의 데이터를 할당하려 할 때,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1명에게 1000000개의 데이터가 몰릴 수도 있으니까&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;user들에게 각각 1000000개씩 데이터를 할당해야 하는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그렇게 되면 메모리가 어마무시하게 커지기 때문에 배열로 구현하기 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그래서 이런 경우에는 속도에서 손해를 좀 보더라도&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연결 리스트로 구현해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;(코드가 예쁘진 않다^^..)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644847498979&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct Node{
    int val;
    Node* parent;
    Node* child[2];
    Node(){}
    Node(int val){
        this-&amp;gt;val = val;
        parent = child[0] = child[1] = nullptr;
    }
} memPool[1000001];
int memPoolCnt, heapSize;
Node* root;  // 항상 루트 노드를 가리킴
Node* findNode(int cur){
    if (cur == 1) return root;
    return findNode(cur / 2)-&amp;gt;child[cur % 2]; // cur노드가 부모의 왼쪽이었는지 오른쪽이었는지 찾아서 리턴
}
int push(int val) {
    if (memPoolCnt &amp;gt; 1000000) return 0;
    memPool[memPoolCnt] = {val};
    Node* newNode = &amp;amp;memPool[memPoolCnt++];
    if(heapSize++ == 0) root = newNode;
    else{
        Node* parent = findNode(heapSize / 2); // heapSize 늘려서 새 노드 넣을 위치 확보 후 그의 부모 찾음
        newNode-&amp;gt;parent = parent;
        parent-&amp;gt;child[heapSize % 2] = newNode;  // 맨 마지막 노드에 새 노드 넣기

        Node* current = newNode;
        whlie(current != root &amp;amp;&amp;amp; current-&amp;gt;parent-&amp;gt;val &amp;gt;= current-&amp;gt;val){ // 최소힙인데 부모 &amp;gt; 자식 이면 안 되니까 바꿔주기
            int tmp = current-&amp;gt;val;
            current-&amp;gt;val = current-&amp;gt;parent-&amp;gt;val;
            current-&amp;gt;parent-&amp;gt;val = tmp;
            current = current-&amp;gt;parent;
        }
    }
    return 1;
}

int pop(){
    if (heapSize == 0) return -1;
    int val = root-&amp;gt;val;
    if(heapSize == 1){
        --heapSize;
        root = nullptr;
        return val;
    }
    Node* current = findNode(heapSize); // 맨 마지막 노드
    root-&amp;gt;val = current-&amp;gt;val;
    current-&amp;gt;parent-&amp;gt;child[heapSize % 2] = nullptr; // 마지막 노드 연결 제거
    --heapSize; // 힙 사이즈 줄임
    current = root;  // 루트부터 내려가면서 재정렬
    while (current-&amp;gt;child[0] != nullptr) {
        int childIdx = 0;
        if (current-&amp;gt;child[1] != nullptr) childIdx = current-&amp;gt;child[0] &amp;lt;= current-&amp;gt;child[1] ? 0 : 1;
        if (current-&amp;gt;parent &amp;lt;= current-&amp;gt;child[childIdx]) break; // 부모 &amp;lt;= 자식 이면 나옴
        int tmp = current-&amp;gt;child[childIdx]-&amp;gt;val;
        current-&amp;gt;child[childIdx]-&amp;gt;val = current-&amp;gt;parent-&amp;gt;val;
        current-&amp;gt;parent-&amp;gt;val = tmp;
        current = current-&amp;gt;child[childIdx];
    }
    return val;
}
int main() { return 0; }&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개념</category>
      <category>우선순위 큐</category>
      <category>힙</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/165</guid>
      <comments>https://yeeybook.tistory.com/165#entry165comment</comments>
      <pubDate>Mon, 14 Feb 2022 23:07:14 +0900</pubDate>
    </item>
    <item>
      <title>이진 탐색 (Binary Search)</title>
      <link>https://yeeybook.tistory.com/164</link>
      <description>&lt;pre id=&quot;code_1643786475295&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;
int arr[8] = {1, 2, 4, 5, 10, 21, 21, 22};
int binarySearch(int st, int en, int target) { // target 찾음
    while (st &amp;lt;= en) {
        int mid = (st + en) / 2;
        if (arr[mid] == target) return mid;
        if (arr[mid] &amp;lt; target) st = mid + 1;
        else en = mid - 1;
    }
    return -1;
}
int upperBound(int st, int en, int target){ // target보다 큰 첫 번째 수 찾음
    int res = -1;
    while (st &amp;lt;= en) {
        int mid = (st + en) / 2;
        if (arr[mid] &amp;gt; target){
            res = mid;
            en = mid - 1;
        }
        else st = mid + 1;
    }
    return res;
}
int lowerBound(int st, int en, int target){ // target보다 크거나 같은 첫 번째 수 찾음
    int res = -1;
    while (st &amp;lt;= en) {
        int mid = (st + en) / 2;
        if(arr[mid] &amp;gt;= target){
            res = mid;
            en = mid - 1;
        }
        else st = mid + 1;
    }
    return res;
}
int main(){
    cout &amp;lt;&amp;lt; binarySearch(0, 7, 21) &amp;lt;&amp;lt; &quot;\n&quot;;
    cout &amp;lt;&amp;lt; upperBound(0, 7, 21) &amp;lt;&amp;lt; &quot;\n&quot;;
    cout &amp;lt;&amp;lt; lowerBound(0, 7, 21) &amp;lt;&amp;lt; &quot;\n&quot;;
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>개념</category>
      <category>이분 탐색</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/164</guid>
      <comments>https://yeeybook.tistory.com/164#entry164comment</comments>
      <pubDate>Wed, 2 Feb 2022 16:21:29 +0900</pubDate>
    </item>
    <item>
      <title>[SWEA] 8935번 스팟마트 (C++)</title>
      <link>https://yeeybook.tistory.com/163</link>
      <description>&lt;figure id=&quot;og_1643617823622&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SW Expert Academy&quot; data-og-description=&quot;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&quot; data-og-host=&quot;swexpertacademy.com&quot; data-og-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jNL968dwDFATQ&quot; data-og-url=&quot;https://swexpertacademy.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jdujk/hyNgckrnIC/u0Y7pBXfGzDoLfoSKftqL0/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315&quot;&gt;&lt;a href=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jNL968dwDFATQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW5jNL968dwDFATQ&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jdujk/hyNgckrnIC/u0Y7pBXfGzDoLfoSKftqL0/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SW Expert Academy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;swexpertacademy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;DP 너무 어려워..&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1643617796135&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstring&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;functional&amp;gt;
using namespace std;
int T, N, M;
int arr[3002], brr[102];
int dp[3002][102][102][2];  // a, b 고른 수, b 버린 수, 가져가거나 안 가져가거나

int play(int a, int i, int j, int picked){
    if (dp[a][i][j][picked] != -1) return dp[a][i][j][picked];
    int val1 = 0, val2 = 0, val3 = 0, val4 = 0;
    if (picked) {  // 직전에 가져갔다면
        if(a &amp;lt; N) val1 = play(a + 1, i, j, 0); // a를 버리는 경우
        if(i + j &amp;lt; M) val2 = play(a, i, j + 1, 0); // b를 버리는 경우
    } else {  // 직전에 안 가져갔다면
        if(a &amp;lt; N) {
            val1 = play(a + 1, i, j, 1) + arr[a]; // a를 가져가는 경우
            val2 = play(a + 1, i, j, 0); // a를 버리는 경우
        }
        if(i + j &amp;lt; M){
            val3 = play(a, i + 1, j, 1) + brr[i]; // b를 가져가는 경우
            val4 = play(a, i + 1, j, 0); // b를 버리는 경우
        }
    }
    return dp[a][i][j][picked] = max(val1, max(val2, max(val3, val4)));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin &amp;gt;&amp;gt; T;
    for (int t = 1; t &amp;lt;= T; t++){
        memset(dp, -1, sizeof(dp));
        memset(brr, 0, sizeof(brr));
        cout &amp;lt;&amp;lt; &quot;#&quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &quot; &quot;;
        cin &amp;gt;&amp;gt; N;
        for (int i = 0; i &amp;lt; N; i++) cin &amp;gt;&amp;gt; arr[i];
        cin &amp;gt;&amp;gt; M;
        for (int i = 0; i &amp;lt; M; i++) cin &amp;gt;&amp;gt; brr[i];
        sort(brr, brr + 102, greater&amp;lt;int&amp;gt;());
        cout &amp;lt;&amp;lt; play(0, 0, 0, 0) &amp;lt;&amp;lt; &quot;\n&quot;;
    }
    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>SWEA/D5</category>
      <category>DP</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/163</guid>
      <comments>https://yeeybook.tistory.com/163#entry163comment</comments>
      <pubDate>Mon, 31 Jan 2022 17:40:25 +0900</pubDate>
    </item>
    <item>
      <title>[SWEA] 1230번 암호문 3 (C++)</title>
      <link>https://yeeybook.tistory.com/162</link>
      <description>&lt;figure id=&quot;og_1643280208524&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SW Expert Academy&quot; data-og-description=&quot;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&quot; data-og-host=&quot;swexpertacademy.com&quot; data-og-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD&quot; data-og-url=&quot;https://swexpertacademy.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh6WZq/hyNez7bFjE/QFqrA67jVGrHwcfHACkp80/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315&quot;&gt;&lt;a href=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh6WZq/hyNez7bFjE/QFqrA67jVGrHwcfHACkp80/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SW Expert Academy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;swexpertacademy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;링크드 리스트를 직접 구현하여 풀었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;메모리 풀을 이용하여 메모리를 아껴준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1643280279830&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;
struct Node
{
    int data;
    Node *next;
};
Node memPool[10000]; // 사용할 노드 미리 정의 (메모리 풀)
Node *head;         // 링크드 리스트의 대가리
int N, M, num, memPoolCnt, x, y, s;
char order;

Node *getNode(int num)
{
    memPool[memPoolCnt].data = num;
    memPool[memPoolCnt].next = nullptr;
    return &amp;amp;memPool[memPoolCnt++];
}

int main()
{
    for (int t = 1; t &amp;lt;= 10; t++)
    {
        cin &amp;gt;&amp;gt; N;
        memPoolCnt = 0; // 메모리 풀 초기화
        head = nullptr; // 링크드 리스트 초기화
        int tmp =0;
        Node *ptr = nullptr;
        // 원본 암호문
        for (int i = 0; i &amp;lt; N; i++)
        {
            cin &amp;gt;&amp;gt; num;
            Node *newNode = getNode(num);
            if (head == nullptr) {
                head = newNode; // head가 null이면 새로 만듦
                ptr = head;
            }
            else
            {
                ptr-&amp;gt;next = newNode; // head의 맨 뒤에 새 노드 추가
                ptr = ptr-&amp;gt;next; // 다음 노드 가리킴
                tmp++;
            }
        }
        cin &amp;gt;&amp;gt; M;
        // 명령어 수행
        for (int i = 0; i &amp;lt; M; i++){
            cin &amp;gt;&amp;gt; order;
            switch (order)
            {
                case 'I': // 삽입
                {
                    cin &amp;gt;&amp;gt; x &amp;gt;&amp;gt; y;
                    Node *ptr = head;
                    int cnt = x;
                    while(cnt &amp;gt; 1) {
                        ptr = ptr-&amp;gt;next; // x번째 위치 찾음
                        cnt--;
                    }
                    for(int i = 0; i &amp;lt; y; i++){
                        cin &amp;gt;&amp;gt; s;
                        Node *newNode = getNode(s);
                        if(i == 0 &amp;amp;&amp;amp; x == 0) { // x가 0이면 맨 앞에 집어 넣음
                            newNode-&amp;gt;next = head;
                            head = newNode;
                            ptr = head;
                            continue;
                        }
                        newNode-&amp;gt;next = ptr-&amp;gt;next; // 새 노드의 next는 현재 노드의 next
                        ptr-&amp;gt;next = newNode; // 현재 노드의 next는 새 노드
                        ptr = ptr-&amp;gt;next; // 바로 다음 노드 가리킴
                    }
                }
                	break;
                case 'D': // 삭제
                {
                    cin &amp;gt;&amp;gt; x &amp;gt;&amp;gt; y;
                    Node *ptr = head;
                    int cnt = x;
                    while(cnt &amp;gt; 1) {
                        ptr = ptr-&amp;gt;next; // x번째 위치 찾음
                        cnt--;
                    }
                    for(int i = 0; i &amp;lt; y; i++){
                        if(ptr-&amp;gt;next == nullptr){
                            ptr = nullptr; // 다음 노드가 없으면 현재 노드를 nullptr로 만듦
                            break;
                        } 
                        if(x == 0){
                            head = head-&amp;gt;next;
                            ptr = head;
                            continue;
                        } 
                        ptr-&amp;gt;next = ptr-&amp;gt;next-&amp;gt;next; // 현재 노드의 next를 다음 노드의 next로 지정
                    }
                }
                	break;
                case 'A': // 추가
                {
                    cin &amp;gt;&amp;gt; y;
                    Node* ptr = head;
                    while(ptr-&amp;gt;next) ptr = ptr-&amp;gt;next; // 맨 뒤 노드 찾음
                    for (int i = 0; i &amp;lt; y; i++){
                        cin &amp;gt;&amp;gt; s;
                        Node *newNode = getNode(s);
                        ptr-&amp;gt;next = newNode; // 맨 뒤 노드에 새 노드 추가
                        ptr = ptr-&amp;gt;next; // 다음 노드를 가리킴
                    }
                }
                	break;
            }
        }
        // 수정 후 암호문 10개 출력
        cout &amp;lt;&amp;lt; &quot;#&quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &quot; &quot;;
        for (int i = 0; i &amp;lt; 10; i++){
            cout &amp;lt;&amp;lt; head-&amp;gt;data &amp;lt;&amp;lt; &quot; &quot;;
            head = head-&amp;gt;next;
        }
        cout &amp;lt;&amp;lt; &quot;\n&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>SWEA/D3</category>
      <category>링크드리스트</category>
      <category>메모리풀</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/162</guid>
      <comments>https://yeeybook.tistory.com/162#entry162comment</comments>
      <pubDate>Thu, 27 Jan 2022 19:49:36 +0900</pubDate>
    </item>
    <item>
      <title>[SWEA] 1288번 새로운 불면증 치료법 (C++)</title>
      <link>https://yeeybook.tistory.com/159</link>
      <description>&lt;figure id=&quot;og_1642486153254&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SW Expert Academy&quot; data-og-description=&quot;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&quot; data-og-host=&quot;swexpertacademy.com&quot; data-og-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN&amp;amp;categoryId=AV18_yw6I9MCFAZN&amp;amp;categoryType=CODE&amp;amp;problemTitle=1288&amp;amp;orderBy=FIRST_REG_DATETIME&amp;amp;selectCodeLang=ALL&amp;amp;select-1=&amp;amp;pageSize=10&amp;amp;pageIndex=1&quot; data-og-url=&quot;https://swexpertacademy.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/v2fpS/hyM8agazYa/hUt8Ipz6fbhwt3JwOpPQQ1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315&quot;&gt;&lt;a href=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN&amp;amp;categoryId=AV18_yw6I9MCFAZN&amp;amp;categoryType=CODE&amp;amp;problemTitle=1288&amp;amp;orderBy=FIRST_REG_DATETIME&amp;amp;selectCodeLang=ALL&amp;amp;select-1=&amp;amp;pageSize=10&amp;amp;pageIndex=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN&amp;amp;categoryId=AV18_yw6I9MCFAZN&amp;amp;categoryType=CODE&amp;amp;problemTitle=1288&amp;amp;orderBy=FIRST_REG_DATETIME&amp;amp;selectCodeLang=ALL&amp;amp;select-1=&amp;amp;pageSize=10&amp;amp;pageIndex=1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/v2fpS/hyM8agazYa/hUt8Ipz6fbhwt3JwOpPQQ1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SW Expert Academy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;swexpertacademy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0~9까지의 숫자가 모두 있는 경우는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;chk = 1111111111&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;로 표시된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;OR 연산자를 이용하여&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;chk에 표시돼있는지 확인할 숫자를 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1642486228471&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
using namespace std;
int T, N;
int main() {
	cin &amp;gt;&amp;gt; T;
	for (int t = 1; t &amp;lt;= T; t++) {
		cin &amp;gt;&amp;gt; N;
		int cnt = 0, chk = 0, num = N;
		while (++cnt) {
			num = N * cnt;
			while (num) { // 각 자릿수 하나씩 돌기
				chk |= 1 &amp;lt;&amp;lt; (num % 10);
				num /= 10;
			}
			if (chk == (1 &amp;lt;&amp;lt; 10) - 1) { // 0 ~ 9까지 1로 표시되면 끝
				cout &amp;lt;&amp;lt; &quot;#&quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; cnt * N &amp;lt;&amp;lt; &quot;\n&quot;;
				break;
			}
		}
	}
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>SWEA/D2</category>
      <category>비트마스크</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/159</guid>
      <comments>https://yeeybook.tistory.com/159#entry159comment</comments>
      <pubDate>Tue, 18 Jan 2022 15:23:10 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 11723번 집합 (C++)</title>
      <link>https://yeeybook.tistory.com/158</link>
      <description>&lt;figure id=&quot;og_1628329825370&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;11723번: 집합&quot; data-og-description=&quot;첫째 줄에 수행해야 하는 연산의 수 M (1 &amp;le; M &amp;le; 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/11723&quot; data-og-url=&quot;https://www.acmicpc.net/problem/11723&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/OYfTT/hyK9DjXJGb/sNm4XkioTsBpdzMA95lTU1/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/11723&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/11723&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/OYfTT/hyK9DjXJGb/sNm4XkioTsBpdzMA95lTU1/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; data-ke-size=&quot;size16&quot;&gt;11723번: 집합&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수행해야 하는 연산의 수 M (1 &amp;le; M &amp;le; 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://yeeybook.tistory.com/157&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;비트마스크&lt;/a&gt;를 이용해 집합을 표현해서 푸는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;S {1, 4, 5} = 11001&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이렇게 S에 들어가 있는 원소는 1로, 없으면 0으로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;연산의 핵심은&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;1 &amp;lt;&amp;lt; x&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;SHIFT로 1의 위치를 적절하게 조절하여 비트연산을 하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ex)&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;S {1, 5} = 10001&lt;/span&gt;에 4를 add하고 싶다면,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;1을 왼쪽으로 3bit 만큼 옮겨준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1 &amp;lt;&amp;lt; 3&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;그러면 &lt;span style=&quot;color: #ef5369;&quot;&gt;1000&lt;/span&gt;이 되는데,&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;이 값&lt;/span&gt;을 &lt;span style=&quot;color: #006dd7;&quot;&gt;S&lt;/span&gt;와 OR 연산 해주면&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;span&gt;01000&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; font-family: 'Nanum Gothic';&quot;&gt;10001&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;----------&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic'; color: #5733b1;&quot;&gt;&lt;span&gt;11001&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;4도 추가된 &lt;span style=&quot;color: #5733b1;&quot;&gt;S {1, 4, 5} = 11001&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span&gt;을 얻을 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Nanum Gothic';&quot;&gt;&lt;i&gt;코드 작성하는 건 쉬웠는데..&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Nanum Gothic';&quot;&gt;&lt;i&gt;완성하고 보니 한 눈에 알아보기 어려워서&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Nanum Gothic';&quot;&gt;&lt;i&gt;나중에 다시 볼 때 왜 이렇게 했는지 해석하기 쉽지 않을 거 같다ㅎㅎ&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Nanum Gothic';&quot;&gt;&lt;i&gt;익숙해지면 나아지겠지?&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1628329753376&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;bitset&amp;gt;
using namespace std;
int M, S, x;
string order;
bitset &amp;lt;20&amp;gt; bit;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cin &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; M; i++) {
		cin &amp;gt;&amp;gt; order;
		if (!(order == &quot;all&quot; || order == &quot;empty&quot;)) cin &amp;gt;&amp;gt; x; // all이나 empty는 x를 받을 필요 없음

		if (order == &quot;add&quot;) S |= 1 &amp;lt;&amp;lt; x - 1;
		else if (order == &quot;remove&quot;) S &amp;amp;= ~(1 &amp;lt;&amp;lt; x - 1);
		else if (order == &quot;check&quot;) cout &amp;lt;&amp;lt; ((S &amp;amp; (1 &amp;lt;&amp;lt; x - 1)) ? 1 : 0) &amp;lt;&amp;lt; &quot;\n&quot;;
		else if (order == &quot;toggle&quot;) S ^= 1 &amp;lt;&amp;lt; x - 1;
		else if (order == &quot;all&quot;) S = ~(0 &amp;lt;&amp;lt; 19);
		else S = 0;
		bit = bitset&amp;lt;20&amp;gt;(S); // 디버깅 용
	}
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준</category>
      <category>비트마스크</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/158</guid>
      <comments>https://yeeybook.tistory.com/158#entry158comment</comments>
      <pubDate>Sat, 7 Aug 2021 19:46:47 +0900</pubDate>
    </item>
    <item>
      <title>비트마스크 (BitMask)</title>
      <link>https://yeeybook.tistory.com/157</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;AND ( a &amp;amp; b )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘 다 1이면 1, 아니면 0&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;OR ( a | b )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘 다 0이면 0, 아니면 1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;XOR ( a ^ b )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘이 다르면 1, 아니면 0&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;NOT ( ~a )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;반대&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;LEFT SHIFT ( a &amp;lt;&amp;lt; b )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;a를 b비트만큼 왼쪽으로 shift. 빈 공간은 0으로 채움&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;a * 2^b 와 같음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;RIGHT SHIFT ( a &amp;gt;&amp;gt; b )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;a를 b비트만큼 오른쪽으로 shift. 빈 공간은 0으로 채움&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;a / 2^b 와 같음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;집합의 표현&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;집합의 i 번째 요소가 존재하면 1, 아니면 0으로 표현 가능&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ex) {1, 2, 5} =&amp;gt; 10011&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;연산자 우선순위&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;NOT&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;산술연산자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;SHIFT&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;비교연산자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;AND&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;XOR&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;OR&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;or;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;논리연산자&lt;/span&gt;&lt;/p&gt;</description>
      <category>개념</category>
      <category>비트마스크</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/157</guid>
      <comments>https://yeeybook.tistory.com/157#entry157comment</comments>
      <pubDate>Sat, 7 Aug 2021 16:57:57 +0900</pubDate>
    </item>
    <item>
      <title>[백준] 13460번 구슬 탈출 2 (C++) - 2</title>
      <link>https://yeeybook.tistory.com/156</link>
      <description>&lt;figure id=&quot;og_1619075197446&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;13460번: 구슬 탈출 2&quot; data-og-description=&quot;첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 &amp;le; N, M &amp;le; 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/13460&quot; data-og-url=&quot;https://www.acmicpc.net/problem/13460&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FEqiA/hyJXXElCYA/8jj6YJ5fKyEpwIk030JhMk/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/13460&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/13460&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FEqiA/hyJXXElCYA/8jj6YJ5fKyEpwIk030JhMk/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;13460번: 구슬 탈출 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 &amp;le; N, M &amp;le; 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B'&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;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;a href=&quot;https://yeeybook.tistory.com/109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;▷다른 방식 풀이 보러가기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;최대 10번 움직여서 빨간 구슬을 빼내야 하므로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상, 하, 좌, 우로 기울이는 순서를 1~10 까지 중복 순열로 지정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;대신, 같은 방향이 연속되지 않게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ex)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;1번 움직일 경우 가능한 순서 :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1) 상(&amp;uarr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2) 하(&amp;darr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3) 좌(&amp;larr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4) 우(&amp;rarr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;2번 움직일 경우 가능한 순서 :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1) 상(&amp;uarr;) &lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;2) &lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;) &lt;/span&gt;좌(&amp;larr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;3) &lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;) &lt;/span&gt;우(&amp;rarr;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4) &lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;11) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;) &lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;12) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;) &lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;)&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3번 움직일 경우 가능한 순서 :&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;1) 상(&amp;uarr;)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 상(&amp;uarr;)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3) 상(&amp;uarr;)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;4)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&amp;nbsp;&lt;/span&gt;좌(&amp;larr;) &lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;5)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;)&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;35)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;) &lt;span style=&quot;color: #333333;&quot;&gt;하(&amp;darr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;36)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;좌(&amp;larr;) &lt;span style=&quot;color: #333333;&quot;&gt;우(&amp;rarr;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이런 식으로 1번일 때부터 최대 10번까지 순서를 구한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;r번 기울이는 순서를 구하면 move() 함수에서 그 순서대로 구슬을 움직인다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이때 주의할 사항은&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구슬은 동시에 움직인다는 조건이 있기 때문에&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기울이는 방향을 향해 맨 앞에 있는 구슬부터 움직여 줘야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 기울이는 방향에 따라&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;두 구슬의 위치를 정렬해주었다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상(&amp;uarr;)&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; : x 좌표가 더 큰 거부터&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;하(&amp;darr;) : x 좌표가 더 작은 거부터&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;좌(&amp;larr;) : y 좌표가 더 작은 거부터&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;우(&amp;rarr;) : y 좌표가 더 큰 거부터&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;r번일 때 해당 순서대로 움직여서 성공하면 r을 출력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619075242083&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
using namespace std;

int N, M, res = -1, d;
int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 };
char board[11][11];
vector&amp;lt;int&amp;gt;order; // 기울이는 순서 -&amp;gt; 중복 순열
vector&amp;lt;pair&amp;lt;int,int&amp;gt; &amp;gt; ball; // 맨 처음 빨간 구슬과 파란 구슬 위치 저장

bool compare(pair&amp;lt;int, int&amp;gt; a, pair&amp;lt;int, int&amp;gt; b) { // 기울이는 방향에 따라 정렬이 달라짐 (먼저 위치해 있는 구슬 구분 위해)
	if (d == 0) return a.first &amp;lt; b.first; 
	else if (d == 1) return a.first &amp;gt; b.first;
	else if (d == 2) return a.second &amp;lt; b.second;
	else return a.second &amp;gt; b.second;
}

bool move() {
	bool success = false;
	vector&amp;lt;pair&amp;lt;int, int&amp;gt; &amp;gt; tmp, tmp2; // tmp2는 갱신되는 구슬 위치 저장용
	char arr[11][11] = { 0 };
	copy(&amp;amp;board[0][0], &amp;amp;board[0][0] + 11 * 11, &amp;amp;arr[0][0]); // 배열 복사
	copy(ball.begin(), ball.end(), back_inserter(tmp)); // 벡터 복사

	for (int t = 0; t &amp;lt; order.size(); t++) {
		d = order[t];
		sort(tmp.begin(), tmp.end(), compare); // 기울이는 방향에 먼저 있는 구슬부터 움직일 거임
		for (int k = 0; k &amp;lt; 2; k++) {
			int x = tmp[k].first, y = tmp[k].second;
			char currentBall = arr[x][y];
			arr[x][y] = '.'; // 구슬 흔적 지워주기
			if (currentBall == 'B') { // 파란 구슬
				while (1) {
					x += dx[order[t]], y += dy[order[t]];
					if (arr[x][y] == '#' || arr[x][y] == 'R') { // 파란 구슬이 벽이나 빨간 구슬에 부딪히면
						x -= dx[order[t]], y -= dy[order[t]];
						arr[x][y] = 'B';
						tmp2.push_back({ x,y }); // 파란 구슬의 새로운 위치 갱신
						break;
					}
					else if (arr[x][y] == 'O') return false; // 파란 구슬이 구멍에 빠진다면 실패
				}
			}
			else { // 빨간 구슬
				while (1) {
					x += dx[order[t]], y += dy[order[t]];
					if (arr[x][y] == '#' || arr[x][y] == 'B') { // 빨간 구슬이 벽이나 파란 구슬에 부딪히면
						x -= dx[order[t]], y -= dy[order[t]];
						arr[x][y] = 'R';
						tmp2.push_back({ x,y }); // 빨간 구슬의 새로운 위치 갱신
						break;
					}
					else if (arr[x][y] == 'O') {
						success = true; // 구슬이 동시에 빠지면 실패니까 일단 체크만 해둠
						break;
					}
				}
			}
		}
		tmp.clear();
		copy(tmp2.begin(), tmp2.end(), back_inserter(tmp)); // 벡터 복사
		tmp2.clear();
	}
	if (success) return true; // 빨간 구슬만 빠졌다면 성공
	return false;
}

void permutation(int before, int cnt, int r) { // 중복 순열. 단, 이전 방향과 겹치지 않게
	if (cnt == r) {
		if (move()) res = r;
		return;
	}
	for (int i = 0; i &amp;lt; 4; i++) {
		if (before == i) continue; // 이전 방향과 같으면 넘김
		order.push_back(i);
		permutation(i, cnt + 1, r);
		if (res != -1) return; // 성공이면 빠져나옴
		order.pop_back();
	}
}

int main() {
	cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; M;
	for (int i = 0; i &amp;lt; N; i++) {
		for (int j = 0; j &amp;lt; M; j++) {
			cin &amp;gt;&amp;gt; board[i][j];
			if (board[i][j] == 'R' || board[i][j] == 'B') ball.push_back({ i,j });
		}
	}
	for (int i = 1; i &amp;lt;= 10; i++) { // 1부터 10까지 뽑는 중복 순열
		permutation(-1, 0, i);
		if (res != -1) break; // 성공이면 빠져나옴
	}
	cout &amp;lt;&amp;lt; res;
	return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>백준</category>
      <category>중복 순열</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/156</guid>
      <comments>https://yeeybook.tistory.com/156#entry156comment</comments>
      <pubDate>Fri, 23 Apr 2021 01:44:31 +0900</pubDate>
    </item>
    <item>
      <title>[SWEA] 5656번 벽돌 깨기 (C++)</title>
      <link>https://yeeybook.tistory.com/155</link>
      <description>&lt;figure id=&quot;og_1618450682091&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SW Expert Academy&quot; data-og-description=&quot;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&quot; data-og-host=&quot;swexpertacademy.com&quot; data-og-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo&quot; data-og-url=&quot;https://swexpertacademy.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b8LuUZ/hyJSgLITs1/jWpOHGswe8XBLAVZkIp7w1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/o5HTK/hyJTFb090i/AU0oY3uD72taSYx3e2pVH1/img.png?width=3063&amp;amp;height=2071&amp;amp;face=0_0_3063_2071,https://scrap.kakaocdn.net/dn/gpFlt/hyJSaSeGkO/plZ1sZxXfetg5NZ07i9eK0/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428&quot;&gt;&lt;a href=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRQm6qfL0DFAUo&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b8LuUZ/hyJSgLITs1/jWpOHGswe8XBLAVZkIp7w1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/o5HTK/hyJTFb090i/AU0oY3uD72taSYx3e2pVH1/img.png?width=3063&amp;amp;height=2071&amp;amp;face=0_0_3063_2071,https://scrap.kakaocdn.net/dn/gpFlt/hyJSaSeGkO/plZ1sZxXfetg5NZ07i9eK0/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;SW Expert Academy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;swexpertacademy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;1. findTop&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0열부터 W - 1열까지 돌면서&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0행부터 탐색하며&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맨 위에 있는 벽돌을 찾아내는 함수이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 행위를 재귀로 N번 반복하면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;N개 중 N개를 중복 포함에서 뽑는 &lt;u&gt;중복 순열&lt;/u&gt;이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맨 위에 있는 벽돌을 찾아내면 거기에 구슬을 떨어뜨리고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다음 동작들을 (연쇄 벽돌 없애기, 벽돌 재 정렬하기) 실행한 뒤&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;돌아와서 재귀로 구슬을 떨어뜨릴 다음 위치를 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;2. findChain&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;구슬을 떨어뜨린 벽돌을 기준으로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;연쇄된 모든 벽돌을 찾아 0으로 바꿔주는 함수이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상하좌우를 &lt;u&gt;DFS&lt;/u&gt; 탐색하며&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;명중된 벽돌들을 찾아서 큐에 넣어준 뒤&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;0으로 바꿔주고 다음 큐로 넘어간다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;3. dropBricks&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;중간중간에 빈 공간이 생긴 벽돌을 재 정렬하는 함수이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;열 단위로 스택에 벽돌 종류를 담아준 다음&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;맨 밑에서부터 pop해준 뒤&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;나머지 공간엔 0으로 채워준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;b&gt;4. countBricks&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;&quot;&gt;남은 벽돌의 개수를 카운트하는 함수이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;&quot;&gt;findTop을 N번 반복하지 못 하는 경우도 있기 때문에&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;&quot;&gt;재귀로 N번 반복했을 때 뿐만 아니라&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;span style=&quot;&quot;&gt;반복문이 끝나고 나서도 호출해 주어야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618449704888&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;queue&amp;gt;
#include &amp;lt;stack&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;climits&amp;gt;
using namespace std;

class info {
public:
	int x, y, num;
	info(int x, int y, int num) {
		this-&amp;gt;x = x;
		this-&amp;gt;y = y;
		this-&amp;gt;num = num;
	}
};

int N, W, H, tot, res;
int dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 };
queue&amp;lt;info&amp;gt; shoot; // 명중하는 벽돌 위치 저장
stack&amp;lt;int&amp;gt; brick; // 재정렬 위해 벽돌 종류 저장

void countBricks(int newArr[][13]) {
	int cnt = 0;
	for (int m = 0; m &amp;lt; H; m++) for (int k = 0; k &amp;lt; W; k++) if (newArr[m][k] &amp;gt; 0) cnt++; // 남은 벽돌 개수 세기
	res = min(res, cnt);
}

void dropBricks(int newArr[][13]) { // 남은 벽돌들 재정렬
	for (int j = 0; j &amp;lt; W; j++) {
		for (int i = 0; i &amp;lt; H; i++) if (newArr[i][j] &amp;gt; 0) brick.push(newArr[i][j]);
		for (int i = H - 1; i &amp;gt;= 0; i--) {
			if (!brick.empty()) {
				newArr[i][j] = brick.top(); // 밑에서부터 벽돌 채워 넣음
				brick.pop();
			}
			else newArr[i][j] = 0; // 나머지는 0으로 채워 넣음
		}
	}
}

void findChain(int X, int Y, int newArr[][13]) { // 연쇄 벽돌들 찾기 - DFS
	bool chk[16][13] = { false }; // 방문 체크
	shoot.push(info(X, Y, newArr[X][Y]));
	newArr[X][Y] = 0;
	while (!shoot.empty()) {
		for (int i = 0; i &amp;lt; 4; i++) {
			int x = shoot.front().x, y = shoot.front().y, cnt = shoot.front().num;
			while (--cnt &amp;gt; 0) {
				x += dx[i], y += dy[i];
				if (x &amp;lt; 0 || x &amp;gt;= H || y &amp;lt; 0 || y &amp;gt;= W) break; // 범위 벗어나면 나옴
				if (newArr[x][y] &amp;gt; 0) shoot.push(info(x, y, newArr[x][y]));
				newArr[x][y] = 0;
			}
		}
		shoot.pop();
	}
}

void findTop(int arr[][13], int n) { // 맨 위의 벽돌 찾기 - 중복 순열
	if (n == N) {
		countBricks(arr);
		return;
	}
	for (int j = 0; j &amp;lt; W; j++) { // 각 열마다 맨 위의 벽돌 찾기
		int i = -1;
		while (true) if (++i == H || arr[i][j] &amp;gt; 0) break; // 범위를 벗어나거나 벽돌이면 나온다
		if (i == H) continue; // 벽돌이 없으면 다음 열로 이동

		int newArr[16][13] = { 0 };
		copy(&amp;amp;arr[0][0], &amp;amp;arr[0][0] + 16 * 13, &amp;amp;newArr[0][0]); // 이차원 배열 복사 후 사용
		findChain(i, j, newArr);
		dropBricks(newArr);
		findTop(newArr, n + 1);
	}
	countBricks(arr); // 재귀로 못 넘어가는 경우도 있기 때문에 여기서도 res 갱신 시켜준다.
}

int main() {
	int T;
	cin &amp;gt;&amp;gt; T;
	for (int t = 1; t &amp;lt;= T; t++) {
		cin &amp;gt;&amp;gt; N &amp;gt;&amp;gt; W &amp;gt;&amp;gt; H;
		int arr[16][13] = { 0 };
		for (int i = 0; i &amp;lt; H; i++) for (int j = 0; j &amp;lt; W; j++) cin &amp;gt;&amp;gt; arr[i][j];
		res = INT_MAX;
		findTop(arr, 0);
		cout &amp;lt;&amp;lt; &quot;#&quot; &amp;lt;&amp;lt; t &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; res &amp;lt;&amp;lt; &quot;\n&quot;;
	}

	return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;저번 달에 시도했을 때&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;명중한 벽돌을 없애지 않고 체크 배열로 표시만 해두면서 풀었더니&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;상하좌우에 위치한 유효 벽돌을 골라내는 게 너무 힘들어서&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;다음에 다시 풀어봐야지~ 하고 미룬 지 한 달이 지났다..&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;과제로 나와버린 김에&amp;nbsp;&lt;s&gt;(강제로)&lt;/s&gt;&amp;nbsp;다시 직면했으나&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;몇 시간 내내 또 같은 실수를 반복하고 있는 나를 발견하고&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그냥 문제에 나와있는 그대로&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;벽돌을 명중시키면 쿨하게 없애버리는 동작을 단계별로 구현해보았다.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;그러니까 갑자기 술술 풀리길래 허무했다.&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;이 방법이 더 귀찮을 거 같아서 안 움직이고 체크만 하는 방식을 고집했었는데&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;오히려 그 반대였던 게 함정ㅠㅠ&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;언제쯤 시뮬레이션 문제를 고통받지 않고 한 번에 구현해낼 수 있을까,,&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>SWEA</category>
      <category>dfs</category>
      <category>시뮬레이션</category>
      <category>중복 순열</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/155</guid>
      <comments>https://yeeybook.tistory.com/155#entry155comment</comments>
      <pubDate>Thu, 15 Apr 2021 11:10:11 +0900</pubDate>
    </item>
    <item>
      <title>[SWEA] 7465번 창용 마을 무리의 개수 (JAVA)</title>
      <link>https://yeeybook.tistory.com/152</link>
      <description>&lt;figure id=&quot;og_1616070702067&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;SW Expert Academy&quot; data-og-description=&quot;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&quot; data-og-host=&quot;swexpertacademy.com&quot; data-og-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU&amp;amp;categoryId=AWngfZVa9XwDFAQU&amp;amp;categoryType=CODE&amp;amp;&amp;amp;&amp;amp;&quot; data-og-url=&quot;https://swexpertacademy.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eElwIH/hyJBlezN4a/kvCSF5K0oLlUW21XuaMkfk/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/A3jks/hyJBgqOguY/X5okbezKYC6Awe9uPx0dek/img.png?width=3063&amp;amp;height=2071&amp;amp;face=0_0_3063_2071,https://scrap.kakaocdn.net/dn/dDrcb4/hyJBmxOC31/NpUrC8p3Zx1eKcIMCjw200/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428&quot;&gt;&lt;a href=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU&amp;amp;categoryId=AWngfZVa9XwDFAQU&amp;amp;categoryType=CODE&amp;amp;&amp;amp;&amp;amp;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWngfZVa9XwDFAQU&amp;amp;categoryId=AWngfZVa9XwDFAQU&amp;amp;categoryType=CODE&amp;amp;&amp;amp;&amp;amp;&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eElwIH/hyJBlezN4a/kvCSF5K0oLlUW21XuaMkfk/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/A3jks/hyJBgqOguY/X5okbezKYC6Awe9uPx0dek/img.png?width=3063&amp;amp;height=2071&amp;amp;face=0_0_3063_2071,https://scrap.kakaocdn.net/dn/dDrcb4/hyJBmxOC31/NpUrC8p3Zx1eKcIMCjw200/img.jpg?width=428&amp;amp;height=428&amp;amp;face=0_0_428_428');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;SW Expert Academy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;swexpertacademy.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;기본적인 Union-Find 문제이다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;좀 더 효율적인 비교를 위해&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;union 연산에서 트리의 깊이(rank)를 이용하여&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;rank가 더 높은 집합에 rank가 낮은 집합을 붙이게 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;rank가 같을 때는 어쩔 수 없이&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;둘 중 하나는 증가돼야 하므로 + 1 해주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;rank가 다를 때&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_0748.JPG&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;399&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebe655/btq0teEAW6R/1TcyNkbAAeIWmoKiBNVNvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebe655/btq0teEAW6R/1TcyNkbAAeIWmoKiBNVNvK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebe655/btq0teEAW6R/1TcyNkbAAeIWmoKiBNVNvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Febe655%2Fbtq0teEAW6R%2F1TcyNkbAAeIWmoKiBNVNvK%2Fimg.jpg&quot; data-filename=&quot;IMG_0748.JPG&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;399&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;rank가 동일할 때&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_0748 - 복사본.JPG&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;525&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FVYsC/btq0umCahBm/a00kxwG7jTbfWjGX0cIUHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FVYsC/btq0umCahBm/a00kxwG7jTbfWjGX0cIUHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FVYsC/btq0umCahBm/a00kxwG7jTbfWjGX0cIUHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFVYsC%2Fbtq0umCahBm%2Fa00kxwG7jTbfWjGX0cIUHk%2Fimg.jpg&quot; data-filename=&quot;IMG_0748 - 복사본.JPG&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;525&quot; width=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1616070767000&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Scanner;

public class D4_7465_창용마을_무리의개수 {
	static int T, N, M, res;
	static int parentOf[], rank[];
	
	static int find(int a) {
		if(parentOf[a] == a) return a; // 자기 자신을 가리키면 부모를 찾은 거임
		return parentOf[a] = find(parentOf[a]);
	}
	
	static void union(int a, int b) {
		int parentOfA = find(a), parentOfB = find(b);
		if(rank[parentOfA] &amp;lt; rank[parentOfB]) { // 랭크(깊이)가 더 큰 집합에 작은 애가 붙음
			parentOf[parentOfA] = parentOfB;
			return;
		}
		if(rank[parentOfA] == rank[parentOfB]) rank[parentOfB]++; // 랭크가 같으면 하나는 + 1 해주어야 함
		parentOf[parentOfB] = parentOfA;
	}
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		T = sc.nextInt();
		for(int t = 1; t &amp;lt;= T; t++) {
			N = sc.nextInt(); M = sc.nextInt(); res = 0;
			parentOf = new int[N + 1]; rank = new int[N + 1];
			for(int i = 1; i &amp;lt;= N; i++) parentOf[i] = i; // 자기 자신을 가리키게 초기화
			for(int i = 0; i &amp;lt; M; i++) union(sc.nextInt(), sc.nextInt());
			for(int i = 1; i &amp;lt;= N; i++) if(parentOf[i] == i) res++; // 자기 자신을 가리키면 집합 하나라는 뜻
			System.out.println(&quot;#&quot; + t + &quot; &quot; + res);
		}	
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SWEA/D4</category>
      <category>Union-Find</category>
      <author>모닝수박</author>
      <guid isPermaLink="true">https://yeeybook.tistory.com/152</guid>
      <comments>https://yeeybook.tistory.com/152#entry152comment</comments>
      <pubDate>Thu, 18 Mar 2021 22:22:25 +0900</pubDate>
    </item>
  </channel>
</rss>