<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>한 일상</title>
    <link>https://hanil2.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 20 May 2026 05:32:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>HI2</managingEditor>
    <item>
      <title>Programmers - 행렬의 곱셈, 피보나치 수, 최솟값 만들기</title>
      <link>https://hanil2.tistory.com/100</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12949&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;행렬의&amp;nbsp;곱셈&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630838363324&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; solution(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; arr1, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; arr2)
{
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; answer;
    //
    int a_row = arr1.size();
    int a_col = arr1[0].size();
    int b_col = arr2[0].size();
    // 연산
    for(int r = 0; r &amp;lt; a_row; ++r)
    {
        vector&amp;lt;int&amp;gt; tmp;
        for(int c = 0; c &amp;lt; b_col; ++c)
        {
            int val = 0;
            for(int k = 0; k &amp;lt; a_col; ++k)
                val += arr1[r][k] * arr2[k][c];
            //
            tmp.push_back(val);
        }
        answer.push_back(tmp);
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 행렬? -&amp;gt; 3중 for문&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12945&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;피보나치&amp;nbsp;수&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630838376716&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int solution(int n)
{
    int answer = 0;
    // 피보나치 상수 정의 : f(0) = 0, f(1) = 1
    int fibo = 1, prev = 1, pprev = 0;
    for(int i = 2; i &amp;lt; n; ++i)
    {
        pprev = prev;
        prev = fibo;
        // mod 연산의 성질
        fibo = (prev + pprev) % 1234567;
    }
    //
    answer = fibo;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;최종값에&amp;nbsp;mod연산시&amp;nbsp;overflow&amp;nbsp;발생 &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;mod&amp;nbsp;연산의&amp;nbsp;성질에&amp;nbsp;따라&amp;nbsp;연산&amp;nbsp;중간결과에&amp;nbsp;mod&amp;nbsp;적용 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;※&amp;nbsp;(a+b)%c&amp;nbsp;=&amp;nbsp;((a%c)+(b%c))%c&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12941&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;최솟값&amp;nbsp;만들기&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630838389660&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;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

int solution(vector&amp;lt;int&amp;gt; A, vector&amp;lt;int&amp;gt; B)
{
    int answer = 0;
    //
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    //
    int sum = 0;
    int cnt = A.size();
    for(int i = 0; i &amp;lt; cnt; ++i)
    {
        int max, min;
        if(A.back() &amp;gt; B.back())
        {
            max = A.back();
            min = B.front();
            //
            sum += (max) * (min);
            //
            A.pop_back();
            B.erase(B.begin());
        }
        else
        {
            max = B.back();
            min = A.front();
            //
            sum += (max) * (min);
            //
            A.erase(A.begin());
            B.pop_back();
        }
    }
    //
    answer = sum;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;STL&amp;nbsp;vector &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;처음/끝&amp;nbsp;iterator :&amp;nbsp;v.&amp;nbsp;begin()&amp;nbsp;/&amp;nbsp;v.end() &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;처음/끝&amp;nbsp;data :&amp;nbsp;v.front()&amp;nbsp;/&amp;nbsp;v.back() &lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;v.end()는&amp;nbsp;마지막&amp;nbsp;데이터&amp;nbsp;[바로&amp;nbsp;다음]의&amp;nbsp;iterator(종료) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;&amp;nbsp;마지막&amp;nbsp;원소&amp;nbsp;제거&amp;nbsp;:&amp;nbsp;v.erase(v.end()&amp;nbsp;-1)&amp;nbsp;//or//&amp;nbsp;v.pop_pack()&lt;/p&gt;</description>
      <category>Algorithm</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/100</guid>
      <comments>https://hanil2.tistory.com/100#entry100comment</comments>
      <pubDate>Sun, 5 Sep 2021 19:39:59 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - JadenCase 문자열 만들기, N개의 최소공배수</title>
      <link>https://hanil2.tistory.com/99</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;JadenCase&amp;nbsp;문자열&amp;nbsp;만들기&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;7220명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630743681054&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

string solution(string s)
{
    string answer = &quot;&quot;;
    bool flag = true;
    //
    for(char&amp;amp; c : s)
    {
        // 공백문자 패스
        if(c == ' ')
        {
            flag = true;
            continue;
        }
        // 공백 이후 첫번째 문자
        if(flag == true)
        {
            flag = false;
            c = toupper(c); 
        }
        else
            c = tolower(c); 
    }
    //
    answer = s;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 시행착오 : sstream 사용해서 단어 단위로 분리해서 첫글자 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (주어진 문장에 공백이 2개 이상 있는 경우가 존재!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 해결 : 한글자씩 조건 검사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12953&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;N개의&amp;nbsp;최소공배수&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;7722명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630743688216&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int GCD(int a, int b)
{ // 유클리드 호제법
    if(b == 0)
        return a;
    else 
        return GCD(b, a % b);
    //
    return -1;
}

int LCM(int a, int b)
{
    int result = (a * b) / GCD(a, b);
    //
    return result;
}

int solution(vector&amp;lt;int&amp;gt; arr)
{
    int answer = arr[0];
    //
    for(int i : arr)
        answer = LCM(i, answer);
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 유클리드 호제법을 사용한 gcd(최대공약수) 계산 (mod연산 특성에 의해 매개변수 대소비교 불필요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# lcm = a * b * gcd(a, b)&lt;/p&gt;</description>
      <category>Algorithm</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/99</guid>
      <comments>https://hanil2.tistory.com/99#entry99comment</comments>
      <pubDate>Sat, 4 Sep 2021 17:25:23 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 숫자 문자열과 영단어, 위클리 챌린지 1주차, 2주차, 4주차, 5주차</title>
      <link>https://hanil2.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/81301&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;숫자&amp;nbsp;문자열과&amp;nbsp;영단어&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV1&amp;nbsp;/&amp;nbsp;5286명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630489020389&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

void ReplaceAll(string&amp;amp; text, string pattern, string replace)
{
    int pos = 0, offset = 0;
    while(true)
    {
        pos = text.find(pattern, offset);
        if(pos == string::npos)
            break;
        //
        text.replace(text.begin() + pos,
                     text.begin() + pos + pattern.size(),
                     replace);
        offset = pos + replace.size();
    }
}

int solution(string s)
{
    int answer = 0;
    //
    string val = s;
    vector v = {&quot;zero&quot;, &quot;one&quot;, &quot;two&quot;, &quot;three&quot;, &quot;four&quot;,
                &quot;five&quot;, &quot;six&quot;, &quot;seven&quot;, &quot;eight&quot;, &quot;nine&quot;};
    //
    for(int i = 0; i &amp;lt; v.size(); ++i)
        ReplaceAll(val, v[i], to_string(i));
    //
    answer = stoi(val);
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;string,&amp;nbsp;replace,&amp;nbsp;replaceAll&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/82612&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;1주차&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV1&amp;nbsp;/&amp;nbsp;6494명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630572852696&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

long long solution(int price, int money, int count)
{
    long long answer = 0;
    //
    long long cost = 0, m = money, c = count;
    //
    for(int i = 1; i &amp;lt; count+1; ++i)
        cost += price * i;
    //
    answer = cost - money;
    if(answer &amp;lt; 0)
        answer = 0;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 반환값 자료형 int -&amp;gt; longlong&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/83201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2주차&lt;/a&gt; ] : &amp;lt; LV1 / 3729명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630572884864&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt; // sort

using namespace std;

string solution(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; scores)
{
    string answer = &quot;&quot;;
    //
    float score;
    int selfScore, sum;
    char grade;
    //
    int count = scores.size();
    for(int i = 0; i &amp;lt; count; ++i)
    {
        // 변수 초기화
        score = selfScore = sum = grade = 0;
        // 개인 점수 종합
        vector&amp;lt;int&amp;gt; v;
        for(int j = 0; j &amp;lt; count; ++j)
            v.push_back(scores[j][i]);
        // 본인 평가 분리
        selfScore = v[i];
        v.erase(v.begin() + i);
        /* 평균 점수 계산 */
        // 총점
        for(int score : v)
            sum += score;
        // 최고점, 최저점
        sort(v.begin(), v.end());
        int min = *v.begin();
        int max = *(v.end()-1);
        // 유일한 최고점 or 유일한 최저점이 아니면
        if(min &amp;lt;= selfScore &amp;amp;&amp;amp;  selfScore &amp;lt;= max)
            score = ((float)(sum + selfScore) / count);
        else
            score = ((float)sum / (count - 1));
        // 평점 -&amp;gt; 학점 변환
        if(score &amp;gt;= 90.0f)
            grade = 'A';
        else if(score &amp;gt;= 80.0f)
            grade = 'B';
        else if(score &amp;gt;= 70.0f)
            grade = 'C';
        else if(score &amp;gt;= 50.0f)
            grade = 'D';
        else
            grade = 'F';
        //
        answer += grade;
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# vector.erase() 사용법 2가지 : 단일(iterater), 범위(beginIndex(이상), endIndex(미만))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# vector.end() iterator는 null이므로 마지막 값을 얻으려면 '-1'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/84325&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;4주차&lt;/a&gt; ] : &amp;lt; LV1 / 2173명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630572904416&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;map&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;
//===============================================//
typedef pair&amp;lt;string, int&amp;gt; si;
//===============================================//
bool cmp(const si&amp;amp; a, const si&amp;amp; b)
{
    if(a.second == b.second)
        return a.first &amp;lt; b.first;
    //
    return a.second &amp;gt; b.second;
}
//===============================================//
string solution(vector&amp;lt;string&amp;gt; table, vector&amp;lt;string&amp;gt; languages, vector&amp;lt;int&amp;gt; preference)
{
    string answer = &quot;&quot;;
    // 계산된 결과를 저장할 map(언어이름 : key, 점수 : value)
    map&amp;lt;string, int&amp;gt; result;
    for(string s : table)
    {
        // table string을 ' ' 단위로 분해, vector에 저장
        vector&amp;lt;string&amp;gt; v;
        while(!s.empty())
        {
            string tmp = s.substr(0, s.find(' '));
            s.erase(0, tmp.length() + 1);
            //
            v.push_back(tmp);
        }
        // map에 언어별 점수 입력
        map&amp;lt;string, int&amp;gt; jobScore;
        int max = v.size() - 1;
        for(int i = 0; i &amp;lt; max; ++i)
            jobScore[v[i+1]] = max - i;
        // 사용언어 점수조회 &amp;amp; 선호도 계산
        for(int i = 0; i &amp;lt; languages.size(); ++i)
        {
            int langValue = 0;
            if(jobScore.count(languages[i]) != 0)
                langValue = jobScore[languages[i]];

            // 직업군별 계산된 결과 저장
            result[v[0]] += langValue * preference[i];
        }
    }
    // 고득점 순으로 정렬(내림차순), 동점시 직군명 사전순
    vector&amp;lt;si&amp;gt; v(result.begin(), result.end());
    sort(v.begin(), v.end(), cmp);
    //
    answer = v[0].first;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# string 분할 by split(' ')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; sstream 사용하는 방법도 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# map value로 정렬, value같을시 key값 사전순 정렬&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/84512&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;5주차&lt;/a&gt; ] : &amp;lt; LV2 / 1192명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1630672344259&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;

using namespace std;

vector&amp;lt;string&amp;gt; v;
vector&amp;lt;int&amp;gt; wordSize = { 1, 2, 3, 4, 5 };
vector&amp;lt;char&amp;gt; chars = { 'A', 'E', 'I', 'O', 'U' };

void repeatPermutation(int depth, string str, int size)
{
    if(depth == size)
    {
        v.push_back(str);
        return;
    }
    //
    for(int i = 0; i &amp;lt; chars.size(); ++i)
    {
        str[depth] = chars[i];
        repeatPermutation(depth + 1, str, size);
    }
}

int solution(string word)
{
    int answer = 0;
    //
    for(int i = 1; i &amp;lt;= wordSize.size(); ++i)
    {
        string str(i, ' ');
        repeatPermutation(0, str, i);
    }
    //
    sort(v.begin(), v.end());
    //
    auto it = find(v.begin(), v.end(), word);
    if(it == v.end())
        return -1;
    //
    answer = it - v.begin() + 1;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 재귀를 이용한 중복순열 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>Algorithm</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/98</guid>
      <comments>https://hanil2.tistory.com/98#entry98comment</comments>
      <pubDate>Wed, 1 Sep 2021 18:37:34 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 게임 맵 최단거리, 괄호 변환, 메뉴 리뉴얼</title>
      <link>https://hanil2.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/1844&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;게임 맵 최단거리&lt;/a&gt; ] : &amp;lt; LV2 / 2374명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624521323235&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;vector&amp;gt;
#include &amp;lt;queue&amp;gt;

using namespace std;

struct V2
{
    int x, y;
    V2(int _x, int _y)
    {
        x = _x;
        y = _y;
    }
};

int solution(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; maps)
{
    int answer = 0;
    //
    const int height = maps.size();
    const int width = maps[0].size();
    //
    vector&amp;lt;vector&amp;lt;bool&amp;gt;&amp;gt; open(height, vector&amp;lt;bool&amp;gt;(width, true));
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; dist(height, vector&amp;lt;int&amp;gt;(width, -1));
    // left, right, up, down
    vector&amp;lt;V2&amp;gt; dir { V2(-1, 0) , V2(+1, 0) , V2(0, -1) , V2(0, +1) };
    // begin
    queue&amp;lt;V2&amp;gt; q;
    q.push(V2(0, 0));
    open[0][0] = false;
    dist[0][0] = 1;
    while(q.empty() == false)
    {
        V2 cur = q.front();
        q.pop();
        //
        for(int j = 0; j &amp;lt; dir.size(); ++j)
        {
            V2 pos = V2(cur.x + dir[j].x, cur.y + dir[j].y);
            int x = pos.x, y = pos.y;
            bool inRange =  ((0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; width) &amp;amp;&amp;amp; (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; height));

            if(inRange &amp;amp;&amp;amp; maps[y][x] &amp;amp;&amp;amp; open[y][x])
            {
                q.push(V2(x, y));
                open[y][x] = false;
                dist[y][x] = dist[cur.y][cur.x] + 1;
            }
        }
    }
    //
    return dist[height-1][width-1];
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# bfs(breadth-first search) : queue, struct&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 참고 : &lt;a href=&quot;https://ansohxxn.github.io/programmers/114/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ansohxxn.github.io/programmers/114/&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60058&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;괄호&amp;nbsp;변환&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;8396명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624521339835&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;map&amp;gt;

using namespace std;

string Reversed(string s)
{
    string tmp = s.substr(1, s.size() - 2);
    //
    map&amp;lt;char, char&amp;gt; m;
    m['('] = ')';
    m[')'] = '(';
    //
    for(int i = 0; i &amp;lt; tmp.size(); ++i)
        tmp[i] = m[tmp[i]];
    //
    return tmp;
}

bool IsCorrect(string s)
{
    int pos = 0;
    while(true)
    {
        int pos = s.find(&quot;()&quot;);
        if(pos != string::npos)
            s.erase(pos, 2);
        else
            break;
    }
    //
    return s.empty();
}

bool IsBalanced(string s)
{
    map&amp;lt;char, int&amp;gt; m;
    //
    for(int i = 0; i &amp;lt; s.size(); ++i)
        ++m[s[i]];
    //
    return (m['('] == m[')']);
}

string Program(string p)
{
    if(p == &quot;&quot; || IsCorrect(p))
        return p;
    //
    string u = &quot;&quot;, v = &quot;&quot;;
    //
    int len = p.size();
    for(int i = 0; i &amp;lt; len; ++i)
    {
        u += p[i];
        if(IsBalanced(u))
        {
            v = p.substr(i+1, len-i-1);
            if(IsCorrect(u))
            {
                u += Program(v);
                return u;
            }
            else
            {
                string tmp = &quot;&quot;;
                tmp += &quot;(&quot;;
                tmp += Program(v);
                tmp += &quot;)&quot;;
                tmp += Reversed(u);
                return tmp;
            }
        }
    }
    //
    return &quot;&quot;;
}

string solution(string p)
{
    string answer = &quot;&quot;;
    //
    answer = Program(p);
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# stl string class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - void erase(pos, count)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - string substr(pos, count)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/72411&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;메뉴 리뉴얼&lt;/a&gt; ] : &amp;lt; LV2 / 3602명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624521349652&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
//
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;map&amp;gt;
//
using namespace std;
// ========================================================== //
typedef pair&amp;lt;string, int&amp;gt; si;
// ========================================================== //
bool cmp(const si&amp;amp; a, const si&amp;amp; b)
{ // 내림차순
    return a.second &amp;gt; b.second;
}
// ========================================================== //
void findOrderPattern(map&amp;lt;string, int&amp;gt;&amp;amp; m, int courseSize, string order)
{
    sort(order.begin(), order.end());
    //
    int len = order.length();
    vector&amp;lt;bool&amp;gt; comb(len, false);
    //
    for(int i = 0; i &amp;lt; courseSize; ++i)
        comb[i] = true;
    //
    do
    {
        string pattern = &quot;&quot;;
        for(int i = 0; i &amp;lt; len; ++i)
            if(comb[i])
                pattern += order[i];
        //
        m[pattern]++;
    } while(prev_permutation(comb.begin(), comb.end()));
}
// ========================================================== //
vector&amp;lt;string&amp;gt; solution(vector&amp;lt;string&amp;gt; orders, vector&amp;lt;int&amp;gt; course)
{
    vector&amp;lt;string&amp;gt; answer;
    //
    for(int menuCount : course)
    {
        map&amp;lt;string, int&amp;gt; m;
        // 주문패턴 저장
        for(string order : orders)
            findOrderPattern(m, menuCount, order);
        // 주문횟수 내림차순 정렬
        vector&amp;lt;si&amp;gt; v(m.begin(), m.end());
        sort(v.begin(), v.end(), cmp);
        // 2회 미만 주문 제외
        int maxCount = v.begin()-&amp;gt;second;
        if(maxCount &amp;lt; 2)
            continue;
        else
        { // 최다주문 메뉴 추출
            auto iter = v.begin(), end = v.end();
            for(; iter != end; ++iter)
                if(iter-&amp;gt;second == maxCount)
                    answer.push_back(iter-&amp;gt;first);
        }
    }
    //
    sort(answer.begin(), answer.end());
    // 중복제거
    answer.erase(unique(answer.begin(), answer.end()), answer.end());
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# brute force 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# combination : comparator, prev_permutation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# STL vector : unique&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# ETC : map, sort&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>Algorithm</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/97</guid>
      <comments>https://hanil2.tistory.com/97#entry97comment</comments>
      <pubDate>Thu, 24 Jun 2021 16:56:05 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 전화번호 목록, 소수 찾기, 예상 대진표</title>
      <link>https://hanil2.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42577&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;전화번호&amp;nbsp;목록&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;27125명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624092200729&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt; // sort()

using namespace std;

bool solution(vector&amp;lt;string&amp;gt; phone_book)
{
    bool answer = true;
    //
    sort(phone_book.begin(), phone_book.end());
    //
    int cnt = phone_book.size();
    for(int i = 0; i &amp;lt; cnt-1; ++i)
    {
        if(phone_book[i+1].find(phone_book[i]) == 0)
            return false;
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;sort(사전식&amp;nbsp;정렬)의&amp;nbsp;특성에&amp;nbsp;의해&amp;nbsp;현재&amp;nbsp;문자열이&amp;nbsp;다음&amp;nbsp;문자열의 &lt;br /&gt;접두어가&amp;nbsp;아니면&amp;nbsp;이후의&amp;nbsp;모든&amp;nbsp;문자열을&amp;nbsp;확인할&amp;nbsp;필요가&amp;nbsp;없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# str_val.find(str_cmp) 함수는 해당 문자열이 있는 위치를 반환하므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환값이 0일 때 str_val은 str_cmp로 시작한다 // startsWith&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42839&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;소수 찾기&lt;/a&gt; ] : &amp;lt; LV2 / 13655명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624092308336&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
//
#include &amp;lt;map&amp;gt; // m.size() // count of key
#include &amp;lt;cmath&amp;gt; // sqrt
#include &amp;lt;algorithm&amp;gt; // next_permutation

using namespace std;

bool IsPrime(int num)
{
    if(num == 0 || num == 1)
        return false;
    //
    for(int i = 2; i &amp;lt;= sqrt(num); ++i)
        if(num % i == 0)
            return false;
    //
    return true;
}

int solution(string numbers)
{
    int answer = 0;
    //
    map&amp;lt;int, int&amp;gt; m;
    vector&amp;lt;bool&amp;gt; v;
    string temp = &quot;&quot;;

    int count = numbers.size();
    for(int i = 1; i &amp;lt;= count; ++i)
    {
        v.clear();
        //
        for(int j = 0; j &amp;lt; i; ++j)
            v.push_back(true);
        for(int j = 0; j &amp;lt; count - i; ++j)
            v.push_back(false);
        //
        sort(v.begin(), v.end());
        do
        {
            temp = &quot;&quot;;
            //
            for(int i = 0; i &amp;lt; count; ++i)
                if(v[i] == true)
                    temp += numbers[i];
            //
            sort(temp.begin(), temp.end());
            do
            {
                int num = stoi(temp);
                if(IsPrime(num) == true)
                    ++m[num];
            } while (next_permutation(temp.begin(), temp.end()));
        } while (next_permutation(v.begin(), v.end()));
    }
    //
    return m.size();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# prime number&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# permutation, combination&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12985&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;예상 대진표&lt;/a&gt; ] : &amp;lt; LV2 / 4400명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1624092315416&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;algorithm&amp;gt; // swap

using namespace std;

int solution(int n, int a, int b)
{
    int answer = 1;
    //
    if(a &amp;gt; b)
        swap(a, b);
    //
    while(true)
    {
        if(a % 2 == 1 &amp;amp;&amp;amp; (b - a) == 1)
            break;
        else
            ++answer;
        //
        a += (a % 2);
        a /= 2;
        //
        b += (b % 2);
        b /= 2;
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# a = 2n-1, b = 2n인 경우 루프 종료&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm</category>
      <category>Sort</category>
      <category>startsWith</category>
      <category>string find</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/96</guid>
      <comments>https://hanil2.tistory.com/96#entry96comment</comments>
      <pubDate>Sat, 19 Jun 2021 17:44:09 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 카카오프렌즈 컬러링북, 수식 최대화, 튜플</title>
      <link>https://hanil2.tistory.com/95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/1829#&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;카카오프렌즈&amp;nbsp;컬러링북&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;4129명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623772887301&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;vector&amp;gt;
#include &amp;lt;map&amp;gt;
#include &amp;lt;algorithm&amp;gt; // min, max

using namespace std;

// global variables
static int index;
static map&amp;lt;int, int&amp;gt; areas;

void CheckArea(int x, int y, int m, int n, int color, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; pic)
{
    int val = pic[y][x];
    if(val == 0 || val != color)
        return;
    //
    ++areas[index];
    // set checked
    pic[y][x] = 0;
    // Recursive
    CheckArea(x, min(max(0, y-1), m-1), m, n, color, pic); // U
    CheckArea(x, min(max(0, y+1), m-1), m, n, color, pic); // D
    CheckArea(min(max(0, x-1), n-1), y, m, n, color, pic); // L
    CheckArea(min(max(0, x+1), n-1), y, m, n, color, pic); // R
}

vector&amp;lt;int&amp;gt; solution(int m, int n, vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; picture)
{
    // initialize global variables
    index = 0;
    areas.clear();
    //
    int number_of_area = 0;
    int max_size_of_one_area = 0;
    //
    int color = 0;
    for(int y = 0; y &amp;lt; m; ++y)
    {
        for(int x = 0; x &amp;lt; n; ++x)
        {
            color = picture[y][x];
            if(color != 0)
            {
                ++index;
                CheckArea(x, y, m, n, color, picture);
            }
        }
    }
    //
    number_of_area = areas.size();
    //
    auto iter = areas.begin(), end = areas.end();
    for(; iter != end; ++iter)
    {
        if(iter-&amp;gt;second &amp;gt; max_size_of_one_area)
            max_size_of_one_area = iter-&amp;gt;second;
    }
    //
    vector&amp;lt;int&amp;gt; answer(2);
    answer[0] = number_of_area;
    answer[1] = max_size_of_one_area;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# recursive&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# min(max(0, value), arrSize-1)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/67257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;수식 최대화&lt;/a&gt; ] : &amp;lt; LV2 / 4181명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623772904877&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt; // abs
#include &amp;lt;algorithm&amp;gt; // next_permutation

using namespace std;

vector&amp;lt;string&amp;gt; CutString(string s)
{
    vector&amp;lt;string&amp;gt; res;
    //
    int i = 0;
    while(true)
    {
        // end
        if(i == s.size())
        {
            res.push_back(s);
            break;
        }
        //
        if('0' &amp;lt;= s[i] &amp;amp;&amp;amp; s[i] &amp;lt;= '9')
        {
            ++i;
            continue;
        }
        else
        {
            // add number
            res.push_back(s.substr(0, i));
            s = s.substr(i, s.size());
            // add operator
            res.push_back(s.substr(0, 1));
            s = s.substr(1, s.size());
            //
            i = 0;
        }
    }
    //
    return res;
}

long long Operation(string a, string b, string op)
{
    long long result = 0;
    //
    long long la = stoll(a);
    long long lb = stoll(b);
    //
    switch(op[0])
    {
        case '+':
            result = la + lb;
            break;
        case '-':
            result = la - lb;
            break;
        case '*':
            result = la * lb;
            break;
    }
    //
    return result;
}

long long solution(string expression)
{
    long long answer = 0;
    //
    string s = expression;
    vector&amp;lt;long long&amp;gt; res{};
    vector&amp;lt;string&amp;gt; expCut{};
    vector&amp;lt;string&amp;gt; v{};
    vector&amp;lt;string&amp;gt; ops = {&quot;+&quot;, &quot;-&quot;, &quot;*&quot;};
    vector&amp;lt;int&amp;gt; order = {0, 1, 2};
    //
    expCut = CutString(s);
    //
    do
    {
        v.clear();
        v = expCut;
        long long val = 0;
        //
        for(int j = 0; j &amp;lt; ops.size(); ++j)
        {
            auto pos = v.begin();
            for(; pos != v.end(); ++pos)
            {
                if(*pos == ops[order[j]])
                {
                    val = Operation(*(pos-1), *(pos+1), *pos);
                    --pos;
                    v.erase(pos, pos + 3);
                    v.insert(pos, to_string(val));
                }
            }
        }
        //
        val = abs(stoll(v[0]));
        res.push_back(val);

    } while(next_permutation(order.begin(), order.end()));
    //
    long long max = 0;
    for(int i = 0; i &amp;lt; res.size(); ++i)
        if(res[i] &amp;gt; max)
            max = res[i];
    //
    answer = max;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# string to long long : stoll(string)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# next_permutation&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/64065&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;튜플&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;6401명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623936927928&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;map&amp;gt;
#include &amp;lt;algorithm&amp;gt; // remove

#define pii pair&amp;lt;int,int&amp;gt;

using namespace std;

bool cmp(const pii&amp;amp; a, const pii&amp;amp; b)
{
    if(a.second == b.second)
        return a.first &amp;gt; b.first;
    //
    return a.second &amp;gt; b.second;
}

vector&amp;lt;int&amp;gt; solution(string s)
{
    vector&amp;lt;int&amp;gt; answer;
    // erase '{', '}'
    s.erase(remove(s.begin(), s.end(), '{'), s.end());
    s.erase(remove(s.begin(), s.end(), '}'), s.end());
    // parse data split by ',' &amp;amp; add to map&amp;lt;int, int&amp;gt;
    map&amp;lt;int, int&amp;gt; m;
    int pos = 0;
    string temp;
    while(pos != string::npos)
    {
        pos = s.find(',');
        temp = s.substr(0, pos);
        s = s.substr(pos+1, s.size());
        ++m[stoi(temp)];
    }
    // sort map by value, descending order
    // typedef pii : pair&amp;lt;int, int&amp;gt;
    vector&amp;lt;pii&amp;gt; vec(m.begin(), m.end());
    sort(vec.begin(), vec.end(), cmp);
    /* ver. lamda
    sort(vec.begin(), vec.end(),
         [](pii a, pii b) { return a.second &amp;gt; b.second; });
    */
    for(auto v : vec)
        answer.push_back(v.first);
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# remove char in string : s.erase(remove(s.begin(), s.end(), ch), s.end()) // algorithm&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# parse string : string to int, stoi(str)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# sort map by value(define, cmp, lamda) : vector&amp;lt;pair&amp;lt;T, T&amp;gt;&amp;gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm</category>
      <category>Max</category>
      <category>Min</category>
      <category>recursive func</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/95</guid>
      <comments>https://hanil2.tistory.com/95#entry95comment</comments>
      <pubDate>Wed, 16 Jun 2021 01:05:40 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 문자열 압축, 타겟 넘버, 오픈 채팅방</title>
      <link>https://hanil2.tistory.com/94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/60057&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;문자열&amp;nbsp;압축&lt;/a&gt; ] : &amp;lt; LV2 / 11968명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623736488667&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;iostream&amp;gt;

using namespace std;

int Compress(string s, int unit)
{
    vector&amp;lt;string&amp;gt; v;
    string res = &quot;&quot;;
    int i = 0, count = 1;
    //
    while(true)
    {
        v.push_back(s.substr(i, unit));
        i += unit;
        if(i &amp;gt;= s.size())
            break;
    }
    //
    for(int j = 0; j &amp;lt; v.size(); ++j)
    {
        if(j == v.size()-1)
        {
            if(v[j-1] == v[j])
                res += to_string(count) + v[j];
            else
                res += v[j];
            //
            break;
        }
        //
        if(v[j] == v[j+1])
            ++count;
        else
        {
            if(count &amp;gt; 1)
                res += to_string(count) + v[j];
            else
                res += v[j];
            //
            count = 1;
        }
    }
    //
    return res.size();
}

int solution(string s)
{
    int answer = 0; // min length
    //
    int length = s.size();
    int maxUnit = length / 2;
    int compLength = length;
    //
    for(int i = 1; i &amp;lt;= maxUnit; ++i)
    {
        compLength = Compress(s, i);
        if(compLength &amp;lt; length)
            length = compLength;
    }
    answer = length;
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/43165&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;타겟&amp;nbsp;넘버&lt;/a&gt; ] : &amp;lt; LV2 / 18093명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623736517075&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;deque&amp;gt;
#include &amp;lt;cmath&amp;gt;

using namespace std;

int solution(vector&amp;lt;int&amp;gt; numbers, int target)
{
    int answer = 0;
    int count = numbers.size();
    // target을 구할 수 없는 경우 예외처리
    int max, min = 0;
    for(int i = 0; i &amp;lt; count; ++i)
    {
        max += numbers[i];
        min -= numbers[i];
    }
    if(target &amp;gt; max || target &amp;lt; min)
        return 0;
    else if(target == max || target == min)
        return 1;
    // 모든 경우의 수 계산
    deque&amp;lt;int&amp;gt; dq;
    dq.push_back(0);
    for(int i = 0; i &amp;lt; count; ++i)
    {
        for(int j = 0; j &amp;lt; pow(2, i); ++j)
        {
            int temp = dq.front();
            dq.pop_front();
            //
            dq.push_back(temp + numbers[i]);
            dq.push_back(temp - numbers[i]);
        }
    }
    // 원소 갯수는 2의 배수이고, [대칭구조]이므로
    // (size / 2) 까지만 탐색하고, -target인 경우도 포함시킨다.
    for(int i = 0; i &amp;lt; dq.size() / 2; ++i)
    {
        if(dq[i] == target || dq[i] == -target)
            ++answer;
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# deque, pop_front()&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42888&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;오픈 채팅방&lt;/a&gt; ] : &amp;lt; LV2 / 10163명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623736529883&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;map&amp;gt;

using namespace std;

vector&amp;lt;string&amp;gt; SplitSpace(string s)
{
    vector&amp;lt;string&amp;gt; result;
    //
    string space = &quot; &quot;;
    int pos = 0;
    while (pos != string::npos)
    {
        pos = s.find(space);
        result.push_back(s.substr(0, pos));
        s.erase(0, pos + space.length());
    }
    //
    return result;
}

vector&amp;lt;string&amp;gt; solution(vector&amp;lt;string&amp;gt; record)
{
    vector&amp;lt;string&amp;gt; answer;
    //
    map&amp;lt;string, string&amp;gt; mID; // key : id , value : name
    //
    vector&amp;lt;string&amp;gt; msg;
    for(int i = 0; i &amp;lt; record.size(); ++i)
    {
        msg.clear();
        msg = SplitSpace(record[i]);
        if(msg.size() &amp;gt; 2)
            mID[msg[1]] = msg[2];
    }
    //
    map&amp;lt;string, string&amp;gt; mAction;
    mAction[&quot;Enter&quot;] = &quot;들어왔습니다.&quot;;
    mAction[&quot;Leave&quot;] = &quot;나갔습니다.&quot;;
    //
    for(int i = 0; i &amp;lt; record.size(); ++i)
    {
        msg.clear();
        msg = SplitSpace(record[i]);
        if(msg[0] == &quot;Enter&quot; || msg[0] == &quot;Leave&quot;)
        {
            string temp = mID[msg[1]] + &quot;님이 &quot; + mAction[msg[0]];
            answer.push_back(temp);
        }
    }

    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 공백제거 : substr(pos, space(&quot; &quot;)), string::npos&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# map&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Algorithm</category>
      <category>deque</category>
      <category>map</category>
      <category>programmers</category>
      <category>string 공백 제거</category>
      <category>문자열 압축</category>
      <category>오픈 채팅방</category>
      <category>타겟 넘버</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/94</guid>
      <comments>https://hanil2.tistory.com/94#entry94comment</comments>
      <pubDate>Tue, 15 Jun 2021 14:56:38 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 기능 개발, 짝지어 제거하기, 멀쩡한 사각형</title>
      <link>https://hanil2.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42586&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;기능&amp;nbsp;개발&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;22829명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623228778210&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

vector&amp;lt;int&amp;gt; solution(vector&amp;lt;int&amp;gt; progresses, vector&amp;lt;int&amp;gt; speeds)
{
    vector&amp;lt;int&amp;gt; answer;
    //
    int totalRelease = progresses.size();
    int todayRelease = 0;
    int priority = 0;
    while(priority &amp;lt; totalRelease)
    {
        todayRelease = 0;
        // daily work
        for(int i = priority; i &amp;lt; progresses.size(); ++i)
            progresses[i] += speeds[i];
        // check release
        for(int i = priority; i &amp;lt; progresses.size(); ++i)
        {
            if(progresses[i] &amp;gt;= 100)
            {
                ++todayRelease;
                ++priority;
            }
            else
                break;
        }
        //
        if(todayRelease != 0)
            answer.push_back(todayRelease);
    }
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12973&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;짝지어&amp;nbsp;제거하기&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;5325명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623490805888&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;string&amp;gt;
#include &amp;lt;stack&amp;gt;

using namespace std;

int solution(string s)
{
    stack&amp;lt;char&amp;gt; res;
    // 
    if( (s.size() &amp;lt; 2) || (s.size() % 2 == 1) )
        return 0;
    //
    for(int i = 0; i &amp;lt; s.size(); ++i)
    {
        char c = s[i];
        //
        if(res.empty())
            res.push(c);
        else
        {
            if(res.top() == c)
                res.pop();
            else
                res.push(c);
        }
    }
    //
    return res.empty();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#&amp;nbsp;STL::stack &lt;br /&gt;# top 실행 전 empty 체크(Segmentation Fault)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/62048&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;멀쩡한&amp;nbsp;사각형&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;8014&amp;nbsp;명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623561026964&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

long long GetGCD(long long a, long long b)
{
    long long mod = 0;
    //
    while(b != 0)
    {
        mod = a % b;
        a = b;
        b = mod;
    }
    //
    return a;
}

long long solution(int w,int h)
{
    long long answer = (long long)w * (long long)h;
    // GetGCD ( 유클리드 호제법 )
    long long gcd = GetGCD(w, h);
    // logic
    answer -= (w + h - gcd);
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 최대공약수, gcd, 유클리드 호제법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# logic : (1 + (w' - 1) + (h' - 1)) * gcd =&amp;gt; w + h - gcd&lt;/p&gt;</description>
      <category>Algorithm</category>
      <category>GCD</category>
      <category>Stack</category>
      <category>STL::stack</category>
      <category>유클리드 호제법</category>
      <category>최대공약수</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/93</guid>
      <comments>https://hanil2.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 9 Jun 2021 17:55:44 +0900</pubDate>
    </item>
    <item>
      <title>Programmers - 더 맵게, 단체사진 찍기, 124 나라의 숫자</title>
      <link>https://hanil2.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[ &lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42626&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;더&amp;nbsp;맵게&lt;/a&gt; ] : &amp;lt; LV2 / 14814명 &amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1622968348009&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;queue&amp;gt;

using namespace std;

int solution(vector&amp;lt;int&amp;gt; scoville, int K)
{
    int answer = 0;
    // 우선순위 큐 생성(오름차순)
    priority_queue&amp;lt;int, vector&amp;lt;int&amp;gt;, greater&amp;lt;int&amp;gt;&amp;gt; pq;
    //
    int count = scoville.size();
    for(int i = 0; i &amp;lt; count; ++i)
        pq.push(scoville[i]);
    //
    while(pq.top() &amp;lt; K &amp;amp;&amp;amp; pq.size() &amp;gt; 1)
    {
        int newSco = 0;
        newSco += pq.top();
        pq.pop();
        newSco += (pq.top() * 2);
        pq.pop();
        //
        if(newSco &amp;lt; K &amp;amp;&amp;amp; pq.size() == 0)
            return -1;
        //
        pq.push(newSco);
        //
        ++answer;
	}
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# priority_queue ( Heap )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - push( data ) 후 정렬상태 유지 ( O(LogN) )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - top( ) : top에 저장된 data 반환, pop ( ) : top 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/1835&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;단체사진&amp;nbsp;찍기&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;1343명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623056072827&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt; // vector.find(), next_permutation()
#include &amp;lt;cmath&amp;gt; // abs()

using namespace std;

bool Check(vector&amp;lt;char&amp;gt; v, int n, vector&amp;lt;string&amp;gt; data)
{
    for(int i = 0; i &amp;lt; n; ++i)
    {
        char c1 = data[i][0];
        char c2 = data[i][2];
        char sign = data[i][3];
        int dist_condition = data[i][4] - '0';
        //
        int i1 = find(v.begin(), v.end(), c1) - v.begin();
        int i2 = find(v.begin(), v.end(), c2) - v.begin();
        int dist_value = abs(i1 - i2) - 1;
        //
        switch(sign)
        {
            case '=':
            {
                if(dist_value != dist_condition)
                    return false;
            }
            break;
            case '&amp;gt;':
            {
                if(dist_value &amp;lt;= dist_condition)
                    return false;
            }
            break;
            case '&amp;lt;':
            {
                if(dist_value &amp;gt;= dist_condition)
                    return false;
            }
            break;
        }
    }
    //
    return true;
}

int solution(int n, vector&amp;lt;string&amp;gt; data)
{
    int answer = 0;
    // Set Array
    vector&amp;lt;char&amp;gt; v = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    // Get Combination &amp;amp; Check Condition
    do
    {
        if(Check(v, n, data) == true)
            ++answer;
    } while(next_permutation(v.begin(), v.end()));
    //
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# algorithm&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1. index 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - vector.find(begin, end, value) - begin&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 반환값이 iterator이므로 begin과 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;nbsp;범위 내에 value가 없을 시 end 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2. next_permutation(begin, end) : 순열 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[&amp;nbsp;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12899&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;124&amp;nbsp;나라의&amp;nbsp;숫자&lt;/a&gt;&amp;nbsp;]&amp;nbsp;:&amp;nbsp;&amp;lt;&amp;nbsp;LV2&amp;nbsp;/&amp;nbsp;12859명&amp;nbsp;&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1623069851311&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;string&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt; // reverse()

using namespace std;

string solution(int n)
{
    string answer = &quot;&quot;;
    string s = &quot;&quot;;
    while(n &amp;gt; 0)
    {
        int mod = n % 3;
        if(mod == 0)
            s += '4';
        else
            s += to_string(mod);
        //
        --n;
        n /= 3;
    }
    reverse(s.begin(), s.end());
    //
    answer = s;
    return answer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Algorithm</category>
      <category>algorithm.find()</category>
      <category>find index</category>
      <category>Heap</category>
      <category>priority_queue</category>
      <category>vector index</category>
      <category>우선순위 큐</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/92</guid>
      <comments>https://hanil2.tistory.com/92#entry92comment</comments>
      <pubDate>Sun, 6 Jun 2021 17:37:32 +0900</pubDate>
    </item>
    <item>
      <title>Hackerrank - Poker Nim, XOR Strings, Smart Number</title>
      <link>https://hanil2.tistory.com/91</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[풀이&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://www.hackerrank.com/challenges/poker-nim-1/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Poker&amp;nbsp;Nim&lt;/a&gt;]&amp;nbsp;:&amp;nbsp;&amp;lt;Easy&amp;nbsp;/&amp;nbsp;85.46%&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1618918543314&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string pokerNim(int k, vector&amp;lt;int&amp;gt; c)
{
    int sum = 0;
    for(int i = 0; i &amp;lt; c.size(); ++i)
        sum ^= c[i];
    //
    if(sum == 0)
        return &quot;Second&quot;;
    else
        return &quot;First&quot;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 기본 NimGame과 동일한 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 'k' 가 결과에 영향을 주지 않는다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[풀이&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://www.hackerrank.com/challenges/strings-xor/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;XOR&amp;nbsp;Strings&lt;/a&gt;]&amp;nbsp;:&amp;nbsp;&amp;lt;Easy&amp;nbsp;/&amp;nbsp;93.72%&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1618918549522&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string strings_xor(string s, string t) {

    string res = &quot;&quot;;
    for(int i = 0; i &amp;lt; s.size(); i++) {
        if(s[i] == t[i])
            res += '0';
        else
            res += '1';
    }

    return res;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Debugging / 3줄만 수정&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[풀이&amp;nbsp;-&amp;nbsp;&lt;a href=&quot;https://www.hackerrank.com/challenges/smart-number/problem?isFullScreen=true&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Smart&amp;nbsp;Number&lt;/a&gt;]&amp;nbsp;:&amp;nbsp;&amp;lt;Easy&amp;nbsp;/&amp;nbsp;83.82%&amp;gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1618918555225&quot; class=&quot;c++ arduino&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool is_smart_number(int num){
    int val = (int) sqrt(num);
    if(val * val == num)
        return true;
    return false;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# Debugging / 1줄만 수정&lt;/p&gt;</description>
      <category>Algorithm</category>
      <author>HI2</author>
      <guid isPermaLink="true">https://hanil2.tistory.com/91</guid>
      <comments>https://hanil2.tistory.com/91#entry91comment</comments>
      <pubDate>Tue, 20 Apr 2021 20:35:59 +0900</pubDate>
    </item>
  </channel>
</rss>