<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공대생의 비망록</title>
    <link>https://youngdeveloper.tistory.com/</link>
    <description>Never Stop Learning!</description>
    <language>ko</language>
    <pubDate>Mon, 15 Jun 2026 03:29:59 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>myungsup1250</managingEditor>
    <item>
      <title>[Linux] 내 개인 서버 (가상 머신 등)의 일반 사용자에 sudo 작업을 비밀번호 없이 수행하도록 수정하기</title>
      <link>https://youngdeveloper.tistory.com/entry/Linux-%EB%82%B4-%EA%B0%9C%EC%9D%B8-%EC%84%9C%EB%B2%84-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0-%EB%93%B1%EC%9D%98-%EC%9D%BC%EB%B0%98-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90-sudo-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon EC2와 같은 서비스의 가상 머신을 사용하다 보면 sudo가 필요한 작업을 수행해도 ec2-user와 같은 Linux 사용자에게 sudo 비밀번호 입력을 요구하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 애초에 인스턴스 생성 시에 비밀번호를 입력하지 않았기도 하고, 보안적인 관점에서도 SSH Key pair (키페어)를 사용하는 것이 보다 안전하기 때문에 ec2-user와 같은 Linux 사용자를 sudo 권한 사용 시에 비밀번호가 필요 없도록 사용자를 sudo 그룹에 추가해둔다.&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;Linux 사용자를 sudo 그룹에 추가하는 방법은 다양하지만, 아래에서 내가 활용했던 간단한 방법을 공유하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 설정 시에는 sudo 비밀번호가 필요하므로 root 비밀번호를 미리 확인해두는 것은 필수인 점 유의 바란다.&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;아래와 같은 명령어를 입력, 실행한다 (아직 Linux 사용자에 sudo 권한을 부여하지 않았으므로 이 때 비밀번호가 필요하다.):&lt;/p&gt;
&lt;pre id=&quot;code_1771162469453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo visudo&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;기존 sudo 권한을 부여받은 다양한 사용자 (root)의 정보가 확인되는데, 적절한 위치에 아래와 같은 내용을 입력하면 된다:&lt;/p&gt;
&lt;pre id=&quot;code_1771162462294&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[USERID] ALL=NOPASSWD: ALL&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;예를 들어, ec2-user Linux 사용자에 대하여 sudo 권한을 부여하고 싶다면 아래와 같이 [USERID] 부분을 'ec2-user'으로 대체하면 된다:&lt;/p&gt;
&lt;pre id=&quot;code_1771162650023&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ec2-user ALL=NOPASSWD: ALL&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;올바르게 설정되었다면 이후 쉘 세션을 종료하고 다시 로그인하여 sudo 권한을 확인해보면 된다.&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;</description>
      <category>Computer Science/Linux</category>
      <category>/etc/sudoers</category>
      <category>Linux</category>
      <category>root 권한</category>
      <category>sudo</category>
      <category>sudo 권한</category>
      <category>sudoer</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/208</guid>
      <comments>https://youngdeveloper.tistory.com/entry/Linux-%EB%82%B4-%EA%B0%9C%EC%9D%B8-%EC%84%9C%EB%B2%84-%EA%B0%80%EC%83%81-%EB%A8%B8%EC%8B%A0-%EB%93%B1%EC%9D%98-%EC%9D%BC%EB%B0%98-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%97%90-sudo-%EA%B6%8C%ED%95%9C-%EB%B6%80%EC%97%AC%ED%95%98%EA%B8%B0#entry208comment</comments>
      <pubDate>Sun, 15 Feb 2026 22:38:37 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Two Sum II - Input Array Is Sorted 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LetCodeEasy-Two-Sum-II-Input-Array-Is-Sorted-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&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;풀이:&lt;/p&gt;
&lt;pre id=&quot;code_1770715104719&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def twoSum(self, numbers: List[int], target: int) -&amp;gt; List[int]:
        left = 0; right = len(numbers) - 1
        while left &amp;lt; right:
            temp = numbers[left] + numbers[right]
            if temp == target:
                return [left + 1, right + 1]
            elif temp &amp;lt; target:
                left += 1
            else:
                right -= 1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>Two sum II</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/207</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LetCodeEasy-Two-Sum-II-Input-Array-Is-Sorted-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry207comment</comments>
      <pubDate>Tue, 10 Feb 2026 18:19:06 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Valid Parentheses 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Parentheses-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자료구조를 공부하게 되면 Stack의 특성을 활용하도록 꼭 한번은 경험하게 되는 문제를 LeetCode 플랫폼에서도 풀게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 C나 C++, Java로 구현했었는데 이번에는 Python으로 여러 방법을 구현해보았다.&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;if-else 구문을 떡칠해서 문제를 해결하는 가장 기본적인 (멍청한) 방식:&lt;/p&gt;
