<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>lucy_1215.log</title>
        <link>https://velog.io/</link>
        <description>성실한 개발자를 꿈꾸는 개발 일지</description>
        <lastBuildDate>Fri, 30 Dec 2022 08:57:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>lucy_1215.log</title>
            <url>https://velog.velcdn.com/images/lucy_1215/profile/b2bd8755-f1f0-4994-bc2e-3649ea06f418/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. lucy_1215.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/lucy_1215" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[알고리즘 - 백트래킹(Backtracking)]]></title>
            <link>https://velog.io/@lucy_1215/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9Backtracking</link>
            <guid>https://velog.io/@lucy_1215/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%ED%8A%B8%EB%9E%98%ED%82%B9Backtracking</guid>
            <pubDate>Fri, 30 Dec 2022 08:57:45 GMT</pubDate>
            <description><![CDATA[<p><strong>DFS와 백트래킹</strong></p>
<blockquote>
<p><strong>깊이 우선 탐색(DFS)</strong></p>
</blockquote>
<ul>
<li>DFS는 가능한 모든 경로(후보)를 탐색한다.
=&gt;따라서, 불필요할 것 같은 경로를 사전에 차단하거나 하는 등의 행동이 없으므로 경우의 수를 줄이지 못한다.</li>
</ul>
<blockquote>
<p><strong>백트래킹(Backtracking)</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/3a7fcbd5-fe1b-4df2-930f-e525927000ac/image.png" alt=""></p>
</blockquote>
<ul>
<li><p>해를 찾아가는 도중, 지금의 경로가 해가 될 것 같지 않으면 그 경로를 더이상 가지 않고 되돌아 간다.</p>
</li>
<li><p>코딩에서는 반복문의 횟수를 줄일 수 있어 효율적이다.</p>
</li>
<li><p>불필요한 부분을 쳐내고 최대한 올바른 쪽으로 간다는 의미 =&gt; 가지치기
=&gt;<strong>가지치기를 얼마나 잘하느냐에 따라 효율성이 결정되게 된다.</strong></p>
<p><strong>정리</strong></p>
<ul>
<li>백트래킹은 모든 가능한 경우의 수 중에서 특정한 조건을 만족하는 경우만 살펴보는 것이다.</li>
<li>즉, 답이 될 만한지 판단하고 그렇지 않으면 그 부분까지 탐색하는 것을 하지않고 가지치기 하는 것</li>
<li>DFS등으로 모든 경우의 수를 탐색하는 과정에서, 조건문 등을 걸어 답이 절대로 될 수 없는 상황을 정의하고, 그러한 상황일 경우에는 탐색을 중지시킨 뒤 그 이전으로 돌아가서 다시 다른 경우를 탐색하게끔 구현할 수 있다.</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong>백트래킹 기법의 유망성 판단</strong>
 해가 될 가능성이 있다면 유망하다(promising)고 하며, 유망하지 않은 노드에 가지 않는 것을 가지치기(pruning)한다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[우테코] 프리코스 1주차 회고록]]></title>
            <link>https://velog.io/@lucy_1215/%EC%9A%B0%ED%85%8C%EC%BD%94-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-1%EC%A3%BC%EC%B0%A8-%ED%9A%8C%EA%B3%A0%EB%A1%9D</link>
            <guid>https://velog.io/@lucy_1215/%EC%9A%B0%ED%85%8C%EC%BD%94-%ED%94%84%EB%A6%AC%EC%BD%94%EC%8A%A4-1%EC%A3%BC%EC%B0%A8-%ED%9A%8C%EA%B3%A0%EB%A1%9D</guid>
            <pubDate>Fri, 09 Dec 2022 15:30:07 GMT</pubDate>
            <description><![CDATA[<h3 id="서론">서론</h3>
<p>지난 10월 26일 부터 11월 23일까지 4주동안 우아한 형제들에서 주최한 
&quot;<strong>우테코(우아한 테크코스)의 프리코스</strong>&quot;를 참여하게 되었다. </br>
여태까지 우테코의 프리코스는 코딩테스트를 합격한 사람들만 참여할 수 있도록 하였는데
이번 5기의 경우는 우테코를 지원한 모든 지원자들이 참여할 수 있어서
나를 성장시킬 수 있는 좋은 기회라 생각되었고,
국비 교육을 듣는 도중에도 한치의 망설임 없이 지원하게 되었다.</p>
<p>4주동안의 프리코스 과제들에 대해 회고를 해보고자 한다.</p>
<h3 id="1주차---온보딩">1주차 - 온보딩</h3>
<blockquote>
<p><a href="https://github.com/sugang258/java-onboarding">📕1주차 코드 보러가기</a></p>
</blockquote>
<p>수요일 3시에 미션이 올라오자마자 설레는 마음으로 확인하였다.
1주차 미션은 온보딩이었다. 문제는 총 7문제였고 문제의 난이도를 확인해보니 
1주차는 개발 환경 세팅과 익숙해지라고 난이도를 낮게 설정하신 것 같았다.</p>
<p>1주차에는 별다른 요구사항은 없었고, 기능을 해결하는 것에 초점을 둔 것 같았다.
문제를 하나하나씩 읽어가면서 어떻게 풀지 머릿속에서 정리를 하였고 
어떤 함수가 필요할 지 아래의 사진과 같이 각 문제마다 주석으로 적어 정리해놓았다.</p>
<img src="https://velog.velcdn.com/images/lucy_1215/post/00b6a51e-b6d0-4d4f-95aa-abe543686f49/image.png">

<p>문제를 풀면서 고민을 많이했던 문제는 <strong>2번</strong>과 <strong>7번</strong>이었다.
두 문제에 대해서 자세하게 얘기해보겠다.</p>
<h3 id="problem-2"><strong>[Problem 2]</strong></h3>
<blockquote>
<blockquote>
<p><strong>[Problem 2]</strong></p>
</blockquote>
</blockquote>
<h4 id="🚀-기능-요구-사항">🚀 기능 요구 사항</h4>
<p>암호문을 좋아하는 괴짜 개발자 브라운이 이번에는 중복 문자를 이용한 새로운 암호를 만들었다. 예를 들어 &quot;browoanoommnaon&quot;이라는 암호문은 다음과 같은 순서로 해독할 수 있다. </br></p>
<ol>
<li>&quot;browoanoommnaon&quot;</li>
<li>&quot;browoannaon&quot;</li>
<li>&quot;browoaaon&quot;</li>
<li>&quot;browoon&quot;</li>
<li>&quot;brown&quot; </br>
임의의 문자열 cryptogram이 매개변수로 주어질 때, 연속하는 중복 문자들을 삭제한 결과를 return 하도록 solution 메서드를 완성하라.</li>
</ol>
<p>처음 이 문제를 보고 &quot;스택을 쓰면 간단하게 풀리겠구나&quot;라는 생각을 했다.</p>
<pre><code>--1차 문제 해결 과정--
1. 문자를 처음부터 하나씩 꺼내서 스택이 비어있으면 문자를 스택에 넣고,
2. 스택의 맨 위 값을 꺼내서 문자와 같으면 스택에서 제거
3. 스택에 들어있는 값들을 출력</code></pre><p>이 과정을 통해 문제를 해결하였다.
모두 해결한 줄 알았지만 Slack을 보다가 내 방식이 틀렸다는 것을 알게 되었다.</p>
<p>문제를 대충 읽은 나머지 가장 중요한 문구을 놓친 것이다.
바로 <strong>&quot;연속하는 중복 문자들&quot;</strong> 이었다.</p>
<p>내가 풀은 방식은 연속하는 2개의 중복 문자들만 확인하고 제거하는 방법이었는데,
만약 중복하는 문자가 3개 이상이라면 내 코드로 해결되지 않는다는 것을 깨닫고
다시 코드를 뜯어고치기 시작했다.</p>
<p>결국 처음에는 스택을 이용하여 코드를 작성했지만 고친 코드에서는 List를 이용하였다.</p>
<pre><code>--최종 문제 해결 과정--
1. String 타입의 문자열을 하나씩 분리하여 List에 넣는다.
2. 이중 for문을 이용해 list의 앞문자와 뒤 문자들를 비교하여 같은 문자를 모두 제거한다.
3. 위의 과정을 반복한다.
4. 리스트의 문자들을 합쳐서 출력한다.</code></pre><p>위의 문제 해결 과정으로 문제를 해결하였지만 지금와서 코드를 다시 보니 
이중 for문 안에 이중 if문 안에 for문... 끔찍해보인다....
차차 시간날 때 코드를 수정해야겠다!!</p>
<h3 id="problem-7"><strong>[Problem 7]</strong></h3>
<blockquote>
<blockquote>
<p><strong>[Problem 7]</strong></p>
</blockquote>
</blockquote>
<h4 id="🚀-기능-요구-사항-1">🚀 기능 요구 사항</h4>
<p>레벨 2의 팀 프로젝트 미션으로 SNS(Social Networking Service)를 만들고자 하는 팀이 있다. 팀에 속한 크루 중 평소 알고리즘에 관심이 많은 미스터코는 친구 추천 알고리즘을 구현하고자 아래와 같은 규칙을 세웠다. </br></p>
<ul>
<li>사용자와 함께 아는 친구의 수 = 10점</li>
<li>사용자의 타임 라인에 방문한 횟수 = 1점 </br>
사용자 아이디 user와 친구 관계 정보 friends, 사용자 타임 라인 방문 기록 visitors가 매개변수로 주어질 때, 미스터코의 친구 추천 규칙에 따라 점수가 가장 높은 순으로 정렬하여 최대 5명을 return 하도록 solution 메서드를 완성하라. 이때 추천 점수가 0점인 경우 추천하지 않으며, 추천 점수가 같은 경우는 이름순으로 정렬한다. </br><h4 id="제한사항">제한사항</h4>
</li>
<li>user는 길이가 1 이상 30 이하인 문자열이다.</li>
<li>friends는 길이가 1 이상 10,000 이하인 리스트/배열이다.</li>
<li>friends의 각 원소는 길이가 2인 리스트/배열로 [아이디 A, 아이디 B] 순으로 들어있다.<ul>
<li>A와 B는 친구라는 의미이다.</li>
<li>아이디는 길이가 1 이상 30 이하인 문자열이다.</li>
</ul>
</li>
<li>visitors는 길이가 0 이상 10,000 이하인 리스트/배열이다.</li>
<li>사용자 아이디는 알파벳 소문자로만 이루어져 있다.</li>
<li>동일한 친구 관계가 중복해서 주어지지 않는다.</li>
<li>추천할 친구가 없는 경우는 주어지지 않는다. </br><h4 id="실행-결과-예시">실행 결과 예시</h4>
<img src="https://velog.velcdn.com/images/lucy_1215/post/00f10f0b-5efc-416c-8064-dfeedf100ebc/image.png">


</li>
</ul>
<p>역시 마지막 문제인 만큼 문제를 이해하는데 오래 걸렸다...</p>
<blockquote>
<blockquote>
<blockquote>
<p><strong>이 문제에서 고려해야 할 점</strong></p>
</blockquote>
</blockquote>
</blockquote>
<ol>
<li>friends 배열에서 user가 0번 index, 1번 index 모두 있을 수 있다는 것</li>
<li>이미 친구인 사람은 제외 시켜야한다는 것</li>
<li>방문자에서 한 사람이 여러번 방문할 수 있다는 것</li>
</ol>
<p>위의 부분들을 고려하여 문제를 해결하였다.</p>
<pre><code>--문제 해결 과정--
1. user의 친구 추출하여 List에 저장
2. user와 함께 아는 친구 추출하여 List에 저장
3. 방문자 추출하여 Map에 저장
4. 점수 List 내림차순 정렬
5. Map의 key값 추출하여 List에 저장
6. 이미 친구인 사람 추출
7. 5번 List에서 이미 친구인 사람 삭제하여 출력</code></pre><p>하나의 메서드 안에서 코드가 길어지는 것이 싫어 쪼개고 쪼갰던 것 같다.
살짝 돌아가는 느낌이 있고, 2번과 마찬가지로 들여쓰기가 많다...
7번 문제도 마찬가지로 시간을 내서 수정을 해야할 것 같다.</p>
<p>그 중 고쳐야 할 첫번째는
*<em>이미 친구인 사람을 List에 담아두지 않고 바로 삭제할 수 있도록 *</em> 하면 좋을 것 같다.</p>
</br>

<h3 id="결론">결론</h3>
<p>1주차 프리코스 과제들을 모두 구현에 성공하여서 뿌듯하긴 하지만
주로 기능 중심으로 구현을 하다보니 클린하지 못한 코드가 나왔다.
그때의 나를 반성하며, 클린한 코드로 만들기 위해 코드를 수정하러 가야겠다... </br>
다음 포스팅은 2주차 프리코스 회고록으로 돌아오겠다.
(1주차 피드백 내용은 2주차 서론에 적도록 하겠다.)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 피보나치 수]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98-m27irae0</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98-m27irae0</guid>
            <pubDate>Fri, 11 Nov 2022 02:47:35 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/11</strong>
<strong>피보나치 수</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/ece8c23e-127b-47d4-b0a4-6259ef693c31/image.png" alt="problem"></p>
<p><strong>&lt;입출력 값&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/d55063af-13dc-4156-bb67-13b6e8123e78/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
자연수 n이 주어졌을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴해라.</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong>
피보나치 수열은 알고리즘 문제에서 많이 봐서 그런지 친근했다.
피보나치 수열을 배열에 넣어주고
for문을 돌려서 차례대로 값을 구해준다.
n번째 값을 구해주면 끝!<br>
처음에는 a[n] % 1234567 만 해줬는데 몇개는 통과하고 몇개는 실패가 떴다.
이유를 찾다가 피보나치 수열 계산을 해줄 때 a[i]와 a[i+1]도 1234567로 나눈 값으로 
바꿔줬더니 성공하였다.<br>
**
78번째 이후부터는 표현은 되지만 &#39;안전한 정수 계산&#39;을 보장하지 못한다
따라서 (A+B)%C = ((A%C)+(B%C))%C 라는 수의 속성을 통해
F(n)%1234567 = ((F(n-1)%1234567)+(F(n-2)%1234567))%1234567 을 해줘야한다는 글을 참고하여 깨닫게 되었다.</p>
</blockquote>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/7a7aef29-4e00-4606-89e6-0f4b36668b58/image.png" alt="mycode"></p>
<p>```
class Solution {
    public int solution(int n) {
        int answer = 0;</p>
<pre><code>    int[] a = new int[n+1];
    a[0] = 0;
    a[1] = 1;
    for(int i=0;i&lt;=n-2;i++){
        a[i+2] = (a[i]% 1234567) + (a[i+1] % 1234567);
    }
    answer = a[n] % 1234567;
    return answer;
}</code></pre><p>}```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 숫자의 표현]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84</guid>
            <pubDate>Fri, 11 Nov 2022 02:29:23 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/11</strong>
