<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발일지</title>
    <link>https://yunaaaas.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 22:23:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>yunakim2</managingEditor>
    <image>
      <title>개발일지</title>
      <url>https://tistory1.daumcdn.net/tistory/4174803/attach/416c04168a8a4c079165d0b6ab6fea95</url>
      <link>https://yunaaaas.tistory.com</link>
    </image>
    <item>
      <title>C++ 백준 1213 _ 팰린드롬 만들기</title>
      <link>https://yunaaaas.tistory.com/104</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[C++ - 백준 1213] 문제&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1676041212246&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;1213번: 팰린드롬 만들기&quot; data-og-description=&quot;첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 &amp;quot;I'm Sorry Hansoo&amp;quot;를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1213&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1213&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lOGZn/hyRAdZLj5J/ERPGaCiJDZjsQEEPAnCV4k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lOGZn/hyRAdZLj5J/ERPGaCiJDZjsQEEPAnCV4k/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1213번: 팰린드롬 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 &quot;I'm Sorry Hansoo&quot;를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임한수와 임문빈은 서로 사랑하는 사이이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제한 사항&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;출력&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 &quot;I'm Sorry Hansoo&quot;를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예시&lt;/b&gt;&lt;/h3&gt;
&lt;div id=&quot;problem-body&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;AABB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;ABBA&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 입력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-2&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;AAABB
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 출력 2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-2&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;ABABA
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 입력 3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-3&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;ABACABA
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 출력 3&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-3&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;AABCBAA
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 입력 4&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-4&quot; class=&quot;ebnf&quot;&gt;&lt;code&gt;ABCD
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 출력 4&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-4&quot; class=&quot;ada&quot;&gt;&lt;code&gt;I'm Sorry Hansoo
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팰린드롬을 만들기 위해서는 입력 string의 순서는 중요하지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단 팰린드롬의 규칙으로, 문자(char)의 개수가 홀수 인 것이 2개 이상이면 팰린드롬을 만들 수 없다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;gt; 그래서 a~z 순으로 cnt에 알파벳 갯수를 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;i = 'Z' ~ 'A' 까지 순회 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 문제에서 정답이 여러개인 경우, 사전순으로 앞서는 것을 출력하라 했기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ret 문자열에 추가할때는 'Z' 부터 추가해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래야 ex) ZAZ -&amp;gt; BZAZB -&amp;gt; ABZAZBA 이렇게 추가되기 때문!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cnt[i] &amp;amp; 1 은 비트 연산자로 홀수인지 짝수인지 여부를 체크해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 홀수 인경우 mid 값에 저장하고 flag로 홀수인 알파벳의 개수를 확인한다 (2개 이상일 경우 팰린드롬을 만들 수 없기 때문!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추후 위에서 저장한 mid char 을 ret 문자열 정중앙 (가운데)에 추가해주면 팰린드롬이 완성된다&lt;/p&gt;
&lt;pre id=&quot;code_1610046452897&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);

  string str;
  cin &amp;gt;&amp;gt; str;
  int cnt[200] = {0,};
  string ret = &quot;&quot;;
  
  for (auto ch : str) {
    cnt[ch] ++;
  }
  char mid = ' ';
  int flag = 0;
  for (int i = 'Z'; i &amp;gt;= 'A'; i--) {
    if (cnt[i]) {
      if (cnt[i] &amp;amp; 1) {
        mid = char(i); // 홀수는 중앙에 넣어야 되기 때문
        flag ++;
        cnt[i] --;
      }
      if (flag == 2) break;
      for (int j = 0; j &amp;lt; cnt[i]; j += 2) {
        ret = char(i) + ret;
        ret += char(i);
      }
    }
  }
  if (mid != ' ') ret.insert(ret.begin() + ret.size() / 2, mid);
  if (flag == 2) cout &amp;lt;&amp;lt; &quot;I'm Sorry Hansoo\n&quot;;
  else cout &amp;lt;&amp;lt; ret &amp;lt;&amp;lt; '\n';
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++</category>
      <category>C++ 백준</category>
      <category>C++ 백준 1213</category>
      <category>c++ 알고리즘</category>
      <category>C++ 팰린드롬</category>
      <category>CPP</category>
      <category>Cpp 백준</category>
      <category>백준 팰린드롬 1213 C++</category>
      <category>알고리즘 팰린드롬 구현</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/104</guid>
      <comments>https://yunaaaas.tistory.com/104#entry104comment</comments>
      <pubDate>Fri, 10 Feb 2023 23:59:40 +0900</pubDate>
    </item>
    <item>
      <title>C++ 백준 1620 _ 나는야 포켓몬 마스터 이다솜 문제 풀이</title>
      <link>https://yunaaaas.tistory.com/103</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;[C++ - 백준 1620] 문제&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1676041275017&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;1620번: 나는야 포켓몬 마스터 이다솜&quot; data-og-description=&quot;첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1620&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1620&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CKuoI/hyRAgvp7UD/H5FFK9CPloGOKghD56YS5K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1620&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1620&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CKuoI/hyRAgvp7UD/H5FFK9CPloGOKghD56YS5K/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;1620번: 나는야 포켓몬 마스터 이다솜&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓몬의 이름은 모두 영어로만 이루어져있고, 또, 음... 첫 글자만 대문자이고, 나머지 문자는 소문자로만 이루어져 있어. 아참! 일부 포켓몬은 마지막 문자만 대문자일 수도 있어. 포켓몬 이름의 최대 길이는 20, 최소 길이는 2야. 그 다음 줄부터 총 M개의 줄에 내가 맞춰야하는 문제가 입력으로 들어와. 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력해야해. 입력으로 들어오는 숫자는 반드시 1보다 크거나 같고, N보다 작거나 같고, 입력으로 들어오는 문자는 반드시 도감에 있는 포켓몬의 이름만 주어져. 그럼 화이팅!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한 사항&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간 제한 : 2초&lt;/li&gt;