&lt;pre id=&quot;code_1770703774487&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isValid(self, s: str) -&amp;gt; bool:
        stack = list()
        for ch in s:
            if ch == '(' or ch == '{' or ch == '[':
                stack.append(ch)
            elif ch == ')':
                if len(stack) &amp;gt; 0 and stack[-1] == '(':
                    stack.pop()
                else:
                    return False
            elif ch == '}':
                if len(stack) &amp;gt; 0 and stack[-1] == '{':
                    stack.pop()
                else:
                    return False
            elif ch == ']':
                if len(stack) &amp;gt; 0 and stack[-1] == '[':
                    stack.pop()
                else:
                    return False
            # else: # ch is not '(', ')', '{', '}', '[', ']'
            #     continue
        if len(stack) == 0:
            return True
        return False&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;Dictionary 자료구조를 활용해서 괄호 유형 별로 쌍을 이루어 보다 간결한 로직으로 문제를 해결하는 방법:&lt;/p&gt;
&lt;pre id=&quot;code_1770703851083&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isValid(self, s: str) -&amp;gt; bool:
        mydict = {')':'(', '}':'{', ']':'['}
        stack = list()
        for ch in s:
            if ch in mydict.values(): # '(', '{', '['
                stack.append(ch)
            elif ch in mydict.keys(): # ')', '}', ']'
                if len(stack) &amp;gt; 0 and stack[-1] == mydict[ch]:
                    stack.pop()
                else:
                    return False

        if len(stack) == 0:
            return True
        return False&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;Dictionary 자료구조 활용 방식을 보다 개선하고 코드를 보다 Pythonic하게 수정한 방법:&lt;/p&gt;
&lt;pre id=&quot;code_1770704630926&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isValid(self, s: str) -&amp;gt; bool:
        mydict = {'(':')', '{':'}', '[':']'}
        stack = list()
        for ch in s:
            if ch in mydict.keys(): # '(', '{', '['
                stack.append(mydict[ch])
            elif ch in mydict.values(): # ')', '}', ']'
                if len(stack) &amp;gt; 0 and stack[-1] == ch:
                    stack.pop()
                else:
                    return False

        return len(stack) == 0&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>ProblemSoving</category>
      <category>Python</category>
      <category>valid parentheses</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/206</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Parentheses-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry206comment</comments>
      <pubDate>Tue, 10 Feb 2026 15:24:52 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Longest Common Prefix 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Longest-Common-Prefix-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 문자열 배열 strs에 대하여, 가장 긴 공통문자열을 찾는 문제.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 &quot;flower&quot;, &quot;flow&quot;, &quot;flight&quot; 문자열들이 주어졌다면 &quot;fl&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;문제 풀이:&lt;/p&gt;
&lt;pre id=&quot;code_1770627968298&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def longestCommonPrefix(self, strs: List[str]) -&amp;gt; str:
        length = 201 # Since the max length for this problem is 200.
        # length = min(len(w) for w in strs) # Pythonic way
        for s in strs: # set var length as the shortest string's length.
            if length &amp;gt; len(s):
                length = len(s)

        common = &quot;&quot;
        for i in range(length):
            tmp = strs[0][i]; add = True
            for s in strs:
                if tmp != s[i]:
                    return common
            common += tmp
        return common&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>Longest Common Prefix</category>
      <category>Problem Solving</category>
      <category>Python</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/205</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Longest-Common-Prefix-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry205comment</comments>
      <pubDate>Mon, 9 Feb 2026 18:06:50 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Valid Palindrome 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Palindrome-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 가공 후 회문을 판단하는 방법:&lt;/p&gt;