<strong>숫자의 표현</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/97c5e880-c189-4743-b15d-0a8db913a24c/image.png" alt=""></p>
<p><strong>&lt;입출력 값&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/82ffc50b-3f79-445b-9442-3d6c81837642/image.png" alt=""></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
자연수 n을 <strong>연속하는</strong> 자연수들의 합으로 표현할 수 있는 개수를 구해라.
+자기 자신</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong>
n은 1을 감소시킨다. (자기 자신 말고 그 전 값으로 계산하기 위함)
n이 0보다 클 동안 cnt를 1씩 증가시키고
n은 n - cnt가 된다.
만약에 n % cnt == 0 이면 answer의 값을 증가시킨다.</p>
</blockquote>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/2f0306da-5ccf-4665-a8ef-08e5fc2a76bf/image.png" alt=""></p>
<p><code>class Solution {
    public int solution(int n) {
        int answer = 0;
        int cnt = 1; // 수열의 크기
        n--;
        while (n &gt; 0) {
            cnt++;
            n = n - cnt;
            if (n % cnt == 0) {
                answer++;
            }
        }
        return answer+1;
    }
}</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 로또의 최고 순위와 최저 순위]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EB%A1%9C%EB%98%90%EC%9D%98-%EC%B5%9C%EA%B3%A0-%EC%88%9C%EC%9C%84%EC%99%80-%EC%B5%9C%EC%A0%80-%EC%88%9C%EC%9C%84</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EB%A1%9C%EB%98%90%EC%9D%98-%EC%B5%9C%EA%B3%A0-%EC%88%9C%EC%9C%84%EC%99%80-%EC%B5%9C%EC%A0%80-%EC%88%9C%EC%9C%84</guid>
            <pubDate>Fri, 11 Nov 2022 02:12:37 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/11</strong>