&lt;li&gt;메모리 제한 : 256 MB&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;출력형식&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;첫째 줄부터 차례대로 M개의 줄에 각각의 문제에 대한 답을 말해줬으면 좋겠어!!!. 입력으로 숫자가 들어왔다면 그 숫자에 해당하는 포켓몬의 이름을, 문자가 들어왔으면 그 포켓몬의 이름에 해당하는 번호를 출력하면 돼. 그럼 땡큐~&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예시&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot;&gt;&lt;code&gt;26 5
Bulbasaur
Ivysaur
Venusaur
Charmander
Charmeleon
Charizard
Squirtle
Wartortle
Blastoise
Caterpie
Metapod
Butterfree
Weedle
Kakuna
Beedrill
Pidgey
Pidgeotto
Pidgeot
Rattata
Raticate
Spearow
Fearow
Ekans
Arbok
Pikachu
Raichu
25
Raichu
3
Pidgey
Kakuna&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간을 단축하기 위해 아래 구문을 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ios_base::sync_with_stdio(false);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cin.tie(NULL);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;사용하는 이유는?&amp;nbsp; &lt;/i&gt;여러 컴파일러의 sync를 맞추기 위해 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input으로 문자열이 들어올 수도 있고, 정수값이 들어올 수도 있으므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열 두가지를 사용해야 했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;string -&amp;gt; int 일 때는&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;map 시간 복잡도 O (logN)&lt;/li&gt;
&lt;li&gt;array 시간 복잡도 O(N)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int -&amp;gt; string 일 때는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;map 시간 복잡도 O(logN)&lt;/li&gt;
&lt;li&gt;array 시간 복잡도 O (1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이여서 string에서 int 값을 찾을 때는 map&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;int에서 string 값을 찾을 때는 array를 사용해야 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1610046452897&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);
  int n, k;
  cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;
  string arr[100004];
  map&amp;lt;string, int&amp;gt; name_map2;
  string temp;
  for (int i = 1; i &amp;lt;= n; i++) {
    cin &amp;gt;&amp;gt; temp;
    arr[i] = temp;
    name_map2[temp] = i;
  }
  for (int j = 0; j &amp;lt; k; j++) {
    cin &amp;gt;&amp;gt; temp;
    if (atoi(temp.c_str()) == 0) {
      cout &amp;lt;&amp;lt; name_map2[temp] &amp;lt;&amp;lt; '\n';
    } else {
      cout &amp;lt;&amp;lt; arr[atoi(temp.c_str())] &amp;lt;&amp;lt; '\n';
    }
  }

  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++</category>
      <category>C++ 백준</category>
      <category>C++백준</category>
      <category>cpp 알고리즘</category>
      <category>나는야 포켓몬 마스터 이다솜</category>
      <category>나는야 포켓몬 마스터 이다솜 문제</category>
      <category>백준</category>
      <category>백준 1620 C++</category>
      <category>백준 1620 문제</category>
      <category>알고리즘</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/103</guid>
      <comments>https://yunaaaas.tistory.com/103#entry103comment</comments>
      <pubDate>Fri, 10 Feb 2023 23:45:50 +0900</pubDate>
    </item>
    <item>
      <title>C++ 누적합</title>
      <link>https://yunaaaas.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 문제를 풀다보면 종종 for 문 대신 '누적합'을 사용해야하는 문제가 나온다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;누적합이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 요소들이 누적된 합으로, &lt;b&gt;어떤 배열을 기반으로 요소들의 누적된 합을 저장&lt;/b&gt;해 새로 배열을 만들어 이를 활용하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 앞에서 더하는 prefix sum (주로 코딩테스트에서는 prefix sum만 나옴!!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 뒤에서 더하는 suffix sum&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;prefix sum 만들 때 주의해야 할 점&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0번째 요소는 비워두고 1번째 요소부터 사용하자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;psum[1] -&amp;gt; 0, 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;psum[2] -&amp;gt; 0,1,2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;psum[3] -&amp;gt; 0, 1,2,3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;psum[4] -&amp;gt; 0,1,2,3,4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;누적합을 코드로 구현해보자!&lt;/h4&gt;
&lt;pre id=&quot;code_1676039250067&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for(int i = 1; i &amp;lt;= n; i++) {
	cin &amp;gt;&amp;gt; a[i];
	psum[i] = psum[i-1] + a[i];
}