&lt;pre id=&quot;code_1770601491351&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isPalindrome(self, s: str) -&amp;gt; bool:
        lower = s.lower()
        trimmed = str()
        for ch in lower:
            if ch.islower() or ch.isdigit():
                trimmed += ch
        for i in range(len(trimmed) // 2):
            if trimmed[i] != trimmed[-i - 1]:
                return False
        return True&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;pre id=&quot;code_1770601527145&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isPalindrome(self, s: str) -&amp;gt; bool:
        left = 0
        right = len(s) - 1  # left, right = 0, len(s) - 1
        while left &amp;lt; right:
            while left &amp;lt; right and not s[left].isalnum():
                left += 1
            while left &amp;lt; right and not s[right].isalnum():
                right -= 1
            if s[left].lower() != s[right].lower():
                return False
            left += 1
            right -= 1
        return True&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>valid palindrome</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/204</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Palindrome-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry204comment</comments>
      <pubDate>Mon, 9 Feb 2026 10:46:12 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] First Unique Character in a String 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-First-Unique-Character-in-a-String-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 문자열 s에서 첫 번째의 고유 문자 위치를 찾아 반환하는 문제.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열을 1회차로 순회하며 dictionary 자료구조에 모든 문자의 빈도를 저장하도록 하고, 2회차로 순회할 때 dictionary에 빈도가 1이라면 그 위치를 반환하도록 하여 문제를 해결하였다.&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;문제 풀이 (시간복잡도는 O(n)이다.):&lt;/p&gt;
&lt;pre id=&quot;code_1770566745921&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def firstUniqChar(self, s: str) -&amp;gt; int:
        seen = {}
        for i in range(len(s)):
            if s[i] not in seen:
                seen[s[i]] = 1
            else:
                seen[s[i]] += 1

        for i in range(len(s)):
            if seen[s[i]] == 1:
                return i
        
        return -1&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>First Unique Character in a String</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/203</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-First-Unique-Character-in-a-String-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry203comment</comments>
      <pubDate>Mon, 9 Feb 2026 01:07:23 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Valid Anagram 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Anagram-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 두 문자열 s, t가 애너그램 (Anagram)인 지 판단하는 문제.&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;문제에서는 문자열 안에는 소문자만 포함된다고 하였으나 확장성을 고려하여 딕셔너리 (dictionary) 자료구조를 활용하여 푼 버전과 소문자 26개 (혹은 존재하는 소문자 수)만큼의 길이를 가지는 배열 (list)을 활용하여 푼 버전을 각각 구현해보았다:&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;pre id=&quot;code_1770544090089&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isAnagram(self, s: str, t: str) -&amp;gt; bool:
        if len(s) != len(t):
            return False

        dicts = {}; dictt = {}
        for ch in s:
            if ch not in dicts:
                dicts[ch] = 1
            else:
                dicts[ch] += 1

        for ch in t:
            if ch not in dictt:
                dictt[ch] = 1
            else:
                dictt[ch] += 1

        for key in dicts.keys():
            if key not in dictt or dicts[key] != dictt[key]:
                return False

        return True&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;pre id=&quot;code_1770544126320&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def isAnagram(self, s: str, t: str) -&amp;gt; bool:
        if len(s) != len(t):
            return False
        
        sets = set(s); sett = set(t)
        if len(sets - sett) != 0 or len(sett - sets) != 0:
            return False
        
        mydict = {}; i = 0
        for ch in sets:
            mydict[ch] = i
            i += 1  
        chars = [0 for _ in range(len(s))]
        for j in range(len(s)):
            sindex = mydict[s[j]]
            chars[sindex] += 1
            tindex = mydict[t[j]]
            chars[tindex] -= 1
        for num in chars:
            if num != 0:
                return False
        return True&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>Valid Anagram</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/202</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Valid-Anagram-%EB%AC%B8%EC%A0%9C-Python-%ED%92%80%EC%9D%B4#entry202comment</comments>
      <pubDate>Sun, 8 Feb 2026 18:49:28 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Count Monobit Integers 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Count-Monobit-Integers-Python-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;주어진 n에 대하여 0부터 n까지 &quot;0&quot; 혹은 &quot;1&quot;으로만 비트가 구성되어 있는 정수 (Monobit Integer)를 구하는 문제.&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;처음에는 모든 비트가 같아야 한다는 점에 착안, 0부터 n까지 모든 수를 비트 문자열로 만들어 XOR 비트 연산을 수행하여 문제를 해결하도록 구현하였으나 매우 비효율적이었고, 그 후로&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;초기 방법 (모든 수를 비트 문자열로 생성하여 XOR 연산):&lt;/p&gt;