<strong>로또의 최고 순위와 최저 순위</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/0e87baea-2ab0-4a08-a58a-9e203fe26811/image.png" alt="problems">
<img src="https://velog.velcdn.com/images/lucy_1215/post/8daebd93-dfd9-483c-b387-33c57173f9c5/image.png" alt="problems"></p>
<p><strong>&lt;입출력 값&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/71939f85-6c92-4e80-bd29-b596d74e97dc/image.png" alt=""></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
-로또 순위
    -6개 일치 : 1등
    -5개 일치 : 2등
    -4개 일치 : 3등
    -3개 일치 : 4등
    -2개 일치 : 5등
    -그 외   : 6등<br>
-로또 번호가 0 인 것은 번호를 알 수 없다는 뜻<br>
<strong>해당 로또의 최대 등수와 최저 등수를 도출하라.</strong></p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong></p>
</blockquote>
<ol>
<li>먼저 해당 로또의 0의 갯수를 구한다.
=&gt; 0의 개수에 따라 최대, 최저를 구할 수 있다.</li>
<li>해당 로또와 당첨 복권의 일치하는 숫자의 개수을 구한다.
0의 개수 -&gt; zeroCount / 일치하는 숫자의 개수 -&gt; count<br>
최대 일치하는 숫자의 개수(max) =&gt; 일치하는 숫자의 개수 + 0의 개수 (count + zeroCount)
최소 일치하는 숫자의 개수(count) =&gt; 일치하는 숫자의 개수 (count)<br>
단, max와 count가 0일 경우에는 1로 바꿔준다.<br></li>
</ol>
<p><strong>최종 등수</strong>
최대 등수 : 7 - max
최저 등수 : 7 - count</p>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/e0c4008c-d89f-4eb0-a02a-87e10d462e9c/image.png" alt=""></p>
<pre><code>class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {

        int zeroCount =0;
        int count =0;
        int max=0;

        for(int lotto : lottos){
            if(lotto == 0) {
                zeroCount++;
            }
            for(int win_num : win_nums){
                if(lotto == win_num){
                    count++;
                }
            }
        }

        max = zeroCount + count;
        if(max == 0){
            max =1;
        }
        if(count == 0){
            count =1;
        }

        int answer[] = {7-max, 7-count};

        return answer;
    }
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 올바른 괄호]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%98%AC%EB%B0%94%EB%A5%B8-%EA%B4%84%ED%98%B8</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%98%AC%EB%B0%94%EB%A5%B8-%EA%B4%84%ED%98%B8</guid>
            <pubDate>Thu, 10 Nov 2022 11:34:21 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/9</strong>
