<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>pompom_33.log</title>
        <link>https://velog.io/</link>
        <description>Supply Chain Planning Specialist in Medical/Healthcare</description>
        <lastBuildDate>Thu, 09 Jan 2025 05:52:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>pompom_33.log</title>
            <url>https://velog.velcdn.com/images/pompom_33/profile/f58ac1b6-b831-4a41-a0d2-1d1fe0a5d0a8/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. pompom_33.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/pompom_33" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[파이썬] strip vs. split]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-strip-vs.-split</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-strip-vs.-split</guid>
            <pubDate>Thu, 09 Jan 2025 05:52:00 GMT</pubDate>
            <description><![CDATA[<ol>
<li>strip()
문자열 양쪽의 공백이나 특정 문자를 제거합니다.
기본적으로 공백, 줄바꿈(\n), 탭(\t) 등을 제거합니다.
제거할 문자를 지정할 수도 있습니다.</li>
</ol>
<pre><code class="language-python">text = &quot;  Hello, World!  \n&quot;
cleaned_text = text.strip()  # 양쪽 공백과 줄바꿈 제거
print(cleaned_text)  # &quot;Hello, World!&quot;

# 특정 문자 제거
text = &quot;###Hello###&quot;
cleaned_text = text.strip(&#39;#&#39;)  # &#39;#&#39; 문자 제거
print(cleaned_text)  # &quot;Hello&quot;
</code></pre>
<ol start="2">
<li>split()
문자열을 특정 구분자를 기준으로 잘라서 리스트로 반환합니다.
기본값은 공백이며, 지정하지 않으면 공백(스페이스, 탭, 줄바꿈 등)을 기준으로 나눕니다.
특정 구분자를 지정하면 해당 문자로 나눕니다.</li>
</ol>
<pre><code class="language-python">text = &quot;apple,banana,cherry&quot;
split_text = text.split(&#39;,&#39;)  # &#39;,&#39;를 기준으로 나눔
print(split_text)  # [&#39;apple&#39;, &#39;banana&#39;, &#39;cherry&#39;]

# 기본 공백 기준으로 나눔
text = &quot;Hello   World&quot;
split_text = text.split()  # 공백 기준으로 나눔
print(split_text)  # [&#39;Hello&#39;, &#39;World&#39;]</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] readlines vs. read]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-readlines-vs.-read</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-readlines-vs.-read</guid>
            <pubDate>Thu, 09 Jan 2025 05:50:02 GMT</pubDate>
            <description><![CDATA[<ol>
<li>readlines()
파일 전체를 읽어서 각 줄을 리스트의 항목으로 반환합니다.
결과는 문자열의 리스트 형태가 됩니다.
각 줄 끝에 줄바꿈 문자(\n)가 포함되어 있을 수 있습니다.<pre><code class="language-python">with open(&#39;file.csv&#39;, &#39;r&#39;) as f:
 lines = f.readlines()
 # lines: [&#39;line1\n&#39;, &#39;line2\n&#39;, &#39;line3\n&#39;]</code></pre>
</li>
</ol>
<ol start="2">
<li>read()
파일 전체 내용을 하나의 문자열로 반환합니다.
줄 구분 없이 파일 내용을 그대로 읽고, 필요하면 나중에 .splitlines()로 줄 단위로 나눌 수 있습니다.</li>
</ol>
<pre><code class="language-python">with open(&#39;file.csv&#39;, &#39;r&#39;) as f:
    content = f.read()
    # content: &#39;line1\nline2\nline3\n&#39;
</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] 문자열의 sorted]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-sorted</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-sorted</guid>
            <pubDate>Sun, 29 Dec 2024 06:13:53 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫-기본-문법">👩‍🏫 기본 문법</h3>
<p>문자열에서 sorted가 사용되면</p>
<pre><code class="language-python">sorted(문자열) = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;]</code></pre>
<ul>
<li><strong>문자열 ⭐한 개 단위로 쪼개서</strong> 알파벳 순서로 sort한 <strong>⭐리스트</strong>를 반환해줌</li>
</ul>
<h3 id="👩🏫-예를-들어">👩‍🏫 예를 들어</h3>
<pre><code class="language-python">strs = [&quot;eat&quot;,&quot;tea&quot;,&quot;tan&quot;]

for word in strs:
    print(sorted(word))

&gt;&gt; [&#39;a&#39;, &#39;e&#39;, &#39;t&#39;]
&gt;&gt; [&#39;a&#39;, &#39;e&#39;, &#39;t&#39;]
&gt;&gt; [&#39;a&#39;, &#39;n&#39;, &#39;t&#39;]</code></pre>
<h3 id="👩🏫-인사이트">👩‍🏫 인사이트</h3>
<ul>
<li>기본적으로 <strong>sorted</strong> 는 <strong>리스트</strong>를 반환하는 함수군!</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] dictionary : 와 =]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-dictionary-%EC%99%80</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-dictionary-%EC%99%80</guid>
            <pubDate>Thu, 19 Dec 2024 01:31:59 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="질문">질문</h3>
<p>왜 수정된 코드에서는 딕셔너리에 새로운 키와 밸류를 할당할 때 &#39;:&#39; 대신 &#39;=&#39; 를 쓰는거야?</p>
</blockquote>
<h3 id="답변">답변</h3>
<p>좋은 질문이에요! 코드를 작성하면서 혼동하기 쉬운 부분인데, 여기에서 :와 =의 차이를 이해하는 것이 중요합니다.</p>
<h3 id="💡-vs-의-차이">💡<code>:</code> vs <code>=</code>의 차이</h3>
<h4 id="1-는-딕셔너리-리터럴에서-키-값-쌍을-정의할-때-사용">1. <code>:</code>는 <strong>딕셔너리 리터럴</strong>에서 키-값 쌍을 정의할 때 사용:</h4>
<pre><code>**딕셔너리를 새로 생성**하거나 **딕셔너리 내부의 키-값 쌍을 지정할 때** 사용됩니다. 예를 들어:</code></pre><pre><code class="language-python">my_dict = {
    &quot;key&quot;: &quot;value&quot;,  # 여기에서 &#39;:&#39;를 사용
    &quot;status&quot;: &quot;deficient&quot;
}</code></pre>
<p>-&gt; 그니까 기존에 정해진 값들을 활용할 때 <code>:</code>를 쓰는 듯!</p>
<h4 id="2-는-값을-업데이트하거나-변수에-값을-할당할-때-사용">2. <code>=</code>는 값을 업데이트하거나 변수에 값을 할당할 때 사용:</h4>
<pre><code>**기존 딕셔너리의 값을 수정**하거나 **새 키를 추가할 때**는 `=`를 사용해야 합니다. 예를 들어:</code></pre><pre><code class="language-python">my_dict[&quot;key&quot;] = &quot;new_value&quot;  # 기존 키 &quot;key&quot;의 값을 업데이트
my_dict[&quot;new_key&quot;] = &quot;value&quot;  # 새 키-값 쌍 추가</code></pre>
<h4 id="왜-수정된-코드에서는-를-사용해야-하나">왜 수정된 코드에서는 <code>=</code>를 사용해야 하나?</h4>
<p>수정된 코드에서는 이미 존재하는 딕셔너리(merged_result)를 업데이트하거나 새 키(status)를 추가하고 있습니다. 이 경우 딕셔너리의 특정 키에 값을 할당해야 하므로 <code>=</code>를 사용해야 합니다.</p>
<h4 id="과거-코드와-현재-코드의-차이">과거 코드와 현재 코드의 차이</h4>
<p>과거 코드에서는 station_demands라는 리스트에 새 딕셔너리를 생성해서 추가하고 있었어요. 이때는 <strong>딕셔너리 리터럴</strong>을 사용했기 때문에 :를 사용했습니다:</p>
<pre><code class="language-python">station_demands.append({
    &quot;station_id&quot;: row[&#39;station_id&#39;],  # &#39;:&#39; 사용
    &quot;stock&quot;: stock,
    &quot;predicted_rental&quot;: predicted_rental,
    &quot;status&quot;: &quot;deficient&quot;  # &#39;:&#39; 사용
})</code></pre>
<p>수정된 코드에서는 <strong>이미 존재하는 딕셔너리(merged_result)의 값을 업데이트</strong>하고 있으므로 <code>=</code>를 사용해야 합니다:</p>
<pre><code class="language-python">merged_result[stationid][&quot;status&quot;] = &quot;deficient&quot;  # &#39;=&#39; 사용</code></pre>
<h3 id="요약">요약</h3>
<ul>
<li>딕셔너리 리터럴 생성: <code>:</code> 사용<pre><code class="language-python">new_dict = {&quot;key&quot;: &quot;value&quot;}</code></pre>
</li>
<li>딕셔너리 값 업데이트: <code>=</code> 사용<pre><code class="language-python">existing_dict[&quot;key&quot;] = &quot;new_value&quot;</code></pre>
</li>
</ul>
<h3 id="정리">정리</h3>
<p>수정된 코드에서 <code>=</code>를 사용한 이유는, <strong>이미 생성된 merged_result 딕셔너리</strong>에 <strong>새로운 키-값 쌍을 추가</strong>하거나 <strong>기존 값을 업데이트</strong>하고 있기 때문입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] CROSS JOIN 활용]]></title>
            <link>https://velog.io/@pompom_33/SQL-CROSS-JOIN-%ED%99%9C%EC%9A%A9</link>
            <guid>https://velog.io/@pompom_33/SQL-CROSS-JOIN-%ED%99%9C%EC%9A%A9</guid>
            <pubDate>Sun, 15 Dec 2024 02:51:15 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫문제">👩‍🏫문제</h3>
<p><a href="https://leetcode.com/problems/students-and-examinations/description/?envType=study-plan-v2&amp;envId=top-sql-50">1280. Students and Examinations</a>
각 학생들이 각 과목을 응시한 횟수를 반환하라.</p>
<p><strong>Students</strong>
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1          | Alice        |
| 2          | Bob          |
| 13         | John         |
| 6          | Alex         |
+------------+--------------+</p>
<p><strong>Subjects</strong>
+--------------+
| subject_name |
+--------------+
| Math         |
| Physics      |
| Programming  |
+--------------+</p>
<p><strong>Examinations</strong>
+------------+--------------+
| student_id | subject_name |
+------------+--------------+
| 1          | Math         |
| 1          | Physics      |
| 1          | Programming  |
| 2          | Programming  |
| 1          | Physics      |
| 1          | Math         |
| 13         | Math         |
| 13         | Programming  |
| 13         | Physics      |
| 2          | Math         |
| 1          | Math         |
+------------+--------------+</p>
<h3 id="👩🏫풀이">👩‍🏫풀이</h3>
<pre><code class="language-sql">SELECT S.student_id, 
       S.student_name, 
       sub.subject_name, 
       COUNT(E.student_id) AS attended_exams
FROM Students S
CROSS JOIN Subjects sub
LEFT JOIN Examinations E
    ON S.student_id = E.student_id
    AND sub.subject_name = E.subject_name
GROUP BY S.student_id, S.student_name, sub.subject_name
ORDER BY S.student_id, sub.subject_name</code></pre>
<h3 id="💡-idea">💡 IDEA</h3>
<ul>
<li><strong>CROSS JOIN</strong>으로 접점이 없는 Students와 Subjects의 가능한 모든 수를 연결 (해당 학생이 응시하지 않은 과목은 &#39;0&#39;으로 표기해야 함)</li>
<li>여기서 <code>LEFT JOIN</code>으로 조인해야 student_id기준으로 정렬됨.<blockquote>
<pre><code class="language-sql">LEFT JOIN Examinations E
ON S.student_id = E.student_id</code></pre>
</blockquote>
</li>
<li>여기서 <code>LEFT JOIN</code>으로 조인해야 <code>subject_name</code>기준으로 정렬됨.<blockquote>
<pre><code class="language-sql">LEFT JOIN Examinations E
...
AND sub.subject_name = E.subject_name</code></pre>
</blockquote>
</li>
</ul>
<p>하지만 여전히 어렵다...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 날짜 덧셈 뺄셈]]></title>
            <link>https://velog.io/@pompom_33/SQL-%EB%82%A0%EC%A7%9C-%EB%8D%A7%EC%85%88-%EB%BA%84%EC%85%88</link>
            <guid>https://velog.io/@pompom_33/SQL-%EB%82%A0%EC%A7%9C-%EB%8D%A7%EC%85%88-%EB%BA%84%EC%85%88</guid>
            <pubDate>Thu, 05 Dec 2024 02:25:38 GMT</pubDate>
            <description><![CDATA[<h3 id="oracle">Oracle</h3>
<ul>
<li><code>SYSDATE</code> = 현재 날짜
<code>SYSDATE</code> +1 = 내일
<code>SYSDATE</code> +7 = 일주일 뒤
<code>ADD_MONTHS</code>(SYSDATE, 1) = 오늘로부터 한 달 뒤
<code>ADD_MONTHS</code>(SYSDATE, 12)</li>
</ul>
<h3 id="mysql">MySQL</h3>
<ul>
<li><code>now()</code> = 현재 날짜
<code>DATE_ADD</code>(now(), <code>INTERVAL</code> 1 DAY)
<code>DATE_ADD</code>(now(), <code>INTERVAL</code> 1 WEEK)
<code>DATE_ADD</code>(now(), <code>INTERVAL</code> 1 MONTH)
<code>DATE_ADD</code>(now(), <code>INTERVAL</code> 1 YEAR)</li>
</ul>
<blockquote>
<p>내용 출처 : <a href="https://blog.naver.com/newyorkinms/220757138800">https://blog.naver.com/newyorkinms/220757138800</a></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CSS] CSS 기초]]></title>
            <link>https://velog.io/@pompom_33/CSS-CSS-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@pompom_33/CSS-CSS-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Fri, 08 Nov 2024 02:48:35 GMT</pubDate>
            <description><![CDATA[<p><strong>1. <code>.</code> (점):</strong>
클래스 선택자를 나타냅니다. 예를 들어, <code>.schedule</code>은 <code>class=&quot;schedule&quot;</code>인 모든 HTML 요소에 스타일을 적용합니다.</p>
<pre><code class="language-css">.schedule {
    /* 클래스가 schedule인 요소에 스타일 적용 */
    width: 30%;
    padding: 20px;
    /* 기타 스타일 */
}</code></pre>
<p><strong>2. <code>#</code> (샵):</strong>
아이디 선택자를 나타냅니다. <code>#map_div</code>는 <code>id=&quot;map_div&quot;</code>인 특정 HTML 요소에 스타일을 적용합니다. 아이디는 한 페이지 내에서 고유해야 하며, 한 번만 사용됩니다.</p>
<pre><code class="language-css">#map_div {
    /* 아이디가 map_div인 요소에 스타일 적용 */
    width: 400px;
    height: 500px;
    /* 기타 스타일 */
}</code></pre>
<p><strong>3. 아무것도 붙지 않은 경우</strong>:
 태그 선택자를 나타내며, 해당 태그에 해당하는 모든 HTML 요소에 스타일을 적용합니다. 예를 들어, table은 페이지의 모든 <table> 요소에 스타일을 지정합니다.</p>
<pre><code class="language-css">table {
    /* 모든 table 요소에 스타일 적용 */
    width: 100%;
    border-collapse: collapse;
}</code></pre>
<p><strong>요약</strong>
<code>.</code>: 클래스 선택자 (.class-name)
<code>#</code>: 아이디 선택자 (#id-name)
<code>아무것도 안 붙은 경우</code>: 태그 선택자 (element-name)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[작성중][딥러닝] RNN 모델 작성]]></title>
            <link>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-RNN-%EB%AA%A8%EB%8D%B8-%EC%9E%91%EC%84%B1</link>
            <guid>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-RNN-%EB%AA%A8%EB%8D%B8-%EC%9E%91%EC%84%B1</guid>
            <pubDate>Tue, 08 Oct 2024 05:01:32 GMT</pubDate>
            <description><![CDATA[<h3 id="chat-gpt-질문-답변">Chat GPT 질문-답변</h3>
<p><a href="https://chatgpt.com/share/6704bc0f-91c0-8003-bcb9-9673d5906eb5">RNN 모델 작성</a></p>
<h3 id="rnn-모델-작성">RNN 모델 작성</h3>
<pre><code class="language-python">class RNNModel(torch.nn.Module):
  def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
    super().__init__()
    self.embedding = torch.nn.Embedding(
        num_embeddings=vocab_size,  #토큰나이저의 어휘 개수
        embedding_dim=embedding_dim  # 임베딩 벡터 차원
    )
    self.rnn = torch.nn.RNN(
        inout_size=embedding_dim,
        hidden_size=hidden_dim,
        num_layers=1,
        dropout=0.5 # 오버피팅을 방지하기 위해 일부러 일부 파라미터들을 학습시키지 않는 역할. 0.5면 랜덤하게 절반의 파라미터만 학습
    )
    self.fc = torch.nn.Linear(hidden_dim, output_dim)
    self.dropout = torch.nn.Dropout(0.5)

  def forward(self, x):
    text_lengths = (x != 0).long().sum(dim=0)
    embedded = self.dropout(self.embedding(x))
    packed = pack_padded_sequence(embedded, text_lengths, enforce_sorted=False)
    packed_output, hidden = self.rnn(packed) #RNN 통과
    output, output_lengths = pad_packed_sequence(packed_output)
    return self.fc(hidden)</code></pre>
<h3 id="특히-몰랐던-부분">특히 몰랐던 부분!</h3>
<h4 id="1-forward-함수의-다음-부분">1. forward 함수의 다음 부분:</h4>
<pre><code class="language-python">packed = pack_padded_sequence(
embedded, text_lengths, enforce_sorted=False
)</code></pre>
<ul>
<li>가변 길이의 입력을 RNN에 전달하기 위해 패딩을 제거한 시퀀스를 패킹합니다.</li>
<li><code>text_lengths</code>로 시퀀스의 길이를 지정하고, 정렬되지 않은 배치도 처리할 수 있도록 합니다.</li>
</ul>
<h4 id="2-dropout을-두-번-하는-이유">2. dropout을 두 번 하는 이유</h4>
<p>이 코드에서는 두 가지 다른 위치에서 드롭아웃을 수행하는데, 그 이유는 각각의 드롭아웃이 다른 층과 다른 목적을 위해 사용되기 때문이야. 이를 각각 자세히 설명해볼게.</p>
<ol>
<li><code>self.rnn = torch.nn.RNN(..., dropout=0.5)</code>
이 드롭아웃은 <strong>RNN 층 사이의 드롭아웃</strong>을 의미해. RNN 층이 여러 개 있을 때, 각 RNN 층 사이에서 드롭아웃이 적용되는 거야.</li>
</ol>
<p>예를 들어, RNN이 여러 층으로 쌓여 있을 경우 (num_layers &gt; 1), 각 층의 출력에서 다음 층으로 전달될 때 드롭아웃을 수행해서 과적합(overfitting)을 방지하는 역할을 해. 하지만 이 드롭아웃은 층 간에만 적용되기 때문에, 만약 num_layers=1로 지정하면 이 드롭아웃은 적용되지 않게 돼.
따라서 이 드롭아웃은 RNN의 은닉 상태를 다음 층으로 전달할 때만 적용된다고 보면 돼.</p>
<ol start="2">
<li><code>self.dropout = torch.nn.Dropout(0.5)</code>
이 드롭아웃은 <strong>임베딩 벡터나 출력</strong>에 적용되는 드롭아웃이야.</li>
</ol>
<p>이 부분은 입력된 데이터나 임베딩 벡터, 혹은 RNN의 마지막 은닉 상태가 완전 연결 층(fc)으로 넘어가기 전에 드롭아웃을 추가하는 거야. 이는 RNN 층 내부의 드롭아웃과 별도로, 모델의 다른 부분에서 과적합을 방지하기 위한 역할을 수행해.</p>
<p><strong>왜 두 번 드롭아웃을 수행하는가?</strong></p>
<ul>
<li>RNN 드롭아웃은 층 간의 드롭아웃을 제어하는 것이고,</li>
<li><strong>별도의 드롭아웃(self.dropout)</strong>은 다른 단계에서 임베딩 벡터나 RNN의 출력이 네트워크로 흘러가기 전에 적용하는 거야.</li>
</ul>
<p>이렇게 다양한 위치에서 드롭아웃을 적용하면 모델이 특정 값에 지나치게 의존하는 것을 방지하고, 다양한 패턴을 학습하도록 돕는 역할을 해.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] 걸린 시간 구하기]]></title>
            <link>https://velog.io/@pompom_33/SQL-%EA%B1%B8%EB%A6%B0-%EC%8B%9C%EA%B0%84-%EA%B5%AC%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@pompom_33/SQL-%EA%B1%B8%EB%A6%B0-%EC%8B%9C%EA%B0%84-%EA%B5%AC%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 06 Oct 2024 09:03:15 GMT</pubDate>
            <description><![CDATA[<h3 id="문제">문제</h3>
<p><a href="https://leetcode.com/problems/average-time-of-process-per-machine/?envType=study-plan-v2&amp;envId=top-sql-50">1661. Average Time of Process per Machine</a></p>
<h3 id="좋은-풀이">좋은 풀이!!</h3>
<pre><code class="language-sql">SELECT machine_id, 
        ROUND(
            AVG(
                CASE WHEN activity_type=&#39;start&#39; THEN - timestamp ELSE timestamp end
                )*2,
              3) AS processing_time
FROM activity
GROUP BY machine_id;</code></pre>
<ul>
<li><p><strong>POINT 1</strong> : <code>-timestamp</code> 
CASE WHEN문을 활용하여<code>start</code>일 경우<code>-timestamp</code> 이렇게 음수를 취해줌으로써 <code>(end-start)</code>의 값을 유도</p>
</li>
<li><p><strong>POINT 2</strong> : <code>AVG(~)*2</code>
이 상태에서 average를 구하면 실제로는 n개의 task를 진행했는데도 데이터가 2n개이기 때문에 2n개로 나눠진 average 값이 나옴. 이를 원복해주기 위해 average 값에 2를 곱해줌</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[딥러닝] torch 생성자 함수에 "transform"]]></title>
            <link>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-torch-%EC%83%9D%EC%84%B1%EC%9E%90-%ED%95%A8%EC%88%98%EC%97%90-transform</link>
            <guid>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-torch-%EC%83%9D%EC%84%B1%EC%9E%90-%ED%95%A8%EC%88%98%EC%97%90-transform</guid>
            <pubDate>Wed, 02 Oct 2024 02:49:07 GMT</pubDate>
            <description><![CDATA[<h3 id="질문">질문</h3>
<pre><code class="language-python">from torch.utils.data import Dataset
import pandas as pd

class CustomImageDataset(Dataset):
  def __init__(self, img_dir, transform=None):
    self.img_dir = img_dir
    self.img_labels = pd.read_csv(f&quot;{self.img_dir}/label.csv&quot;)
    self.transform = transform</code></pre>
<p>내가 궁금한 부분은 <code>def __init__(self, img_dir, transform=None)</code>: 에서 <code>transform=None</code>의 역할이 뭐야? 한글로 설명해줘.</p>
<h3 id="답변">답변</h3>
<p><code>def __init__(self, img_dir, transform=None):</code>에서 <code>transform=None</code>의 역할은, 이미지에 적용할 전처리(transformation)가 없을 경우를 대비해 기본값을 None으로 설정하는 것입니다.</p>
<p>즉, transform 매개변수가 제공되지 않으면 기본적으로 아무 전처리도 적용되지 않게 설정하는 것이고, 만약 transform에 특정 변환을 적용하는 함수나 객체를 전달하면, 데이터를 불러올 때 그 변환이 이미지에 적용됩니다.</p>
<p>예를 들어, 이미지 데이터를 학습에 적합한 형태로 변환할 필요가 있을 때, transform에 torchvision.transforms 같은 변환 함수를 전달할 수 있어요. 하지만 변환이 필요 없을 때는 이를 생략할 수 있도록 기본값을 None으로 설정한 거죠.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[딥러닝] Dataset vs. Dataloader]]></title>
            <link>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-Dataset-vs.-Dataloader</link>
            <guid>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-Dataset-vs.-Dataloader</guid>
            <pubDate>Wed, 02 Oct 2024 01:39:09 GMT</pubDate>
            <description><![CDATA[<h3 id="질문">질문</h3>
<p>Pytorch에서 Dataset과 Dataloader의 차이가 뭘까?</p>
<h3 id="답변">답변</h3>
<h4 id="1-dataset">1. <strong>Dataset</strong>:</h4>
<ul>
<li><code>Dataset</code>은 데이터 샘플과 그에 상응하는 라벨을 포함하는 클래스입니다.</li>
<li>데이터의 구조를 정의하며, 데이터를 어떻게 불러올지 설정하는 역할을 합니다.</li>
<li><code>Dataset</code>을 상속받아 <code>__getitem__</code>과 <code>__len__</code> 메서드를 구현하면, 원하는 방식으로 데이터를 로드할 수 있습니다.
예를 들어, CSV 파일을 읽거나 이미지 폴더에서 이미지를 불러와 사용할 수 있게 합니다.<pre><code class="language-python">from torch.utils.data import Dataset
</code></pre>
</li>
</ul>
<p>class CustomDataset(Dataset):
    def <strong>init</strong>(self, data):
        self.data = data</p>
<pre><code>def __getitem__(self, index):
    return self.data[index]

def __len__(self):
    return len(self.data)     </code></pre><pre><code>
#### 2. **DataLoader**:

* `DataLoader`는 `Dataset`에서 정의한 데이터를 효율적으로 로드하기 위한 클래스입니다.
* 주된 기능은 **배치(batch)** 단위로 데이터를 불러오고, 데이터를 섞거나(shuffle), 병렬로 처리하는 등의 작업을 돕습니다.
* 데이터가 너무 클 경우 한 번에 불러오는 대신 여러 미니배치로 나눠 처리할 수 있게 합니다.
* `DataLoader`는 내부적으로 `Dataset` 객체를 받아서 데이터를 로드합니다.
```python
from torch.utils.data import DataLoader

dataset = CustomDataset([1, 2, 3, 4, 5])
dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

for data in dataloader:
    print(data)</code></pre><h4 id="요약">요약:</h4>
<ul>
<li><strong>Dataset</strong>: 데이터를 정의하고, 어떻게 로드할지 결정하는 클래스.</li>
<li><strong>DataLoader</strong>: Dataset에서 정의한 데이터를 배치 처리하거나 병렬로 처리할 수 있게 도와주는 클래스.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] super().__init__()]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-super.init</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-super.init</guid>
            <pubDate>Sun, 29 Sep 2024 13:36:26 GMT</pubDate>
            <description><![CDATA[<blockquote>
<pre><code class="language-python">class SimpleDNN(torch.nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
    super().__init__()
    ...
    (하략)</code></pre>
</blockquote>
<pre><code>
### 질문
**`super().__init__()`** 이 뭐야?


### 기본 개념:
* **부모 클래스의 상속**: 클래스는 상속을 통해 다른 클래스의 속성과 메서드를 물려받을 수 있습니다. 예를 들어, **SimpleDNN**은 `torch.nn.Module`을 상속받아 신경망 모델로서 필요한 다양한 기능을 물려받습니다.




* `super() 함수`: 이 함수는 자식 클래스에서 부모 클래스를 참조할 수 있게 해줍니다. 특히, 부모 클래스의 메서드(생성자 포함)를 호출할 때 유용합니다.

* `__init__()` 함수: 클래스가 생성될 때 자동으로 호출되는 생성자 함수입니다. 부모 클래스에도 고유의 `__init__()` 메서드가 있을 수 있으며, **이를 자식 클래스에서 사용하고 싶을 때 `super().__init__()`을 호출합니다.**


### 왜 사용하는가?
1. **부모 클래스의 초기화**: 부모 클래스가 특정 변수를 초기화하거나 중요한 설정을 할 수 있습니다. 이를 자식 클래스에서 사용해야 할 때, **`super().__init__()`**을 통해 그 작업을 수행합니다.

2. **코드 중복 방지**: 부모 클래스에서 이미 정의된 초기화 작업을 다시 작성할 필요 없이, 자식 클래스에서 super()로 호출하여 활용할 수 있습니다.

### 예시
```python
class Parent:
    def __init__(self, name):
        self.name = name
        print(&quot;Parent class initialized&quot;)

class Child(Parent):
    def __init__(self, name, age):
        # 부모 클래스의 __init__을 호출하여 name을 초기화
        super().__init__(name)
        self.age = age
        print(&quot;Child class initialized&quot;)

child = Child(&quot;Alice&quot;, 25)</code></pre><p>출력 결과: </p>
<pre><code class="language-python">Parent class initialized
Child class initialized</code></pre>
<ul>
<li><p><strong><code>super().__init__()(name)</code></strong>가 없으면 Parent 클래스의 name 변수가 초기화되지 않아 오류가 발생할 수 있습니다.</p>
</li>
<li><p><strong><code>super().__init__()(name)</code></strong>는 Parent 클래스의 생성자를 호출하여 name 변수를 설정하고, 그 후 자식 클래스에서 추가 작업을 수행할 수 있습니다.</p>
</li>
</ul>
<p>즉, <strong><code>super().__init__()(name)</code></strong>는 부모 클래스의 속성이나 메서드를 자식 클래스에서도 사용할 수 있게 해주는 중요한 역할을 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[통계학] 로그 취해준 변수 원복하기(선형회귀모델)]]></title>
            <link>https://velog.io/@pompom_33/%ED%86%B5%EA%B3%84%ED%95%99-%EB%A1%9C%EA%B7%B8-%EC%B7%A8%ED%95%B4%EC%A4%80-%EB%B3%80%EC%88%98-%EC%9B%90%EB%B3%B5%ED%95%98%EA%B8%B0%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8</link>
            <guid>https://velog.io/@pompom_33/%ED%86%B5%EA%B3%84%ED%95%99-%EB%A1%9C%EA%B7%B8-%EC%B7%A8%ED%95%B4%EC%A4%80-%EB%B3%80%EC%88%98-%EC%9B%90%EB%B3%B5%ED%95%98%EA%B8%B0%EC%84%A0%ED%98%95%ED%9A%8C%EA%B7%80%EB%AA%A8%EB%8D%B8</guid>
            <pubDate>Sun, 29 Sep 2024 10:43:19 GMT</pubDate>
            <description><![CDATA[<h3 id="1-독립변수--종속변수">1. 독립변수 &amp; 종속변수</h3>
<p>🏠독립 변수: 집의 크기
💰종속 변수: 집 값</p>
<h3 id="2-정규화">2. 정규화</h3>
<p>🏡독립 변수: 로그 취한 집의 크기
💵종속 변수: 로그 취한 집 값</p>
<h3 id="3-선형회귀모델을-만든다">3. 선형회귀모델을 만든다</h3>
<p>뚝딱뚝딱</p>
<h3 id="4-새로운-데이터에-대해-예측">4. 새로운 데이터에 대해 예측</h3>
<p><strong>내가 하고 싶은 것</strong> : 🏠새로운 집의 크기 -&gt; 💰집 값 예측</p>
<h4 id="집의-크기와-집-값-모두-로그정규화-취했다면">집의 크기와 집 값 모두 로그(정규화) 취했다면</h4>
<blockquote>
<p>🏠새로운 집의 크기 -&gt; <strong>🏡로그 취해주고</strong> -&gt; 
💵회귀식으로 예측 -&gt; <strong>💰예측 결과값을 다시 지수승</strong> (최종 결과)</p>
</blockquote>
<h4 id="만약에-집의-크기만-로그정규화-취했다면">만약에 집의 크기만 로그(정규화) 취했다면</h4>
<blockquote>
<p>🏠새로운 집의 크기 -&gt; <strong>🏡로그 취해주고</strong> -&gt; 
💰회귀식으로 예측 (최종 결과)</p>
</blockquote>
<h4 id="만약-집의-가격에만-로그정규화-취했다면">만약 집의 가격에만 로그(정규화) 취했다면</h4>
<blockquote>
<p>🏠새로운 집의 크기 -&gt; 💵회귀식으로 예측 -&gt; <strong>💰예측 결과값 지수승</strong> (최종 결과)</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[수업내용정리]]></title>
            <link>https://velog.io/@pompom_33/%EC%88%98%EC%97%85%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@pompom_33/%EC%88%98%EC%97%85%EB%82%B4%EC%9A%A9%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Fri, 27 Sep 2024 02:11:35 GMT</pubDate>
            <description><![CDATA[<ol>
<li>simple linear regression 부터</li>
<li>multilayer perceptron까지!</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[torch로 linear reggresion 클래스 작성하기]]></title>
            <link>https://velog.io/@pompom_33/torch%EB%A1%9C-linear-reggresion-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@pompom_33/torch%EB%A1%9C-linear-reggresion-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 25 Sep 2024 15:13:05 GMT</pubDate>
            <description><![CDATA[<p><a href="https://chatgpt.com/share/66f42811-d814-8003-b91a-a27e6c12c412">https://chatgpt.com/share/66f42811-d814-8003-b91a-a27e6c12c412</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[딥러닝] 역전파 코드]]></title>
            <link>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%97%AD%EC%A0%84%ED%8C%8C-%EC%BD%94%EB%93%9C</link>
            <guid>https://velog.io/@pompom_33/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%97%AD%EC%A0%84%ED%8C%8C-%EC%BD%94%EB%93%9C</guid>
            <pubDate>Wed, 25 Sep 2024 02:52:24 GMT</pubDate>
            <description><![CDATA[<h3 id="내-질문">내 질문</h3>
<pre><code class="language-python">from collections import defaultdict
import numpy as np
from tqdm import tqdm
from sklearn.metrics import accuracy_score

def train_model(model):
    model.train()
    loss_list = []
    acc_list = []
    for x_train, y_train in tqdm(train_dataloader):
        outputs = model(x_train)
        loss = criterion(outputs, y_train)
        loss_list.append(loss.item())

        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        pred = torch.argmax(outputs, dim=1)
        acc = accuracy_score(y_train, pred)
        acc_list.append(acc)
    return get_mean(loss_list), get_mean(acc_list)</code></pre>
<p>이 코드에서 다음 세 줄의 역할에 대해 설명해줘</p>
<pre><code class="language-python">optimizer.zero_grad()
loss.backward()
optimizer.step()</code></pre>
<h3 id="chat-gpt-답변">Chat GPT 답변</h3>
<p>이 세 줄은 PyTorch에서 모델을 학습시키기 위한 핵심 단계들입니다. 각각의 역할을 설명하자면:</p>
<ol>
<li><code>optimizer.zero_grad()</code>:</li>
</ol>
<p>이 함수는 <strong>모델의 모든 가중치에 대한 기울기(gradient)를 초기화</strong>하는 역할을 합니다. PyTorch에서는 역전파(backpropagation)를 할 때 기울기가 누적(accumulate)되기 때문에, 매번 학습할 때마다 기울기를 초기화해주어야 합니다. 그렇지 않으면 이전 학습의 기울기가 계속 더해지면서 잘못된 업데이트가 발생할 수 있습니다.</p>
<ol start="2">
<li><code>loss.backward()</code>:</li>
</ol>
<p>이 함수는 <strong>역전파(backpropagation)를 통해 손실 함수(loss)의 기울기를 계산</strong>합니다. 이때 각 파라미터(가중치)에 대한 기울기가 계산되고, 해당 값이 각 파라미터의 <code>.grad</code> 속성에 저장됩니다. 이 과정은 체인 룰(chain rule)을 사용하여 계산됩니다.</p>
<ol start="3">
<li><code>optimizer.step()</code>:</li>
</ol>
<p>이 함수는 <strong>optimizer가 각 파라미터의 기울기(gradient)를 사용하여 가중치를 업데이트</strong>하는 역할을 합니다. <code>optimizer</code>는 SGD, Adam 등 다양한 최적화 알고리즘을 기반으로 가중치를 업데이트하며, 이 단계에서 모델이 더 나은 방향으로 학습될 수 있도록 파라미터가 조정됩니다.</p>
<p>즉, 이 세 줄은 <strong>기울기 초기화, 역전파로 기울기 계산, 기울기를 사용한 가중치 업데이트</strong>의 순서로 모델을 학습시키는 핵심 부분입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL] LEAD/LAG]]></title>
            <link>https://velog.io/@pompom_33/SQL-LEADLAG</link>
            <guid>https://velog.io/@pompom_33/SQL-LEADLAG</guid>
            <pubDate>Sun, 22 Sep 2024 12:18:19 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫-lead--lag">👩‍🏫 LEAD / LAG</h3>
<ul>
<li><code>LEAD</code>
현재 행 기준 <strong>이전 행</strong> 값을 가져오는 함수</li>
<li><code>LAG</code>
현재 행 기준 <strong>이후 행</strong> 값을 가져오는 함수</li>
</ul>
<h3 id="👩🏫-lag-기본-문법">👩‍🏫 LAG 기본 문법</h3>
<pre><code class="language-mysql">LAG(&lt;expression&gt;[,offset[,default_value]]) 
OVER ([PARTITION BY &lt;expr&gt;] ORDER BY &lt;expr&gt;)</code></pre>
<pre><code class="language-mysql">LAG(&lt;expression&gt;) OVER (ORDER BY &lt;expr&gt;)</code></pre>
<ul>
<li>[...] 부분은 생략 가능하다. 두 번째 코드는 필수 부분만 담은 것</li>
<li><code>offset</code> : 지정시 N번째 값을 가져온다.</li>
<li><code>default_value</code> : N번째 값이 없을 경우 default_value값을 가져온다.</li>
<li><code>PARTITION BY</code> : 지정시 GROUP 별로 행 값을 가져온다.</li>
</ul>
<h3 id="👩🏫-lag-예제">👩‍🏫 LAG 예제</h3>
<p>LEETCODE SQL 문제 <a href="https://leetcode.com/problems/rising-temperature/description/?envType=study-plan-v2&amp;envId=top-sql-50">197. Rising Temperature</a></p>
<pre><code class="language-mysql">SELECT W1.id
FROM Weather W1
JOIN Weather W2
  ON W1.recordDate = DATE_ADD(W2.recordDate, INTERVAL 1 DAY)
WHERE W1.temperature &gt; W2.temperature;</code></pre>
<h3 id="👩🏫-lead는">👩‍🏫 LEAD는...?</h3>
<p>LAG와 사용법이 동일하다.</p>
<h4 id="참고한-벨로그">참고한 벨로그</h4>
<p><a href="https://velog.io/@minwest/MySQL-LEAD-LAG-%ED%95%A8%EC%88%98">[MySQL] LEAD, LAG 함수</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] set함수]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-set%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-set%ED%95%A8%EC%88%98</guid>
            <pubDate>Fri, 13 Sep 2024 06:00:08 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫-문제">👩‍🏫 문제</h3>
<p><a href="https://leetcode.com/problems/first-letter-to-appear-twice/description/">2351. First Letter to Appear Twice</a>
주어지는 문자열에서 <strong>2회 이상 등장하는 문자</strong>를 return하면 된다.
두 개 이상의 정답이 있는 경우 <strong>가장 먼저 반복되는 문자</strong>를 return.</p>
<h3 id="👩🏫-첫-번째-풀이list-활용">👩‍🏫 첫 번째 풀이(list 활용)</h3>
<pre><code class="language-python">tmp = []
for c in s:
    if c in tmp:
        return c
    tmp.append(c)</code></pre>
<ul>
<li>c를 순차적으로 list에 append하며 <code>if c in tmp:</code>로 tmp에 포함되었는지 확인하는 간단한 구조
<img src="https://velog.velcdn.com/images/pompom_33/post/a4477706-edf1-4ba6-9780-7fe923d4921c/image.png" alt=""></li>
</ul>
<h3 id="👩🏫-두-번째-풀이set-활용">👩‍🏫 두 번째 풀이(set 활용)</h3>
<pre><code class="language-python">visited = set()
for c in s:
    if c in visited:
        return c
    visited.add(c)</code></pre>
<ul>
<li>list 대신 <code>set</code>을 활용했다.</li>
<li>그 이유는 <strong>list</strong>는 <code>if c in visited:</code> 단계에서 모든 문자열을 순회하면서 c가 있는지 확인하는데, <strong>set</strong>은 딕셔너리처럼 <strong>필요한 부분만 콕 집어서 확인한다</strong> -&gt; 메모리 효율성이 올라감.</li>
<li>set은 append 대신 <code>add</code>를 이용한다</li>
<li>tmp 보다 <code>visited</code>라는 변수명이 더 적합하다.
<img src="https://velog.velcdn.com/images/pompom_33/post/eee1d547-4559-403c-bad0-dec517bb7c8d/image.png" alt=""></li>
</ul>
<h3 id="💡-set-활용하는-방법들-정리">💡 set 활용하는 방법들 정리</h3>
<ol>
<li><code>{a, b, c}</code> 
이렇게 {}brackets 안에 원소 넣으면 set 객체 형성됨. 빈 dictionary를 생성할 때와 헷갈리지 말자.</li>
<li><code>set(&#39;객체&#39;)</code>
안에 넣은 객체를 set으로 바꿔준다.<pre><code class="language-python">nums = [1, 2, 3]
A = set(nums)
</code></pre>
</li>
</ol>
<p>print(A, type(A))
=&gt; {1, 2, 3} &lt;class &#39;set&#39;&gt;
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] ⭐반복문 제어: continue, break, pass]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%A0%9C%EC%96%B4-continue-break-pass</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%A0%9C%EC%96%B4-continue-break-pass</guid>
            <pubDate>Fri, 13 Sep 2024 04:04:11 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫-continue">👩‍🏫 continue</h3>
<pre><code class="language-python">nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for num in nums:
    if num == 5:
        continue
    print(num)

...
1, 2, 3, 4, 6, 7, 8, 9, 10</code></pre>
<ul>
<li>결과에서 &#39;5&#39;만 없는 것을 확인 가능</li>
<li><code>continue</code> : 조건을 만족시키는 경우에만 아래의 명령문을 실행시키지 말고 <strong>나머지 loop을 진행하라</strong></li>
<li>즉, 5 이후의 <strong>6, 7, 8, 9, 10에 대해서는 loop 진행</strong></li>
</ul>
<h3 id="👩🏫-break">👩‍🏫 break</h3>
<pre><code class="language-python">nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for num in nums:
    if num == 5:
        break
    print(num)

...
1, 2, 3, 4</code></pre>
<ul>
<li><code>break</code> : if조건을 만나면 거기서 loop을 멈춰버림. 이후의 반복문은 실행되지 않고 종료</li>
</ul>
<h3 id="👩🏫-pass">👩‍🏫 pass</h3>
<pre><code class="language-python">nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for num in nums:
    if num == 5:
        pass
    else:
        i = i * 2
    print(num)

...
2, 4, 6, 8, 5, 12, 14, 16, 18, 20</code></pre>
<ul>
<li><code>pass</code> : if-else 부분을 실행시키지 않고 <strong>그 외의 반복문 명령어를 실행시킴</strong></li>
</ul>
<h3 id="💡-continue-vs-pass">💡 continue vs. pass</h3>
<ul>
<li>continue는 반복문 내의 모든 명령어를 무시하는데,</li>
<li>pass는 if-else 부분만 무시하고 나머지는 실행!</li>
</ul>
<p>라고 이해했습니다......</p>
<p>내용참고 <a href="https://itgilajavy.tistory.com/25">https://itgilajavy.tistory.com/25</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[파이썬] sort vs. sorted]]></title>
            <link>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-sort%EC%99%80-sorted</link>
            <guid>https://velog.io/@pompom_33/%ED%8C%8C%EC%9D%B4%EC%8D%AC-sort%EC%99%80-sorted</guid>
            <pubDate>Thu, 12 Sep 2024 13:37:58 GMT</pubDate>
            <description><![CDATA[<h3 id="👩🏫-sort와-sorted의-차이점">👩‍🏫 sort와 sorted의 차이점</h3>
<ul>
<li><strong>sort</strong> :  원본 리스트를 수정한다.</li>
<li><strong>sorted</strong> :  원본 리스트는 유지하고, 정렬된 리스트를 새롭게 반환한다.</li>
</ul>
<h3 id="👩🏫-sort-예제">👩‍🏫 sort 예제</h3>
<pre><code class="language-python">list = [9, 3, 6]
sort_list = list.sort()

print(list)
=&gt; [3, 6, 9]

print(sort_list)
=&gt; none</code></pre>
<ul>
<li>원본 list 값이 수정되고, 새로운 객체가 생성되지 않습니다.</li>
</ul>
<h3 id="👩🏫-sorted-예제">👩‍🏫 sorted 예제</h3>
<p>sorted_list = sorted(list)</p>
<pre><code class="language-python">list = [9, 3, 6]
sorted_list = sorted(list)

print(list)
=&gt; [9, 3, 6]

print(sorted_list)
=&gt; [3, 6, 9]</code></pre>
<ul>
<li>원본 list는 그대로고 이를 sorted한 새로운 list가 생성됩니다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>