&lt;pre id=&quot;code_1770540437257&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def countMonobit(self, n: int) -&amp;gt; int:
        if n == 0:
            return 1
        bitified = [&quot;0&quot;]
        for i in range(1, n + 1):
            m = i
            bit = &quot;&quot;
            while m &amp;gt; 0:
                if m % 2 == 1:
                    bit += &quot;1&quot;
                else:
                    bit += &quot;0&quot;
                m //= 2
            bitified.append(bit)

        cnt = 0
        for bit in bitified:
            comp1 = &quot;&quot;; comp2 = &quot;&quot;
            for i in range(len(bit)):
                comp1 += &quot;0&quot;
                comp2 += &quot;1&quot;
            if int(comp1) ^ int(bit) == 0 or int(comp2) ^ int(bit) == 0:
                cnt += 1
        return 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;첫 번째 개선 버전 (n의 비트 길이를 계산하여 그 길이만큼의 Monobit Integers의 경우의 수를 계산하여 답을 반환):&lt;/p&gt;
&lt;pre id=&quot;code_1770540530254&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def countMonobit(self, n: int) -&amp;gt; int:        
        if n == 0:
            return 1
        max_len = 0; tmp = n
        while tmp &amp;gt; 0:
            tmp //= 2
            max_len += 1
        
        bit = &quot;&quot;
        for i in range(max_len):
            bit += &quot;1&quot;
        
        if n &amp;lt; int(bit, 2):
            return max_len
        else:
            return max_len + 1&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;추가 개선 버전 (n의 비트 길이 계산을 python 함수로 해결하고 실제 비트 문자열을 만들지 않고도 해결하도록 개선):&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770540369642&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def countMonobit(self, n: int) -&amp;gt; int:
        if n == 0:
            return 1
        max_len = n.bit_length()
        
        if n &amp;lt; (1 &amp;lt;&amp;lt; max_len) - 1:
            return max_len
        else:
            return max_len + 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>Count Monobit Integers</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/201</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Count-Monobit-Integers-Python-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4#entry201comment</comments>
      <pubDate>Sun, 8 Feb 2026 17:51:52 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Single Number 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Single-Number-Python-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;set으로 만들어서 고유한 숫자만 남겨 sum을 2배로 하여 nums의 sum 값과 차감하여 숫자를 찾아내는 풀이:&lt;/p&gt;
&lt;pre id=&quot;code_1770532605722&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def singleNumber(self, nums: List[int]) -&amp;gt; int:
        mySum = sum(set(nums)) * 2
        diff = mySum - sum(nums)
        return diff&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;XOR 비트 연산으로 배열을 순회하여 숫자를 찾아내는 풀이: (연달아 XOR 비트 연산으로 풀 수 있는 문제를 만나 습득하게 되었습니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1770532677823&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def singleNumber(self, nums: List[int]) -&amp;gt; int:
        res = 0
        for num in nums:
            res ^= num
        return res&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>single number</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/200</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Single-Number-Python-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4#entry200comment</comments>
      <pubDate>Sun, 8 Feb 2026 15:38:47 +0900</pubDate>
    </item>
    <item>
      <title>[LeetCode][Easy] Missing Number 문제 Python 풀이</title>
      <link>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Missing-Number-Python-%ED%92%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 보자마자 Python에 익숙한 사람이라면 누구나 쉽게 풀 수 있는 문제라는 생각이 들었다.&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;for-loop을 통해 0부터 n까지 하나씩 확인하는 방법: (시간복잡도 O(n)이나 비효율적인 편)&lt;/p&gt;
&lt;pre id=&quot;code_1770481761672&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def missingNumber(self, nums: List[int]) -&amp;gt; int:
        for i in range(len(nums) + 1):
            if i not in nums:
                return i&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;set을 사용하며 쉽고 빠르게 문제를 해결하는 방법:&lt;/p&gt;
&lt;pre id=&quot;code_1770481730210&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution:
    def missingNumber(self, nums: List[int]) -&amp;gt; int:
        comp = set(range(len(nums) + 1))
        missing = comp - set(nums)
        return missing.pop()&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;그 외에도 본 문제를 해결하는 방법에는 가우스 공식 (n * n+1 / 2)을 활용하는 방법, XOR 비트연산을 활용하는 방법... 등이 있겠다.&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;</description>
      <category>Programming Language/Python</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>missing number</category>
      <category>ProblemSolving</category>
      <category>Python</category>
      <category>리트코드</category>
      <category>문제해결</category>
      <category>알고리즘</category>
      <category>코딩테스트</category>
      <category>파이썬</category>
      <author>myungsup1250</author>
      <guid isPermaLink="true">https://youngdeveloper.tistory.com/199</guid>
      <comments>https://youngdeveloper.tistory.com/entry/LeetCodeEasy-Missing-Number-Python-%ED%92%80%EC%9D%B4#entry199comment</comments>
      <pubDate>Sun, 8 Feb 2026 01:35:09 +0900</pubDate>
    </item>
  </channel>
</rss>