<strong>올바른 괄호</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/eb018321-b8b6-4c23-9296-205f97ac8e0f/image.png" alt="input"></p>
<p><strong>&lt;입출력 값&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/af0581ef-9f15-4329-9178-57d543836360/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
-괄호가 알맞게 짝 지어졌는지 유무를 리턴한다.</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong></p>
</blockquote>
<ol>
<li>Stack을 이용하여 문제를 해결하려고 하였다.</li>
<li>for문을 이용하여 만약 &quot;)&quot; 일 때, 스택의 맨 위의 값이 &quot;)&quot;이고 스택이 비어있지 않는다면 스택의 맨 위의 값을 pop 시킨다.</li>
<li>만약 &quot;)&quot; 이라면, 스택에 push 한다.
까지만 하고 코드를 돌렸을 때, 에러가 났다.
그 이유는 </li>
<li>s의 첫번째 괄호가 &quot;)&quot; 인 경우</li>
<li>for문이 끝났을 때 stack이 비어있지 않는다는 경우
였다.<br>
if 문을 이용해 위의 2가지의 경우를 구현해주었다.
다행히 잘 실행되었고 통과하였다.</li>
</ol>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/0474331a-1691-408c-a71d-7876ad58d960/image.png" alt="mycode"></p>
<pre><code>import java.util.*;
class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack&lt;Character&gt; stack = new Stack&lt;&gt;();
        if(s.charAt(0) ==&#39;)&#39;){
                return false;
            }
        for(int i=0;i&lt;s.length();i++){
            if(s.charAt(i) == &#39;)&#39;){
                if(!stack.isEmpty() &amp;&amp; stack.peek() == &#39;(&#39;){
                    stack.pop();
                }else{
                    return false;
                }
            }else{
                stack.push(s.charAt(i));
            }
        }
        if(!stack.empty()){
            return false;
        }
        return answer;
    }
}</code></pre><br>