for(int i = 0; i &amp;lt; m; i++) {
	cin &amp;gt;&amp;gt; b &amp;gt;&amp;gt; c;
	cout &amp;lt;&amp;lt; psum[c] - psum[b-1] &amp;lt;&amp;lt; '\n';
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 누적합 연습 문제 2559. 수열&lt;/h4&gt;
&lt;figure id=&quot;og_1676039310242&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;2559번: 수열&quot; data-og-description=&quot;첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/2559&quot; data-og-url=&quot;https://www.acmicpc.net/problem/2559&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2559&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/2559&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;2559번: 수열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기&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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;누적합 문제를 for 문을 이용해서 풀면?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676039397319&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;

using namespace std;


int main() {
  int n, k, m;
  cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;
  string s;
  vector&amp;lt;int&amp;gt; numbers;
  for (int l = 0; l &amp;lt; n; l++) {
    cin &amp;gt;&amp;gt; m;
    numbers.push_back(m);
  }
  int max = -9999999;
  for (int i = 0; i &amp;lt;= numbers.size() - k; i++) {
    int sum = 0;
    for (int j = i; j &amp;lt; i + k; j++) {
      sum += numbers[j];
    }
    if (sum &amp;gt;= max) {
      max = sum;
    }
  }
  cout &amp;lt;&amp;lt; max;
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N 이 2 ~ 100,000 이하 이므로, 위의 코드로 구현하게되면 빅오가 N^2 가 되는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;10000000000 로 시간 초과가 발생하게 된다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;누적합을 이용해서 푼다면?&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1676039560284&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;

using namespace std;

int main() {
  int n, k, m;
  cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;
  string s;
  int num[100004];
  int psum[100004];
  for (int i = 1; i &amp;lt;= n; i++) {
    cin &amp;gt;&amp;gt; num[i];
    psum[i] = psum[i-1] + num[i];
  }
  int maximum[100004];
  int largest = -1000000;
  for (int i = k; i &amp;lt;= n; i++) {
      largest = max(largest, psum[i]-psum[i-k]);
  }
  cout &amp;lt;&amp;lt; largest &amp;lt;&amp;lt; '\n';
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N 보다 큰 배열 maximum을 만들어 놓고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n 만큼 for 문을 돌며, 미리 저장해논 누적합을 통해 연속된 수의 합을 구한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빅오 N 으로 축소되어 시간 초과를 해결할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 더 많은 누적합 문제&lt;/h4&gt;
&lt;figure id=&quot;og_1676039347633&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;문제 - 1 페이지&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problemset?sort=ac_desc&amp;amp;algo=139&amp;amp;algo_if=and&amp;amp;page=1&quot; data-og-url=&quot;https://www.acmicpc.net/problemset?algo=139&amp;amp;algo_if=and&amp;amp;page=1&amp;amp;sort=ac_desc&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnltTn/hyRAlDtnCT/EKstKwCjgh5Xyeh8pny1k1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problemset?sort=ac_desc&amp;amp;algo=139&amp;amp;algo_if=and&amp;amp;page=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problemset?sort=ac_desc&amp;amp;algo=139&amp;amp;algo_if=and&amp;amp;page=1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnltTn/hyRAlDtnCT/EKstKwCjgh5Xyeh8pny1k1/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;문제 - 1 페이지&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++</category>
      <category>C++누적합구하기</category>
      <category>C++백준2559</category>
      <category>Cpp누적합</category>
      <category>cpp백준2559</category>
      <category>누적합</category>
      <category>누적합구현</category>
      <category>누적합코드</category>
      <category>백준2559</category>
      <category>백준수열문제</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/102</guid>
      <comments>https://yunaaaas.tistory.com/102#entry102comment</comments>
      <pubDate>Fri, 10 Feb 2023 23:35:23 +0900</pubDate>
    </item>
    <item>
      <title>C++ String 알고리즘에서 자주 쓰이는 메서드</title>
      <link>https://yunaaaas.tistory.com/101</link>
      <description>&lt;pre id=&quot;code_1675690563745&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

int main() {
	string a = &quot;love is&quot;;
	a += &quot;pain!&quot;;
	a.pop_back();
	cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; a.size() &amp;lt;&amp;lt; &quot;\n&quot;; // love is pain : 12
	cout &amp;lt;&amp;lt; char(*a.begin()) &amp;lt;&amp;lt; '\n'; // L
	cout &amp;lt;&amp;lt; char(*(a.end()-1)) &amp;lt;&amp;lt; '\n'; // n

	a.insert(0, &quot;test &quot;);
	cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; a.size() &amp;lt;&amp;lt; &quot;\n&quot;; // test love is pain : 17
	a.erase(0, 5);
	cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; a.size() &amp;lt;&amp;lt; &quot;\n&quot;; // love is pain : 12

	auto it = a.find(&quot;love&quot;);
	if (it != string::npos) {
		cout &amp;lt;&amp;lt; &quot;포함되어 있다&quot; &amp;lt;&amp;lt; &quot;\n&quot;; // 포함되어 있다
	}
	cout &amp;lt;&amp;lt; it &amp;lt;&amp;lt; &quot;\n&quot;; // 0
	cout &amp;lt;&amp;lt; string::npos &amp;lt;&amp;lt; &quot;\n&quot;; // 18446744073709551615

	cout &amp;lt;&amp;lt; a.substr(5,2) &amp;lt;&amp;lt; &quot;\n&quot;; // is
	return 0;

}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;+=&lt;/b&gt; : 문자열에 문자열을 더할 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;push_back() 은 문자 밖에 더하지 못함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;begin()&lt;/b&gt; : 문자열의 첫번째 요소 가리키는 이터레이터&lt;/li&gt;
&lt;li&gt;&lt;b&gt;end()&lt;/b&gt; : 문자열의 마지막 요소 그 다음을 가리키는 이터레이터&lt;/li&gt;
&lt;li&gt;&lt;b&gt;size()&lt;/b&gt; : 문자열 사이즈 반환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;O() 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;str.length()&lt;/b&gt; : 문자열 사이즈 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;insert(위치, 문자열)&lt;/b&gt; : 특정 위치에 문자열 삽입
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;O(n) 의 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;erase(위치, 크기)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 위치에 크기만큼 문자열을 지움&lt;/li&gt;
&lt;li&gt;O(n) 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pop_back()&lt;/b&gt; : 문자열 끝을 지운다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;O(1) 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;find(문자열)&lt;/b&gt; : 특정 문자열을 찾아 위치를 반환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열을 못찾을 경우 string::npos 반환&lt;/li&gt;
&lt;li&gt;O(n) 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;substr(위치, 크기)&lt;/b&gt; : 특정 위치에서 크기만큼 문자열을 추출
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;O(n) 시간복잡도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아스키 코드와 문자열&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a ~ z 개수 : 26&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;a ~ z = 97 ~ 122&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A ~ Z = 65 ~ 90&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 -&amp;gt; 숫자로 출력하기&lt;/p&gt;
&lt;pre id=&quot;code_1675690714356&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main() {
	char a = 'a';
	cout &amp;lt;&amp;lt; (int)a &amp;lt;&amp;lt; '\n'; // 97
	cout &amp;lt;&amp;lt; (int)a - 97 &amp;lt;&amp;lt; '\n'; // 0
	cout &amp;lt;&amp;lt; (int)a - 'a' &amp;lt;&amp;lt; '\n'; // 0

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자 ASCII 코드 -&amp;gt; 문자열로 출력하기&lt;/p&gt;
&lt;pre id=&quot;code_1675690730177&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cout &amp;lt;&amp;lt; char(i + 97) // 'a'
cout &amp;lt;&amp;lt; char(j + 65) // 'A'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자로된 문자에 ++ 증감 연산자로 1을 더하게 된다면?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아스키코드에 +1 한 값이 됨!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675690802087&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string s = &quot;123&quot;;
s[0]++;
cout &amp;lt;&amp;lt; s &amp;lt;&amp;lt; &quot;\n&quot;; // 223&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; s[0] ++ 으로, 223이 된다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아스키 코드 49에서 1을 더한 값인 '50'이 가리키는 값이 '2' 이므로&lt;/li&gt;
&lt;li&gt;123 에서 223이 될 수 있다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문자열에서 + 하는 연산은 아스키 코드 기반으로 수행된다&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문자열 거꾸로 뒤집기 STL - reverse()&lt;/h3&gt;
&lt;pre id=&quot;code_1675690877771&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;
int main(){
    string a = &quot;It's hard to have a sore leg&quot;;
    reverse(a.begin(), a.end());
    cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
    reverse(a.begin(), a.end());
    cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
    reverse(a.begin() + 3, a.end());
    cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n';
    return 0;
}
/*
gel eros a evah ot drah s'tI
It's hard to have a sore leg
It'gel eros a evah ot drah s
*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문자열 자르기 split()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++에서는 split 함수를 지원하지 않아서 직접 구현해야 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675690933749&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vector&amp;lt;string&amp;gt; split(string input, string delimiter) {
	vector&amp;lt;string&amp;gt; ret;
	long long pos = 0;
	string token = &quot;&quot;;
	while((pos = input.find(delimiter)) != string::npos) {
		token = input.substr(0, pos);
		ret.push_back(token);
		input.erase(0, pos + delimiter.length());
	}

	ret.push_back(input);
	return ret;

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;input - 문자열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;delimiter - 구분자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분자의 위치를 찾아서 input 문자열을 구분자 전까지 자른 후, 'token'값에 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그걸 ret 벡터에 넣은 후, input 문자열에서 지워준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;대문자 -&amp;gt; 소문자 / 소문자 -&amp;gt; 대문자 변환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열에서 + , - 는 아스키코드 기반으로 동작되므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 자체를 더하거나 빼주어 변환이 가능하다!&lt;/p&gt;
&lt;pre id=&quot;code_1675691056084&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if ((str &amp;gt;= 'a') &amp;amp;&amp;amp; (str &amp;lt;= 'z')) {
    answer.emplace_back(str - 'a' + 'A');
} else {
    answer.emplcae_back(str - 'A' + 'a');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문자열 숫자 -&amp;gt; 숫자로 변환&lt;/h3&gt;
&lt;pre id=&quot;code_1675691132401&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;


int main() {
	int num = stoi(&quot;1234&quot;); // 1234
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stoi : string to integer&lt;/li&gt;
&lt;li&gt;stol : string to long int&lt;/li&gt;
&lt;li&gt;stoul : string to unsigned integer&lt;/li&gt;
&lt;li&gt;stoll : long long&lt;/li&gt;
&lt;li&gt;stoull : unsigned long long&lt;/li&gt;
&lt;li&gt;stof : string to float&lt;/li&gt;
&lt;li&gt;stod : string to double&lt;/li&gt;
&lt;li&gt;stold : long double&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;숫자 -&amp;gt; 문자열 숫자로 변환&lt;/h3&gt;
&lt;pre id=&quot;code_1675691169553&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;string&amp;gt;

std::string s = std::to_string(10); // '10'


#include &amp;lt;string&amp;gt;

int num2 = s - '0';&lt;/code&gt;&lt;/pre&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++</category>
      <category>C++스트링</category>
      <category>CPP</category>
      <category>CPP 문자열</category>
      <category>string 구현</category>
      <category>string클래스</category>
      <category>문자열숫자로변환</category>
      <category>숫자문자열로변환</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/101</guid>
      <comments>https://yunaaaas.tistory.com/101#entry101comment</comments>
      <pubDate>Mon, 6 Feb 2023 22:48:42 +0900</pubDate>
    </item>
    <item>
      <title>C++ 순열(permutation)과 조합(combination)</title>
      <link>https://yunaaaas.tistory.com/100</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;순열(Permutation)이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서가 정해진 임의의 집합을 다른 순서로 섞는 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) n개의 집합 중 n 개를 골라라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학 공식 ) nPr = n! / (n-r)!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;순열 구현하기&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. next_permutation / prev_permutation&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;next_permutation : 오름차순 배열 기반&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;prev_permutation : 내림차순 배열 기반&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;next_permutation([first, last))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- first : 순열을 시작할 범위의 첫번째 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- last : 포함되지 않은 마지막 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675257417746&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;vector&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;iostream&amp;gt;


void printV(vector&amp;lt;int&amp;gt; &amp;amp;v) {
	for(int i = 0; i &amp;lt; v.size(); i++) {
		cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; ' ';
	}
	cout &amp;lt;&amp;lt; '\n';
}

...


for (int i = 1; i &amp;lt;= 3; i++) {
	v.push_back(i);
}

do {
	printV(v);
} while(next_permutation(v.begin(), v.end()));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 배열의 특정 부분만 이용해서 순열을 구하고 싶다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- next_permutation(v.begin(), v.begin() + 3);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할점 !!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- prev 는 내림차순 정렬하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- next 는 오름차순 정렬하여 사용해야 함!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 재귀함수를 이용한 순열&lt;/p&gt;
&lt;pre id=&quot;code_1675257499937&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void makePermutation (int n, int r, int depth) {
	cout &amp;lt;&amp;lt; n &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; r &amp;lt;&amp;lt; &quot; : &quot; &amp;lt;&amp;lt; depth &amp;lt;&amp;lt; &quot;\n&quot;;
	if (r == depth) {
		printV(v);
		return;
	}

	for(int i = depth; i &amp;lt;n; i++) {
		swap(v[i], v[depth]);
		makePermutation(n, r, depth + 1);
		swap(v[i], v[depth]);
	}
	return;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의할점 !!) 재귀함수는 종료 조건이 필요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;조합(Permutation)이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서 상관없이 다른 순서로 섞는 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수학 공식 ) nCr = n! / [r! * (n-r)!]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;조합 구현하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 재귀함수를 이용한 조합&lt;/p&gt;
&lt;pre id=&quot;code_1675257622868&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void print(vector&amp;lt;int&amp;gt; b) {
	for(int i : b) cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; &quot; &quot;;
	cout &amp;lt;&amp;lt; &quot;\n&quot;;
}

void combi(int start, vector&amp;lt;int&amp;gt; b) {
	if (b.size() == k) {
		print(b);
		return;
	}
for (int i = start + 1; i &amp;lt; n; i++) {
	b.push_back(i);
	combi(i, b);
	b.pop_back();
}
return; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 중첩 for 문을 이용한 조합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3개 이상 뽑는 경우에는 중첩 for 문 보다 재귀함수를 이용하자&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675257648425&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt;n; i++) {
	for(int j = i+1; j &amp;lt;n; j++) {
		for(int k = j+1; k &amp;lt;n; k++) {
			cout &amp;lt;&amp;lt; i &amp;lt;&amp;lt; j &amp;lt;&amp;lt; '\n';
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조합 특징!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nCr = nC(n-r) 은 동일하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 9개 중 2개 뽑는 방법과 9개 중 7개 뽑는 방법이 동일&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 9개 중 7개 뽑는 문제 나오면 -&amp;gt; 9개 중 2개 뽑아서 제거하면 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++순열과 조합</category>
      <category>C++순열구현</category>
      <category>C++조합구현</category>
      <category>Cpp 순열 구하는법</category>
      <category>순열</category>
      <category>순열 permutation</category>
      <category>순열 구현하기</category>
      <category>조합</category>
      <category>조합 Combination</category>
      <category>조합 구현하기</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/100</guid>
      <comments>https://yunaaaas.tistory.com/100#entry100comment</comments>
      <pubDate>Wed, 1 Feb 2023 22:23:38 +0900</pubDate>
    </item>
    <item>
      <title>C++ STL</title>
      <link>https://yunaaaas.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;STL 은 간단하게 객체를 담는 '컨테이너', 객체에 접근하는 '반복자', 객체를 다루는 '알고리즘'으로 이루어졌다고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;STL 컨테이너 종류(container)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;선형 컨테이너&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;array
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;array&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vector
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;vector&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;list
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;list&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;forward_list
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;forward_list&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;deque
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;deque&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컨테이너 어답터&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stack
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;stack&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;queue
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;queue&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;priority_queue
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;queue&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;연관 컨테이너&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;set (tree)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;set&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;map (tree)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;map&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;unorder_set (hash table)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;unorder_set&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;unorder_map (hash table)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;#include &amp;lt;unorder_map&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;STL 컨테이너의 공통적인 특징&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 대부분 컨테이너의 멤버 함수가 동일하다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STL의 장점으로 코드를 수정하지 않고 컨테이너 교체가 가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;앞에 넣기 / 빼기&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;push_front()&lt;/li&gt;
&lt;li&gt;pop_front()&lt;/li&gt;
&lt;li&gt;front()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에 넣기 / 빼기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;push_back()&lt;/li&gt;
&lt;li&gt;pop_back()&lt;/li&gt;
&lt;li&gt;back()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간에 넣기 / 빼기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;insert()&lt;/li&gt;
&lt;li&gt;erase()&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의) vector 는 push_front() 가 없음!&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 제거와 반환을 동시에 하지 않는다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pop_front() / pop_back() 함수는 제거만 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;front() / back() 함수는 반환만 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컨테이너 생성하는 방법&lt;/h3&gt;
&lt;pre id=&quot;code_1675085349116&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;list&amp;gt;
#include &amp;lt;vector&amp;gt;


int main() {
	std::list&amp;lt;int&amp;gt; s1;
	std::list&amp;lt;int&amp;gt; s2(10); // 10개를 0으로 초기화
	std::list&amp;lt;int&amp;gt; s3(10, 3); // 10개를 3으로 초기화
	std::list&amp;lt;int&amp;gt; s4{10, 3}; // 2개를 10, 3으로 초기화
	std::list&amp;lt;int&amp;gt; s5 = {10, 3};
	std::list&amp;lt;int&amp;gt; s6 = {1,2,3,4,5,6,7};
	std::list&amp;lt;int&amp;gt; s7{1,2,3,4,5,6,7};
	std::list s8 = {1,2,3,4,5,6,7}; // std::list&amp;lt;int&amp;gt; 로 초기화 C++17 부터 사용 가능
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1~10으로 초기화된 vector 만들기&lt;/li&gt;
&lt;li&gt;push_back 함수를 사용해서 끝에 20을 추가하세요&lt;/li&gt;
&lt;li&gt;모든 요소를 출력해 보세요
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;[ ] 연산자 사용 - vector, deque는 가능하지만 list는 불가능&lt;/li&gt;
&lt;li&gt;range for 사용 (for (auto &amp;amp;n : v)) - list 도 사용 가능&lt;/li&gt;
&lt;li&gt;반복자를 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;정렬하고 합을 구하고 검색,등 보다 많은 작업 하려면 알고리즘 을 알아야 한다&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1675085375328&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;

int main() {
	std::vector&amp;lt;int&amp;gt; v = {1,2,3,4,5,6,7,8,9,10};

	v.push_back(20);

	for (int i = 0; i &amp;lt;v.size(); i++) {
		std::cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; std::endl;
	}

	for(auto&amp;amp; n : v) {
		std::cout &amp;lt;&amp;lt; n &amp;lt;&amp;lt; std::endl;
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;STL 반복자 (iterator)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열 요소에 접근하는 방법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열의 연산자를 사용&lt;/li&gt;
&lt;li&gt;포인터를 사용해서 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675085447599&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&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;list&amp;gt;

int main() {
	int x[10] = {1,2,3,4,5,6,7,8,9,10};
	int *p1 = x;
	++p1;
	*p1 = 20;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복자 (iterator) 란?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;포인터와 유사하게 동작하는 객체로서, 반복자를 사용하면 컨테이너의 모든 요소를 순차적으로 접근할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복자의 장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컨테이너의 내부 구조(메모리 구조)에 상관없이 동일한 방법으로 요소에 접근 가능하다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675085468599&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iosteram&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;list&amp;gt;

int main() {
	std::list&amp;lt;int&amp;gt; v = {1,2,3,4,5,6,7,8,9,10};
	auto p2 = v.begin();
	++p2;
	*p2  20;
	++p2;
	std::cout &amp;lt;&amp;lt; *p2 &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;반복자의 데이터 타입&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이름 :: iterator&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) std::vector&amp;lt;int&amp;gt;::iterator&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675085521935&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&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;list&amp;gt;


int main() {

	std::vector&amp;lt;int&amp;gt; v = {1,2,3,4,5,6,7,8,9,10};
	// std::vector&amp;lt;int&amp;gt;::iterator p1 = v.begin();
	auto p1 = v.begin(); // 1을 가리킴

	auto p2 = v.end(); // end는 10을 가리키는게 아니라 10 다음을 가리키게 됨
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의) end() 로 얻은 반복자는 컨테이너의 마지막 다음을 가리킨다&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;past the end&lt;/li&gt;
&lt;li&gt;end() 로 얻은 반복자를 사용해서 요소에 접근하면 안된다&lt;/li&gt;
&lt;li&gt;끝에 도달했는지 확인하는 용도로 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675085562733&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while(p1 != p2) {
	std::cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; std::endl;
	++ p1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;반복자를 꺼내는 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1675085579437&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&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;list&amp;gt;

int main() {
	// std::list&amp;lt;int&amp;gt; v = {1,2,3,4,5,6,7,8};
	int v[10] = {1,2,3,4,5,6,7,8};
	// auto p1 = v.begin();
	// auto p2 = v.end();
	auto p1 = std::begin(v);
	auto p2 = std::end(v);

	while(p1 != p2) {
		std::cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; std::endl;
		++p1;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 멤버 함수 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;v.begin() / v.end()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 배열에 사용할 수 없다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 일반 함수 사용 &lt;b&gt;(C++11 부터)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::begin(v) / std::end(v)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 배열에 사용할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컨테이너의 모든 요소를 열거하는 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 배열 연산자 ([])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속된 메모리와 유사한 구조를 가진 경우만 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vector , array, deque, string&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;list 나 forward_list 는 [] 연산자 사용 불가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675085658944&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (int i = 0; i &amp;lt; v.size(); i++) {
	std::cout &amp;lt;&amp;lt; v[i] &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열에서도 사용 가능하도록 v.size() 대신 &lt;b&gt;&lt;span data-token-index=&quot;1&quot;&gt;std::size(v) &lt;/span&gt;&lt;/b&gt;사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 반복자 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 컨테이너 사용 가능&lt;/p&gt;
&lt;pre id=&quot;code_1675085698986&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;auto p1 = std::begin(v);

while(p1 != std::end(v)) {
	std::cout &amp;lt;&amp;lt; *p1 &amp;lt;&amp;lt; std::endl;
	++p1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. range for 구문 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 컨테이너 사용 가능&lt;/p&gt;
&lt;pre id=&quot;code_1675085720762&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (auto &amp;amp;n : v) {
	std::cout &amp;lt;&amp;lt; n &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;복사본을 만들지 않기 위해 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;&amp;amp;&lt;/span&gt; 를 붙여주자&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;STL 알고리즘 특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘 이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 문제를 해결하기 위한 절차, 방법, 명령어 들의 집합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STL 알고리즘 이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++ 표준 라이브러리인 STL 이 제공하는 함수&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬, 검색, 순열, 등 다양한 알고리즘 구현한 함수의 집합&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STL 알고리즘의 특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멤버 함수가 아닌 일반 함수 (템플릿) 으로 제공 된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 하나의 함수(템플릿)으로 다양한 컨테이너에 사용할 수 있다 (&lt;b&gt;자료구조에 독립적&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 대부분 알고리즘은 함수의 인자와 반환 타입으로 반복자를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;반복자를 사용하게 되면, 컨테이너의 내부 구조에 상관없이 동일한 방법으로 요소에 접근할 수 있다&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;lt;algorithm&amp;gt; 헤더가 필요하다&lt;/li&gt;
&lt;li&gt;대부분의 알고리즘이 반복자 를 필요로 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675085788752&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&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;list&amp;gt;
#include &amp;lt;algorithm&amp;gt;

int main() {
	std::list&amp;lt;int&amp;gt; s = {1,2,3,4,5,6,7,8,9,10};
	std::vector&amp;lt;int&amp;gt; v= {1,2,3,4,5,6,7,8,9,10};

	// s.find(5); X

	std::find(begin(v), end(v), 3);

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;검색 알고리즘 (find)&lt;/h4&gt;
&lt;pre id=&quot;code_1675085819688&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&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;list&amp;gt;
#include &amp;lt;algorithm&amp;gt;

int main() {
	int x[10] = {1,2,3,4,5,6,7,8,9,10};
	std::list&amp;lt;int&amp;gt; s = {1,2,3,4,5,6,7,8,9,10};
	std::vector&amp;lt;int&amp;gt; v= {1,2,3,4,5,6,7,8,9,10};

	// auto p = std::find(begin(v), end(v), 3);
	auto p = std::find(x, x+10, 3); // x+9 가 아니라 x의 다음주소인 x+10 넣어야 한다

}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2개의 반복자 ([first, last), 구간) 와 검색할 값을 받아 &lt;b&gt;선형검색을 수행하는 알고리즘&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;first&lt;/b&gt; 는 검색 대상에 포함되지만, &lt;b&gt;last&lt;/b&gt;는 검색 대상에 포함되지 않는다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 성공시 - 요소를 가리키는 반복자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실패시 - last // null 아님!&lt;/p&gt;
&lt;pre id=&quot;code_1675085859983&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if ( p == end(v)) {
	// 실패
} else {
	// 성공
    std::cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; std::endl;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;STL 알고리즘과 조건자&lt;/h4&gt;
&lt;pre id=&quot;code_1675085911203&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;

int main() {
	std::vector &amp;lt;int&amp;gt; v = {10,9,8,7,6,5,4,3,2,1};
	// v 안에서 처음 나오는 3의 배수를 구해보세요
	auto p = std::find(begin(v), end(v), 3);
	std::cout &amp;lt;&amp;lt; *p &amp;lt;&amp;lt; std::endl;

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;find_if ([first, last),함수)&lt;/p&gt;
&lt;pre id=&quot;code_1675085934821&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool foo(int n) {
	return n % 3 = 0;
}


...

auto p = std::find_if(begin(v), end(v), foo);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;조건자 predicator&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bool 을 반환하는 함수, 함수 객체, 람다 표현식&lt;/li&gt;
&lt;li&gt;_if 로 끝나는 알고리즘에 전달되어 정책으로 사용된다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1675085962498&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;auto p = std::find_if(begin(v), end(v), [](int n) { return n % 3 == 0;});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더많은 알고리즘 종류를 보고 싶다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://cppreference.com/&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;cppreference.com&lt;/span&gt;&lt;/a&gt; algorithm library 참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-1을 입력할 때 까지 입력을 받아 vector에 보관해라 &amp;rarr; push_back 사용&lt;/li&gt;
&lt;li&gt;입력한 값 중 10 보다 큰 값은 모두 0 으로 변경해라 &amp;rarr; replace / replace_if 알고리즘 사용&lt;/li&gt;
&lt;li&gt;모든 요소의 합을 구해서 출력해라 &amp;rarr; accumulate 알고리즘 사용 (numeric 헤더에 존재)&lt;/li&gt;
&lt;li&gt;vector의 모든 요소를 내림차순 정렬(sort) 해서 출력하세요 &amp;rarr; sort 알고리즘 + 조건자 사용&lt;/li&gt;
&lt;li&gt;vector의 모든 요소를 1로 채워서 출력해보세요 &amp;rarr; fill 알고리즘 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1675086014185&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;numeric&amp;gt;


using namespace std;

int main() {
	vector&amp;lt;int&amp;gt; v;
	int n = 0;

	while(1) {
		cin &amp;gt;&amp;gt; n;
		if (n == -1) break;
		v.push_back(n);
	}

	for (auto &amp;amp;n : v) {
		if (n &amp;gt;= 10) n = 0;
	}
	// replace 알고리즘 사용
	replace_if(begin(v), end(v), [](int n) { return n&amp;gt;=10; }, 0);

	// 모든요소의 합을 구하는 알고리즘 -&amp;gt; accumulate 알고리즘
	int sum = accumulate(begin(v), end(v), 0);

	// sort (begin(v), end(v)); // 오름차순, 퀵소트
	sort(begin(v), end(v), [](int a, int b) { return a &amp;gt; b; }); // 내림차순 정렬
	
	// 모든 요소 1로 채우기
	fill(begin(v), end(v), 1);

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>  C++/C++ TIL</category>
      <category>C++</category>
      <category>CPP</category>
      <category>STL</category>
      <category>STL 알고리즘 종류</category>
      <category>STLIterator</category>
      <category>STL알고리즘</category>
      <category>STL알고리즘종류</category>
      <category>STL컨테이너</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/99</guid>
      <comments>https://yunaaaas.tistory.com/99#entry99comment</comments>
      <pubDate>Mon, 30 Jan 2023 22:43:46 +0900</pubDate>
    </item>
    <item>
      <title>0. C++ 입출력</title>
      <link>https://yunaaaas.tistory.com/98</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;입력&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. std::cin 이용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개행 문자 (띄어쓰기 엔터) 까지만 입력 받는다&lt;/p&gt;
&lt;pre id=&quot;code_1674745353586&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int main() {
	std::string s;
	std::cin &amp;gt;&amp;gt; s; // 안녕하세요 하이
	std::cout &amp;lt;&amp;lt; s &amp;lt;&amp;lt; '\n'; // 안녕하세요
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. scanf 사용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 형식대로 입력을 받을 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1674745388146&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
int a;
double b;
char c;
int main(){
	scanf(&quot;%d %lf %c&quot;, &amp;amp;a, &amp;amp;b, &amp;amp;c);
	printf(&quot;%d\n&quot;, a);
	printf(&quot;%lf\n&quot;, b);
	printf(&quot;%c\n&quot;, c);
	return 0;
}
/*
입력
23330
233.23123
a
출력
23330
233.231230
a
*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. std::getline 사용하기&lt;/h4&gt;
&lt;pre id=&quot;code_1674745443188&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;bits/stdc++.h&amp;gt;
using namespace std;
string s;
int main(){
	getline(cin, s);
	cout &amp;lt;&amp;lt; s &amp;lt;&amp;lt; '\n';
	return 0;
}
/*
안녕하세요 하이
안녕하세요 하이
*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여러줄의 input을 받아야 한다면 ?!&lt;/p&gt;
&lt;pre id=&quot;code_1674745490538&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;
int main() {
  int T;
  string s;
  
  cin &amp;gt;&amp;gt; T;
  string bufferflush;
  getline(cin, bufferflush);
  for (int i = 0; i &amp;lt; T; i++) {
    getline(cin, s);
    cout &amp;lt;&amp;lt; s &amp;lt;&amp;lt; '\n';
  }
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출력&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. std::cout 사용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 자릿수만큼의 실수를 출력하고 싶다면? cout.precision(자릿수)를 이용하자!&lt;/p&gt;
&lt;pre id=&quot;code_1674745562139&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

double a = 1.23456789;

int main() {
	cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n'; // 1.23457
	cout.precision(7);

	cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; '\n'; // 1.234568

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. printf 사용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;printf 출력시 string을 출력할 때 주의해야할 점&lt;/p&gt;
&lt;pre id=&quot;code_1674745628500&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;printf('%s\n', str.c_str());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;printf로 출력하는 경우에는 string을 문자열 포인터(char *) 타입으로 바꿔줘야 한다!&lt;/p&gt;</description>
      <category>  Algorithm/  C++ 문제 풀이</category>
      <category>C++</category>
      <category>C++Study</category>
      <category>C++TIL</category>
      <category>C++알고리즘</category>
      <category>c++입출력</category>
      <category>cpp알고리즘</category>
      <category>입출력방법</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/98</guid>
      <comments>https://yunaaaas.tistory.com/98#entry98comment</comments>
      <pubDate>Fri, 27 Jan 2023 00:12:48 +0900</pubDate>
    </item>
    <item>
      <title>[Android/Kotlin] 안드로이드 상태바 반투명으로 바꾸기</title>
      <link>https://yunaaaas.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발하다가 아래와 같이 상태바를 반투명으로 바꾸기 위해 찾아보다가 정리하게 되었습니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1980&quot; data-filename=&quot;스크린샷 2021-06-28 오후 11.28.53.png&quot; width=&quot;400&quot; height=&quot;834&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYajw/btq8okCOARC/AKN501wE3oWEfq9KGcOu80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYajw/btq8okCOARC/AKN501wE3oWEfq9KGcOu80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYajw/btq8okCOARC/AKN501wE3oWEfq9KGcOu80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYajw%2Fbtq8okCOARC%2FAKN501wE3oWEfq9KGcOu80%2Fimg.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1980&quot; data-filename=&quot;스크린샷 2021-06-28 오후 11.28.53.png&quot; width=&quot;400&quot; height=&quot;834&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1624890666849&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;item name=&quot;android:statusBarColor&quot;&amp;gt;@android:color/transparent&amp;lt;/item&amp;gt;
&amp;lt;item name=&quot;android:windowLightStatusBar&quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android:statusBarColor _ 상태바를 투명으로 바꿔줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android:windowLightStatusBar _ 마시멜로 버전에서 생긴 속성으로 밝은 색 배경일 경우 글자색을 어둡게 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;400&quot; height=&quot;132&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;283&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjVcPr/btq8lYHZKzj/SCGItilgnJpYwBRpivBC41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjVcPr/btq8lYHZKzj/SCGItilgnJpYwBRpivBC41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjVcPr/btq8lYHZKzj/SCGItilgnJpYwBRpivBC41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjVcPr%2Fbtq8lYHZKzj%2FSCGItilgnJpYwBRpivBC41%2Fimg.png&quot; width=&quot;400&quot; height=&quot;132&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;283&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;상태바의 백그라운드를 임의로 조절할 수 있어 아이콘 색상이 문제제기 되어, 흰색 배경일 경우에 아이콘 색이 동일해져서 아이콘이 안보여진다. -&amp;gt; 이 문제를 해결하기 위해 &lt;/i&gt;&lt;b&gt;windowLightStatusBar&lt;/b&gt;&lt;i&gt; 속성이 생김!&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;264&quot; data-filename=&quot;blob&quot; width=&quot;400&quot; height=&quot;123&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGJjNv/btq8lT7e41v/6JOSsfEu4YKp30T09OFTK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGJjNv/btq8lT7e41v/6JOSsfEu4YKp30T09OFTK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGJjNv/btq8lT7e41v/6JOSsfEu4YKp30T09OFTK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGJjNv%2Fbtq8lT7e41v%2F6JOSsfEu4YKp30T09OFTK0%2Fimg.png&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;264&quot; data-filename=&quot;blob&quot; width=&quot;400&quot; height=&quot;123&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두개의 속성으로 상태바가 반투명하게 바뀌지 않았습니다 그래서 stackoverflow를 찾아보다가 아래와 같은 속성을 발견했습니다!&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1624891187513&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;item name=&quot;android:colorPrimaryDark&quot;&amp;gt;@android:color/transparent&amp;lt;/item&amp;gt;
&amp;lt;item name=&quot;android:windowTranslucentStatus&quot;&amp;gt;true&amp;lt;/item&amp;gt;
&amp;lt;item name=&quot;android:windowDrawsSystemBarBackgrounds&quot;&amp;gt;true&amp;lt;/item&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;android:windowTranslucentStatus&amp;nbsp;&lt;br /&gt;android:windowDrawsSystemBarBackgrounds&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두가지 속성으로 반투명 하게 만들었지만 아래와 같이 statusBar영역이 Activity와 FragmentLayout 영역과 겹쳐지는 현상이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;373&quot; data-filename=&quot;blob&quot; width=&quot;400&quot; height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVDCUi/btq8nuMSOPK/I6PbyUbhFKNTZtpEIfgkyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVDCUi/btq8nuMSOPK/I6PbyUbhFKNTZtpEIfgkyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVDCUi/btq8nuMSOPK/I6PbyUbhFKNTZtpEIfgkyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVDCUi%2Fbtq8nuMSOPK%2FI6PbyUbhFKNTZtpEIfgkyk%2Fimg.png&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;373&quot; data-filename=&quot;blob&quot; width=&quot;400&quot; height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 Layout마다 최상위에&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;android:&lt;/span&gt;fitsSystemWindows=&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&quot;true&quot;&lt;/b&gt; 를 추가해주니 잘 해결할 수 있었어요 : )&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> Android/  Android Study</category>
      <category>Android StatusBar 반투명</category>
      <category>Android 상태바 반투명</category>
      <category>StatusBar 겹쳐짐</category>
      <category>StatusBar 반투명</category>
      <category>상태바 겹쳐짐</category>
      <category>상태바 반투명 하게</category>
      <category>상태바 안 겹쳐지게 하기</category>
      <category>안드로이드 StatusBar 반투명</category>
      <category>안드로이드 상태바</category>
      <category>안드로이드 상태바 반투명</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/97</guid>
      <comments>https://yunaaaas.tistory.com/97#entry97comment</comments>
      <pubDate>Tue, 29 Jun 2021 00:14:31 +0900</pubDate>
    </item>
    <item>
      <title>[Python - 프로그래머스 Level2] JadenCase 문자열 만들기</title>
      <link>https://yunaaaas.tistory.com/96</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;figure id=&quot;og_1624257897581&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;코딩테스트 연습 - JadenCase 문자열 만들기&quot; data-og-description=&quot;JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 &quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12951&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12951&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nsiaK/hyKCBBBLFJ/arRYoxbz12XmLbto0RkwhK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/iPgmp/hyKD6tc07V/Gjkhk1K2cy5SSidX0PSxC0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/12951&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/12951&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nsiaK/hyKCBBBLFJ/arRYoxbz12XmLbto0RkwhK/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/iPgmp/hyKD6tc07V/Gjkhk1K2cy5SSidX0PSxC0/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 연습 - JadenCase 문자열 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제한 사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;s는 길이 1 이상인 문자열입니다.&lt;/li&gt;
&lt;li&gt;s는 알파벳과 공백문자(&quot; &quot;)로 이루어져 있습니다.&lt;/li&gt;
&lt;li&gt;첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;310&quot; data-filename=&quot;스크린샷 2021-06-21 오후 7.37.52.png&quot; width=&quot;440&quot; height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FQHSV/btq7QwEcqLz/3Gnn7o5keEKok2HLOtsnM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FQHSV/btq7QwEcqLz/3Gnn7o5keEKok2HLOtsnM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FQHSV/btq7QwEcqLz/3Gnn7o5keEKok2HLOtsnM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFQHSV%2Fbtq7QwEcqLz%2F3Gnn7o5keEKok2HLOtsnM1%2Fimg.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;310&quot; data-filename=&quot;스크린샷 2021-06-21 오후 7.37.52.png&quot; width=&quot;440&quot; height=&quot;215&quot; data-ke-mobilestyle=&quot;widthOrigin&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공백이 여러번 중간에 생기는 경우와, 문자열 앞과 뒤에 공백이 생기는 경우를 신경써서 구현해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;replace함수를 이용하여 ' ' (공백)을 '-'로 변환한뒤 split 해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음에는 단어의 맨 앞은 대문자로, 나머지는 소문자로 upper와 lower 함수를 이용하여 구현해주었다.&lt;/p&gt;
&lt;pre id=&quot;code_1610046452897&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def solution(s):
    s = s.replace(' ', '-')
    s = list(s.split('-'))
    for idx, item in enumerate(s):
        upper_str = ''
        if item == '':
            continue
        if item[0].isnumeric():
            upper_str = item[0]+ item[1:].lower()
            s[idx] = upper_str
            continue

        upper_str = item[0].upper() + item[1:].lower()
        s[idx] = upper_str

    return ' '.join(s)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  Python 문제 풀이</category>
      <category>JadenCase 문자열 만들기</category>
      <category>JadenCase 문자열 만들기 문제</category>
      <category>Python</category>
      <category>알고리즘</category>
      <category>파이썬 알고리즘</category>
      <category>파이썬 코테</category>
      <category>파이썬 프로그래머스</category>
      <category>프로그래머스</category>
      <category>프로그래머스 JadenCase 문자열 만들기 문제</category>
      <category>프로그래머스 파이썬 JadenCase 문자열 만들기</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/96</guid>
      <comments>https://yunaaaas.tistory.com/96#entry96comment</comments>
      <pubDate>Mon, 21 Jun 2021 15:50:05 +0900</pubDate>
    </item>
    <item>
      <title>[Python - 프로그래머스 Level3] 디스크 컨트롤러</title>
      <link>https://yunaaaas.tistory.com/95</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;figure id=&quot;og_1624254476763&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;코딩테스트 연습 - 디스크 컨트롤러&quot; data-og-description=&quot;하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42627&quot; data-og-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42627&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Kix1b/hyKEbH00Ar/KoFVuOE5MvrddeMq8DeHr1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cTfEVZ/hyKCJGllPp/Qjyi1BfGaUeoQ9RrXGVsmk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/rLO7S/hyKCFRw5cO/XKyNKnzNeajXmDz5P4HMek/img.png?width=1352&amp;amp;height=462&amp;amp;face=0_0_1352_462&quot;&gt;&lt;a href=&quot;https://programmers.co.kr/learn/courses/30/lessons/42627&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://programmers.co.kr/learn/courses/30/lessons/42627&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Kix1b/hyKEbH00Ar/KoFVuOE5MvrddeMq8DeHr1/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/cTfEVZ/hyKCJGllPp/Qjyi1BfGaUeoQ9RrXGVsmk/img.jpg?width=626&amp;amp;height=626&amp;amp;face=0_0_626_626,https://scrap.kakaocdn.net/dn/rLO7S/hyKCFRw5cO/XKyNKnzNeajXmDz5P4HMek/img.png?width=1352&amp;amp;height=462&amp;amp;face=0_0_1352_462');&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;코딩테스트 연습 - 디스크 컨트롤러&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xGvWw/btq7KmJk9Z0/4J56T45bL4H6hP4iJx4hnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xGvWw/btq7KmJk9Z0/4J56T45bL4H6hP4iJx4hnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xGvWw/btq7KmJk9Z0/4J56T45bL4H6hP4iJx4hnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxGvWw%2Fbtq7KmJk9Z0%2F4J56T45bL4H6hP4iJx4hnk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;341&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGeUMu/btq7MclRFsd/c1h8IJVHA0AIYEIJzSEHA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGeUMu/btq7MclRFsd/c1h8IJVHA0AIYEIJzSEHA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGeUMu/btq7MclRFsd/c1h8IJVHA0AIYEIJzSEHA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGeUMu%2Fbtq7MclRFsd%2Fc1h8IJVHA0AIYEIJzSEHA0%2Fimg.png&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;- A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms) - B: 1ms부터 대기하다가, 3ms 시점에 작업을 시작해서 12ms 시점에 작업 완료(요청에서 종료까지 : 11ms) - C: 2ms부터 대기하다가, 12ms 시점에 작업을 시작해서 18ms 시점에 작업 완료(요청에서 종료까지 : 16ms)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 각 작업의 요청부터 종료까지 걸린 시간의 평균은 10ms(= (3 + 11 + 16) / 3)가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 A &amp;rarr; C &amp;rarr; B 순서대로 처리하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;437&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GCYnu/btq7P7YsobW/YHo03UTQ2bZDEihZN7FrRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GCYnu/btq7P7YsobW/YHo03UTQ2bZDEihZN7FrRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GCYnu/btq7P7YsobW/YHo03UTQ2bZDEihZN7FrRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGCYnu%2Fbtq7P7YsobW%2FYHo03UTQ2bZDEihZN7FrRk%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;437&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;- A: 3ms 시점에 작업 완료(요청에서 종료까지 : 3ms) - C: 2ms부터 대기하다가, 3ms 시점에 작업을 시작해서 9ms 시점에 작업 완료(요청에서 종료까지 : 7ms) - B: 1ms부터 대기하다가, 9ms 시점에 작업을 시작해서 18ms 시점에 작업 완료(요청에서 종료까지 : 17ms)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 A &amp;rarr; C &amp;rarr; B의 순서로 처리하면 각 작업의 요청부터 종료까지 걸린 시간의 평균은 9ms(= (3 + 7 + 17) / 3)가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제한 사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;jobs의 길이는 1 이상 500 이하입니다.&lt;/li&gt;
&lt;li&gt;jobs의 각 행은 하나의 작업에 대한 [작업이 요청되는 시점, 작업의 소요시간] 입니다.&lt;/li&gt;
&lt;li&gt;각 작업에 대해 작업이 요청되는 시간은 0 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;각 작업에 대해 작업의 소요시간은 1 이상 1,000 이하입니다.&lt;/li&gt;
&lt;li&gt;하드디스크가 작업을 수행하고 있지 않을 때에는 먼저 요청이 들어온 작업부터 처리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;입출력 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;192&quot; data-filename=&quot;스크린샷 2021-06-21 오후 2.48.31.png&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjuPD3/btq7HybU2BL/46AvdPIgJq89lDxfwYCbIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjuPD3/btq7HybU2BL/46AvdPIgJq89lDxfwYCbIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjuPD3/btq7HybU2BL/46AvdPIgJq89lDxfwYCbIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjuPD3%2Fbtq7HybU2BL%2F46AvdPIgJq89lDxfwYCbIk%2Fimg.png&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;192&quot; data-filename=&quot;스크린샷 2021-06-21 오후 2.48.31.png&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&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 data-ke-size=&quot;size16&quot;&gt;문제에 주어진 예와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0ms 시점에 3ms 걸리는 작업 요청이 들어옵니다.&lt;/li&gt;
&lt;li&gt;1ms 시점에 9ms 걸리는 작업 요청이 들어옵니다.&lt;/li&gt;
&lt;li&gt;2ms 시점에 6ms 걸리는 작업 요청이 들어옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;풀이 과정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업이 모두 처리되는 시간의 평균을 가장 최소로 구해야하기 때문에 현재시점의 총 대기시간을 모두 구해줘야한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;b&gt;jobs 리스트의 작업이 요청되는 시간이 정렬이 되어 들어오지 않으므로 정렬을 먼저 시켜줘야한다!&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힙의 push 시, 작업 소요 시간 기준으로 최소힙을 구하기 위해 jobs을 거꾸로 heap에 넣어주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;heap에 push 조건으로 start(작업 시작시간) 보다 크고 now(현재 시간)보다 작거나 같은 경우만 heap에 넣어주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;work에서 작업이 있는 경우는 heap에서 하나 꺼내어 start를 현재시간으로 now를 작업 처리시간으로 변경해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;answer (전체 작업 시간)은 now(현재시간 + 작업 처리 시간) 에서 current[1] (작업 요청 시간) 을 뺀 뒤 더해주었다.&lt;/p&gt;
&lt;pre id=&quot;code_1610046452897&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import heapq
from collections import deque


def solution(jobs):
    answer, now, start = 0, 0, -1
    work = []
    jobs = list(sorted(jobs, key= lambda k : k[0]))
    jobs = deque(jobs)
    total_cnt = len(jobs)
    while jobs or work:
        while jobs and start &amp;lt; jobs[0][0] &amp;lt;= now:
            w_time, w_access = jobs.popleft()
            heapq.heappush(work, [w_access, w_time])

        if work:
            current = heapq.heappop(work)
            start = now
            now += current[0]
            answer += (now - current[1])
        else:
            now += 1

    return int(answer / total_cnt)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Algorithm/  Python 문제 풀이</category>
      <category>Python</category>
      <category>디스크 컨트롤러</category>
      <category>디스크 컨트롤러 문제</category>
      <category>알고리즘</category>
      <category>파이썬 알고리즘</category>
      <category>파이썬 코테</category>
      <category>파이썬 프로그래머스</category>
      <category>프로그래머스</category>
      <category>프로그래머스 디스크 컨트롤러 문제</category>
      <category>프로그래머스 파이썬 디스크 컨트롤러</category>
      <author>yunakim2</author>
      <guid isPermaLink="true">https://yunaaaas.tistory.com/95</guid>
      <comments>https://yunaaaas.tistory.com/95#entry95comment</comments>
      <pubDate>Mon, 21 Jun 2021 14:54:28 +0900</pubDate>
    </item>
  </channel>
</rss>