<p>코드를 짤 때 <strong>예외</strong>인 경우를 잘 파악하고 해결해야겠다!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 최솟값 만들기]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%B5%9C%EC%86%9F%EA%B0%92-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%B5%9C%EC%86%9F%EA%B0%92-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Wed, 09 Nov 2022 03:08:03 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/9</strong>
<strong>최솟값 만들기</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/d9bff2d0-ece6-4303-b325-b4d6920ee1c0/image.png" alt="problem"></p>
<p><strong>&lt;입출력 값&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/039cf60f-4aee-487b-bea9-ee5ba89764d0/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
-A, B의 배열 값들 중 하나씩을 골라 곱해서 각각을 더한 값 중 가장 최솟값을 리턴한다.</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong></p>
</blockquote>
<ol>
<li>A 배열과 B 배열을 오름차순으로 정렬한다.</li>
<li>for문을 이용하여 A 배열의 값 중 하나, B 배열의 값 중 하나를 뽑는다.</li>
<li>최솟값을 구하기 위한 방법으로는 A 배열의 가장 작은 값과 B 배열의 가장 큰 값을 더한다.
<img src="https://velog.velcdn.com/images/lucy_1215/post/76269b7f-e683-4d3b-9186-b6fb101086d3/image.png" alt=""></li>
</ol>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/e8a4efcc-d536-4188-aad5-0f2b870992ff/image.png" alt=""></p>
<pre><code>import java.util.*;
class Solution
{
    public int solution(int []A, int []B){
        int answer = 0;

        Arrays.sort(A);
        Arrays.sort(B);

        for(int i=0;i&lt;A.length;i++){
           answer += A[i] * B[B.length-i-1];
        }
        return answer;
    }
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 최댓값과 최솟값]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%B5%9C%EB%8C%93%EA%B0%92%EA%B3%BC-%EC%B5%9C%EC%86%9F%EA%B0%92</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%B5%9C%EB%8C%93%EA%B0%92%EA%B3%BC-%EC%B5%9C%EC%86%9F%EA%B0%92</guid>
            <pubDate>Tue, 08 Nov 2022 10:48:51 GMT</pubDate>
            <description><![CDATA[<p><strong>📆11/8</strong>
<strong>최댓값과 최솟값</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/0a246024-559d-477f-be0c-6b4a7c4839e3/image.png" alt="problem"></p>
<p><strong>&lt;입출력 예&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/e12ccb3c-c62b-410e-8c04-f21e990e81f8/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
-공백으로 구분된 숫자들 중 최댓값과 최솟값을 출력하라</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong></p>
</blockquote>
<ol>
<li>공백으로 구분된 숫자들을 공백을 기준으로 split() 함수를 이용하여 배열에 담아준다.</li>
<li>min 값과 max값을 배열의 0번째로 지정한다.</li>
<li>배열의 크기만큼 for문을 돌리고</li>
<li>for문 안에서 if문으로 배열을 비교해 최댓값과 최솟값을 찾는다.</li>
<li>문자열 answer안에 담아주고 리턴한다.</li>
</ol>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/c71de6ac-b305-4230-a12d-2e55e1ec5cc7/image.png" alt="mycode"></p>
<blockquote>
<pre><code>import java.util.*;
class Solution {
    public String solution(String s) {
        String answer = &quot;&quot;;
        String[] ss = s.split(&quot; &quot;);
        String max =ss[0];
        String min =ss[0];
        for(int i=0;i&lt;ss.length-1;i++){
            if(Integer.parseInt(ss[i+1]) &gt;Integer.parseInt(max)){
                max = ss[i+1];
            }
            if(Integer.parseInt(ss[i+1]) &lt; Integer.parseInt(min)){
                min = ss[i+1];
            }
        }       
        answer = min + &quot; &quot; +max
        return answer;
    }
}</code></pre></blockquote>
<pre><code>

프로그래머스에서 문제는 꾸준히 푸는데 블로그에 적는 게 밀리는 일이 많아졌다.
제때제때 적어야겠다....😂</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 영어 끝말잇기]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%98%81%EC%96%B4-%EB%81%9D%EB%A7%90%EC%9E%87%EA%B8%B0</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%98%81%EC%96%B4-%EB%81%9D%EB%A7%90%EC%9E%87%EA%B8%B0</guid>
            <pubDate>Wed, 26 Oct 2022 02:58:43 GMT</pubDate>
            <description><![CDATA[<p><strong>📆10/25</strong>
<strong>영어 끝말잇기</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/4515dce5-c694-4a83-9bf2-5d3797b51707/image.png" alt="problem"></p>
<p><strong>&lt;입출력 예&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/b47242e0-c5a5-434c-8182-2b917d6938f4/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
-n : 인원 수
-게임이 끝나는 경우</p>
</blockquote>
<ol>
<li>앞에 나왔던 단어를 똑같이 말하는 경우</li>
<li>앞사람이 말한 단어의 맨 뒷 글자와 다음 사람이 말하는 단어의 맨 앞글자가 다를경우</li>
</ol>
<p> -게임이 끝나지 않으면 [0, 0]</p>
<blockquote>
<p> <strong>&lt;문제 해결&gt;</strong>
aa : answer[0] / aa2 : answer[1]
a : 앞사람 단어의 마지막 글자 / b : 나의 첫번째 글자
먼저, 차례인 사람이 말한 단어가 앞에 나왔던 단어인지 비교하였다.
만약 앞에 단어가 있다면 aa와 aa2를 계산 후에 배열 answer에 넣어주고 for문을 빠져나온다.
단어가 없다면, 
본인 차례의 앞글자와 앞사람의 뒷글자를 비교하였다. 만약 비교했을때 두 글자가 다르다면 
aa와 aa2를 계산 후에 배열 answer에 넣어주고 for문을 빠져나온다.
둘 다 해당되지않는다면 배열 answer에 [0, 0]을 넣어주도록 하였다.</p>
</blockquote>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/f9675150-bfe6-41ea-86fe-df8702a47671/image.png" alt="my_code"></p>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/98141fa0-35d6-41e3-80c8-b40463e278cc/image.png" alt="my_code"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 점프와 순간이동]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EC%A0%90%ED%94%84%EC%99%80-%EC%88%9C%EA%B0%84%EC%9D%B4%EB%8F%99</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EC%A0%90%ED%94%84%EC%99%80-%EC%88%9C%EA%B0%84%EC%9D%B4%EB%8F%99</guid>
            <pubDate>Wed, 26 Oct 2022 02:32:31 GMT</pubDate>
            <description><![CDATA[<p><strong>📆10/25</strong>
<strong>점프와 순간이동</strong></p>
<p><strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/0cd27523-7757-4125-bd32-39dc5df2bc9e/image.png" alt="problem"></p>
<p><strong>&lt;입출력 예&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/923cfcd1-ed26-465a-8c25-30866bdf2da4/image.png" alt="input"></p>
<blockquote>
<p><strong>&lt;문제 해석&gt;</strong>
문제 설명이 길어서 이해하는 데 꽤나 걸렸다. 
-점프를 하면 점프 수 만큼 건전지 소모
-순간이동을하면 (현재까지 온 거리) X 2 칸 이동 =&gt; 건전지 소모 x
-점프를 해서 도착하거나 순간이동을 써서 도착하는 것은 본인 마음
-건전지 최소로 이용해서 도착</p>
</blockquote>
<blockquote>
<p><strong>&lt;문제 해결&gt;</strong>
입출력 예에서 도착 지점이 5000일때를 생각하면서 문제를 어떻게 풀지 고민하였다.
&quot;5000으로 갈때 2500일때 순간이동을 써서 한번에  5000으로 이동하면 되지않나?&quot;
&quot;그럼 1250일때 2500으로 순간이동?  625일 때 1250으로 순간이동?&quot; 하면서 2로 계속 나누어 갔다.
625는 홀수라 2로 나누면 순간이동을 못하는데..
==&gt; 홀수면 -1을 해서 짝수로 만들어 주면 되는구나! (이때 점프를 해서 건전지 1 소모)
<img src="https://velog.velcdn.com/images/lucy_1215/post/d34af042-7a5a-4acb-a71d-90c9f01db1eb/image.png" alt=""></p>
</blockquote>
<p><strong>결론 : n을 2로 나누어서 홀수면 건전지 1 소모,n = n-1 / 짝수면 n = n/2</strong></p>
<p><strong>&lt;내 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/91d36974-4059-4290-92c4-36ef919d6ced/image.png" alt="my_code"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Project] 인터넷 강의 웹 사이트 - 일석이조]]></title>
            <link>https://velog.io/@lucy_1215/Project-%EC%9D%B8%ED%84%B0%EB%84%B7-%EA%B0%95%EC%9D%98-%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%9D%BC%EC%84%9D%EC%9D%B4%EC%A1%B0</link>
            <guid>https://velog.io/@lucy_1215/Project-%EC%9D%B8%ED%84%B0%EB%84%B7-%EA%B0%95%EC%9D%98-%EC%9B%B9-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%9D%BC%EC%84%9D%EC%9D%B4%EC%A1%B0</guid>
            <pubDate>Sun, 23 Oct 2022 13:37:38 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/lucy_1215/post/f5433397-a22b-4e23-9997-35cd880b5b36/image.png" alt="logo"></p>
<h1 id="강의-웹-사이트--1seok2jo"><strong><em>강의 웹 사이트  1seok2jo</em></strong></h1>
<h2 id="💻features">💻Features</h2>
<p>1seok2jo에서는 다음과 같은 기능을 제공합니다.</p>
<pre><code>1. 유저(회원, 강사, 관리자) - 회원가입, 로그인, 장바구니
  -회원 : 회원가입, 로그인, 마이페이지 (프로필, 내 학습, 내 게시판, 내 결제내역), 장바구니, 강의 듣기 , 수강 신청
  -강사 : 강사 신청, 내 강의 게시판, 내 매출 내역 
  -관리자 : 회원 관리, 강의 관리, 게시판 관리 , 매출 관리
2. 강의 - 강의 추가, 삭제, 수정
3. 게시판 - 자유게시판, 공지사항, QNA, 고객센터, 수강평
4. 강의 결제, 환불</code></pre><h2 id="🙆♀️member">🙆‍♀️Member</h2>
<table>
<thead>
<tr>
<th>구효경</th>
<th>심예지</th>
<th>김설희</th>
<th>홍수경🔊</th>
</tr>
</thead>
<tbody><tr>
<td>Backend /Front</td>
<td>Backend/Front</td>
<td>Backend/Front</td>
<td>Backend/Front</td>
</tr>
<tr>
<td>DB</td>
<td>DB</td>
<td>DB</td>
<td>DB</td>
</tr>
<tr>
<td>회원</td>
<td>관리자, 결제</td>
<td>게시판</td>
<td>강의</td>
</tr>
<tr>
<td>로그인 / 회원가입 / 마이페이지 / 강사 신청</td>
<td>관리자 페이지/ 결제, 환불 /내 결제 내역, 내 매출 내역/ 고객센터 관리</td>
<td>후기 / 공지사항 / 자유 / 학습 게시판</td>
<td>강의 목록 / 강의 상세 / 강의 (등록, 수정, 삭제, 듣기) / 장바구니, 강의 듣기 / 내 학습, 내 강의 게시판 / 내 게시판</td>
</tr>
</tbody></table>
<h2 id="🎬work-flow">🎬Work Flow</h2>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/eedd374c-d4ed-43c3-b0d1-8db55a629522/image.png" alt=""></p>
<h2 id="📃erd">📃ERD</h2>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/28f5e817-d166-4da5-8c1d-ec9f3c4b984a/image.jpg" alt=""></p>
<h2 id="📍system-architecture">📍System Architecture</h2>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/c11cc40e-1217-470c-8cec-96527cbc22d3/image.png" alt="system_architecture"></p>
<h2 id="📢notion">📢Notion</h2>
<p>📕<a href="https://sugary-sidewalk-812.notion.site/6ec687ba4b9e449d8720a940a654bc2e">Notion</a></p>
<h2 id="♣github">♣Github</h2>
<p>🔍<a href="https://github.com/sugang258/1seok2jo">Github</a></p>
<h2 id="📸실행화면">📸실행화면</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 숫자 문자열과 영단어]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-school-%EC%88%AB%EC%9E%90-%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC-%EC%98%81%EB%8B%A8%EC%96%B4</link>
            <guid>https://velog.io/@lucy_1215/Programmers-school-%EC%88%AB%EC%9E%90-%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC-%EC%98%81%EB%8B%A8%EC%96%B4</guid>
            <pubDate>Sun, 23 Oct 2022 13:10:35 GMT</pubDate>
            <description><![CDATA[<h4 id="📆1020일">📆10/20일</h4>
<p><strong>숫자 문자열과 영단어</strong>
<strong>&lt;문제 설명&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/6ba6adc8-c8d2-4b4c-bb7f-c57886845c56/image.png" alt="problem">
<img src="https://velog.velcdn.com/images/lucy_1215/post/ee1200d0-cdc7-41ff-9473-2794aa3d7999/image.png" alt="problem"></p>
<p><strong>&lt;입출력 예&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/476600c3-4a84-4433-baf0-b061420f11b5/image.png" alt="input_ex"></p>
<p>문제를 보고 영어문자에 해당하는 숫자를 대신 써준다? 라는 생각을 했고 문자열을 구분해야하나 라는 생각과 함께 split() 함수가 떠올랐다.
split() 함수를 쓰려고 여러가지 시도를 해봤지만 해결되지않았고 split()함수를 쓰는 게 아닌 것 같다 라는 결론을 내렸다. 
다시 천천히 생각 끝에 해당하는 숫자를 대신 써준다 라는 말에서 &quot;대신&quot; 이라는 말이 뇌리에 박혔고 replace() 함수가 떠올랐다.</p>
<p><strong>&lt;내가 쓴 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/ef8ad28c-074e-4d95-997b-5105facd69b1/image.png" alt="my_code"></p>
<p>&quot;zero&quot;부터 &quot;nine&quot;을 배열 안에 넣어주고 for문을 이용해 문자열 s안에 있는 영어단어를 하나씩 해당하는 배열의 순서와 바꿔주도록 하였다.</p>
<p>처음에는 split()함수를 쓰려고 했던 것이 Java 함수들을 완벽하게 숙지하지 못하고 있었다는 것을 의미한다고 깨달았다.
어떤 상황에서 어떤 함수를 써야할지 바로 알기 위해 Java의 함수들을 무!조!건! 알아놔야겠다.</p>
<p><strong><em>*split(String regex) :  특정 기준으로 문자열을 분리할 때</em>
*replace(char oldChar, char newChar) : 문자 또는 문자열을 변환하고 리턴</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Programmers School] 로그인 성공?]]></title>
            <link>https://velog.io/@lucy_1215/Programmers-School-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%84%B1%EA%B3%B5</link>
            <guid>https://velog.io/@lucy_1215/Programmers-School-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%84%B1%EA%B3%B5</guid>
            <pubDate>Sun, 23 Oct 2022 12:52:13 GMT</pubDate>
            <description><![CDATA[<h4 id="📆1020일">📆10/20일</h4>
<h4 id="앞으로의-코딩테스트-준비를-위해-programmers-school의-코딩문제들을-풀기로-했다">앞으로의 코딩테스트 준비를 위해 programmers school의 코딩문제들을 풀기로 했다.</h4>
<h3 id="로그인-성공">로그인 성공?</h3>
<h4 id="문제설명">&lt;문제설명&gt;</h4>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/246e0049-4618-4141-8485-0e53a05c9e56/image.png" alt="login_success"></p>
<h4 id="입출력-예">&lt;입출력 예&gt;</h4>
<p><img src="https://velog.velcdn.com/images/lucy_1215/post/6d30feac-b7e4-4dbe-ae82-5027fed5d28c/image.png" alt="input_ex"></p>
<p>문제를 보고 for문으로 배열에 있는 값들을 비교하고 if문을 써서 아이디와 비밀번호를 확인하는 방식을 생각했다.</p>
<ol>
<li>아이디만 맞고 비밀번호 틀리면 =&gt; &quot;wrong pw&quot;</li>
<li>아이디와 비밀번호 둘 다 틀리면 =&gt; &quot;fail&quot;</li>
<li>아이디와 비밀번호 둘 다 맞으면 =&gt; &quot;login&quot;</li>
</ol>
<p><strong>&lt;내가 쓴 코드&gt;</strong>
<img src="https://velog.velcdn.com/images/lucy_1215/post/e273757c-9b41-4127-9607-798ffdf8f7a4/image.png" alt="my_code"></p>
<p><strong>❗풀면서 한가지 조심해야 할 점❗
처음에는 if문에서 문자열 비교할때 &quot;==&quot;을 써서 통과가 되지 않았다.
문자열 비교는 &quot;==&quot;을 쓰는 것이 아니라 .equals()를 써야 한다는 것!
꼭 명심하기로!!!</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[개발 일지 Teaser]]></title>
            <link>https://velog.io/@lucy_1215/%EA%B0%9C%EB%B0%9C-%EC%9D%BC%EC%A7%80-Teaser</link>
            <guid>https://velog.io/@lucy_1215/%EA%B0%9C%EB%B0%9C-%EC%9D%BC%EC%A7%80-Teaser</guid>
            <pubDate>Thu, 20 Oct 2022 10:05:06 GMT</pubDate>
            <description><![CDATA[<h2 id="1">#1</h2>
<h3 id="항상-다른-분들의-개발-일지만-봐왔던-내가-드디어-개발-일지를-쓰려고-한다😉hr">항상 다른 분들의 개발 일지만 봐왔던 내가 드디어!! 개발 일지를 쓰려고 한다😉<hr></h3>
<h4 id="현재의-마음은-설렘-반-두려움-반이다">현재의 마음은 설렘 반, 두려움 반이다.</h4>
<h4 id="예전부터-쓰고-싶었던-개발-일지를-쓰려고-하니-막상-무엇을-적어야-할지-감이-안온다">예전부터 쓰고 싶었던 개발 일지를 쓰려고 하니 막상 무엇을 적어야 할지 감이 안온다.</h4>
<h4 id="개발-일지-공간에는-매일매일-공부를-한-내용과-문제가-발생했다면-어떻게-해결했는지-프로젝트에-대한-내용-코딩테스트-준비-과정에-대해-적으려고-한다">개발 일지 공간에는 매일매일 공부를 한 내용과 문제가 발생했다면 어떻게 해결했는지, 프로젝트에 대한 내용, 코딩테스트 준비 과정에 대해 적으려고 한다.</h4>
<h3 id="신입-개발자의-개발-성장-stroy를-잘-지켜봐주길-바랍니다😊">신입 개발자의 개발 성장 stroy를 잘 지켜봐주길 바랍니다!!😊</h3>
]]></description>
        </item>
    </channel>
</rss>