<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>j_22.log</title>
        <link>https://velog.io/</link>
        <description>@studing_dobby</description>
        <lastBuildDate>Tue, 16 Jan 2024 01:52:28 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>j_22.log</title>
            <url>https://velog.velcdn.com/images/j_ie_j/profile/5551aa5d-1885-47c8-8aea-131acbcdbd3a/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. j_22.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/j_ie_j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[면접 예상질문 또는 받았던 질문 정리]]></title>
            <link>https://velog.io/@j_ie_j/%EB%A9%B4%EC%A0%91-%EC%98%88%EC%83%81%EC%A7%88%EB%AC%B8-%EB%98%90%EB%8A%94-%EB%B0%9B%EC%95%98%EB%8D%98-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@j_ie_j/%EB%A9%B4%EC%A0%91-%EC%98%88%EC%83%81%EC%A7%88%EB%AC%B8-%EB%98%90%EB%8A%94-%EB%B0%9B%EC%95%98%EB%8D%98-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Tue, 16 Jan 2024 01:52:28 GMT</pubDate>
            <description><![CDATA[<h2 id="java">JAVA</h2>
<h4 id="👉-오버로딩과-오버라이딩의-차이">👉 오버로딩과 오버라이딩의 차이</h4>
<h4 id="👉-변수에-대하여-설명하시오">👉 변수에 대하여 설명하시오</h4>
<h4 id="👉-final-에-대하여-설명하시오">👉 Final 에 대하여 설명하시오</h4>
<hr>
<h2 id="project">Project</h2>
<h4 id="👉-왜-react를-사용하였는지">👉 왜 React를 사용하였는지</h4>
<h4 id="👉-뭐니money-react와-react-native를-같이-사용한-이유">👉 (뭐니Money) React와 React-native를 같이 사용한 이유</h4>
<h4 id="👉-typescript-사용-이유">👉 TypeScript 사용 이유</h4>
<h4 id="👉-front-end를-선택한-이유">👉 Front-end를 선택한 이유</h4>
<h4 id="👉-갈등관리">👉 갈등관리</h4>
<hr>
<h2 id="cs">CS</h2>
<h4 id="👉-프레임워크와-라이브러리의-차이점">👉 프레임워크와 라이브러리의 차이점</h4>
<h4 id="👉-react-생애주기">👉 React 생애주기</h4>
<h4 id="👉-브라우저가-생성되는-단계에-대하여-설명">👉 브라우저가 생성(?)되는 단계에 대하여 설명</h4>
<hr>
<h2 id="etc">etc</h2>
<h4 id="👉-회사에-관련하여-아는-거">👉 회사에 관련하여 아는 거</h4>
<h4 id="👉-지원동기">👉 지원동기</h4>
<h4 id="👉-3년-후-계획">👉 3년 후 계획</h4>
<h4 id="👉-알고있는-알고리즘에-대하여-설명">👉 알고있는 알고리즘에 대하여 설명</h4>
<h4 id="👉-본사에-대하여-궁금한-점">👉 본사에 대하여 궁금한 점</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTTP] HTTP]]></title>
            <link>https://velog.io/@j_ie_j/HTTP-HTTP</link>
            <guid>https://velog.io/@j_ie_j/HTTP-HTTP</guid>
            <pubDate>Mon, 08 Jan 2024 08:43:49 GMT</pubDate>
            <description><![CDATA[<ul>
<li>모든 것이 HTTP</li>
<li>클라이언트 서버 구조</li>
<li>Stateful, Stateless</li>
<li>비 연결성(connectionless)</li>
<li>HTTP 메시지</li>
</ul>
<hr>
<h3 id="http-특징">HTTP 특징</h3>
<ul>
<li>클라이언트 서버 구조</li>
<li>무상태 프로토콜 (스테이스리스), 비연결성</li>
<li>HTTP 메시지</li>
<li>단순함, 확장 가능</li>
</ul>
<hr>
<h2 id="클라이언트-서버-구조">클라이언트 서버 구조</h2>
<ul>
<li>Request Response 구조</li>
<li>클라이언트는 서버에 요청을 보내고, 응답을 대기</li>
<li>서버가 요청에 대한 결과를 만들어서 응답</li>
</ul>
<h2 id="stateful-stateless">Stateful, Stateless</h2>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/b001c548-ebc0-4d36-9ca0-329247b92b84/image.png" alt="">
<img src="https://velog.velcdn.com/images/j_ie_j/post/35a8aea6-c85c-4f42-ae61-86a4cb579f44/image.png" alt=""></p>
<h3 id="stateless-실무-한계">Stateless 실무 한계</h3>
<ul>
<li>모든 것을 무상태로 설계 할 수 있는 경우도 있고 없는 경우도 있다.</li>
<li>무상태 
  예) 로그인이 필요 없는 단순한 서비스 소개 화면</li>
<li>상태유지
  예) 로그인</li>
<li>로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지</li>
<li>일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지</li>
<li>상태 유지는 최소한만 사용</li>
</ul>
<hr>
<h2 id="비연결성">비연결성</h2>
<ul>
<li><p>HTTP는 기본이 연결을 유지하지 않는 모델</p>
</li>
<li><p>일반적으로 초 단위의 이하의 빠른 속도로 응답</p>
</li>
<li><p>1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
  예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.</p>
</li>
<li><p>서버 자원을 매우 효율적으로 사용할 수 있음</p>
<h4 id="한계와-극복">한계와 극복</h4>
</li>
<li><p>TCP/IP 연결을 새로 맺어야 함 -3 way handshake 시간 추가</p>
</li>
<li><p>웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 자바스크립트, CSS 추가 이미지등 수 많은 자원이 함께 다운로드</p>
</li>
<li><p>지금은 HTTP 지속 연결 (Persistent connetions)로 문제 해결</p>
</li>
<li><p>HTTP/2, HTTP/3에서 더 많은 최적화</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTTP] URI와 웹 브라우저 요청 흐름]]></title>
            <link>https://velog.io/@j_ie_j/HTTP-URI%EC%99%80-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%9A%94%EC%B2%AD-%ED%9D%90%EB%A6%84</link>
            <guid>https://velog.io/@j_ie_j/HTTP-URI%EC%99%80-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EC%9A%94%EC%B2%AD-%ED%9D%90%EB%A6%84</guid>
            <pubDate>Mon, 08 Jan 2024 05:47:32 GMT</pubDate>
            <description><![CDATA[<h1 id="uriuniform-resource-identifier">URI(Uniform Resource identifier)</h1>
<p>Uniform: 리소스 식별하는 통일된 방식
Resource: 자원, URI로 식별할 수 있는 모든 것 (제한 없음)
Identifier: 다른 항목과 구분하는데 필요한 정보</p>
<p>URL: Uniform Resource Locator</p>
<ul>
<li><p>Locator: 리소스가 있는 위치를 지정
URN: Uniform Resource Name</p>
</li>
<li><p>Name: 리소스에 이름을 부여</p>
</li>
<li><p>위치는 변할 수 있지만, 이름은 변하지 않는다.</p>
</li>
<li><p>URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음</p>
</li>
<li><p>앞으로 URI를 URN과 같은 의미로 이야기하겠음</p>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[
[HTTP] 인터넷 네트워크]]></title>
            <link>https://velog.io/@j_ie_j/HTTP-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@j_ie_j/HTTP-%EC%9D%B8%ED%84%B0%EB%84%B7-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Mon, 08 Jan 2024 05:29:08 GMT</pubDate>
            <description><![CDATA[<h1 id="인테넷-네트워크">인테넷 네트워크</h1>
<h2 id="인터넷-통신">인터넷 통신</h2>
<h4 id="인터넷에서-컴퓨터-둘은-어떻게-통신할까">인터넷에서 컴퓨터 둘은 어떻게 통신할까?</h4>
<p>=&gt; IP(인터넷 프로토콜)에 대하여 학습해야함.</p>
<h2 id="ip-인터넷-프로토콜">IP 인터넷 프로토콜</h2>
<ul>
<li>지정한 IP주소에 데이터 전달</li>
<li>패킷(Packet)이라는 통신 단위로 데이터 전달</li>
</ul>
<hr>
<h3 id="ip-인터넷-프로토콜의-한계">IP 인터넷 프로토콜의 한계</h3>
<ul>
<li>비연결성<ul>
<li>패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 </li>
</ul>
</li>
<li>비신뢰성<ul>
<li>중간에 패킷이 사라지면?</li>
<li>패킷이 순서대로 안오면?</li>
</ul>
</li>
<li>프로그램 구분<ul>
<li>같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?</li>
</ul>
</li>
</ul>
<h2 id="tcp-udp">TCP UDP</h2>
<h3 id="tcp">TCP</h3>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/86a5c107-27de-47a2-b5c9-499447b117d4/image.png" alt="인터넷 프로토콜 스택의 4계층">
<img src="https://velog.velcdn.com/images/j_ie_j/post/30cf8e78-7fbe-4447-912e-2e87714d837b/image.png" alt=""></p>
<h4 id="tcp-특징">TCP 특징</h4>
<p>전송 제어 프로토콜 (Transmission Control Protocol)</p>
<ul>
<li>연결지향 - TCP 2 way handshake (가상연결)</li>
<li>데이터 전달 보증</li>
<li>순서 보장</li>
<li>신뢰할 수 있는 프로토콜</li>
<li>현재는 대부분 TCP 사용</li>
</ul>
<h4 id="udp-특징">UDP 특징</h4>
<p>사용자 데이터그램 프로토콜 (User Datagram Protocol)</p>
<ul>
<li>하얀 도화지에 비유 (기능이 거의 없음)</li>
<li>연결지향 -TCP 3 way handshake X</li>
<li>데이터 전달 보증 X</li>
<li>순서 보장 X</li>
<li>데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름</li>
<li><em>정리*</em></li>
<li>IP와 거의 같다. +Port + 체크섬 정도만 추가</li>
<li>애플리케이션에 추가 작업 필요</li>
</ul>
<h2 id="port">PORT</h2>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] K번째 수]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-K%EB%B2%88%EC%A7%B8-%EC%88%98</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-K%EB%B2%88%EC%A7%B8-%EC%88%98</guid>
            <pubDate>Sat, 23 Sep 2023 16:24:49 GMT</pubDate>
            <description><![CDATA[<h2 id="📌-문제">📌 문제</h2>
<p>배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.</p>
<p>예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면</p>
<p>array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.</p>
<h2 id="📌-제한사항">📌 제한사항</h2>
<p>array의 길이는 1 이상 100 이하입니다.
array의 각 원소는 1 이상 100 이하입니다.
commands의 길이는 1 이상 50 이하입니다.
commands의 각 원소는 길이가 3입니다.</p>
<h3 id="🤔-새로운-개념-copyofrange">🤔 새로운 개념 copyOfRange</h3>
<p><code>copyOf</code>는 원볼배열과 복사할 길이를 입력 받는다. 
반면 
<code>copyOfRange</code>는 원본 배열, 복사할 시작인덱스, 복사할 끝 인덱스를 입력 받아 출력한다.</p>
<pre><code class="language-java">class Solution {
    public int[] solution(int[] array, int[][] commands) {
        // 정답이 될 배열 크기 설정
        int[] answer = new int[commands.length];
        // 반복문 돌면서 sort전 배열 구하기
        for(int i = 0; i&lt;command.length; i++){
            int[]array1 = Arrays.copyOfRange(array, commands[i][0] -1 , commands[i][1]);
            // 이제 sort
            Arrays.sort(array1);
            answer[i] = array1[commands[i][2]-1]
        }
        return answer;
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/4de3e985-b9d3-48bf-a35b-eca5fa956066/image.png" alt=""></p>
<p>내가 한번에 될 리가 없지...</p>
<pre><code class="language-java">import java.util.*;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        // 정답이 될 배열 크기 설정
        int[] answer = new int[commands.length];
        // 반복문 돌면서 sort전 배열 구하기
        for(int i = 0; i&lt;commands.length; i++){
            int[]array1 = Arrays.copyOfRange(array, commands[i][0] -1 , commands[i][1]);
            // 이제 sort
            Arrays.sort(array1);
            answer[i] = array1[commands[i][2]-1];
        }
        return answer;
    }
}</code></pre>
<p>자꾸 잔잔바리 실수하니깐,,,오늘은 좀 짜증날땐 짜장면 먹고싶다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 폰캣몬]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8F%B0%EC%BA%A3%EB%AA%AC</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%8F%B0%EC%BA%A3%EB%AA%AC</guid>
            <pubDate>Thu, 21 Sep 2023 15:35:48 GMT</pubDate>
            <description><![CDATA[<h3 id="📌-문제-설명">📌 문제 설명</h3>
<p>당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 <strong>총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.</strong>
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.</p>
<p>첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
두 번째(1번), 세 번째(2번) 폰켓몬을 선택
두 번째(1번), 네 번째(3번) 폰켓몬을 선택
세 번째(2번), 네 번째(3번) 폰켓몬을 선택
이때, 첫 번째(3번) 폰켓몬과 네 번째(3번) <strong>폰켓몬을 선택하는 방법은 한 종류(3번 폰켓몬 두 마리)의 폰켓몬만 가질 수 있지만, 다른 방법들은 모두 두 종류의 폰켓몬을 가질 수 있습니다.</strong> 따라서 위 예시에서 가질 수 있는 폰켓몬 종류 수의 최댓값은 2가 됩니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.</p>
<h4 id="📌-제한사항">📌 제한사항</h4>
<p>nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.
폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.
가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.</p>
<hr>
<p>문제를 처음 보고 든 생각은
어? 이거 그거 그그그 경우의 수 뭐더라 그거 아닌가?
근데 문제 유형이 <code>Hash</code>였단 말이죠?
그래서 고민고민</p>
<hr>
<ol>
<li>일단 max값은 주어진 배열 nums.length / 2 이다.</li>
<li>그럼 중복 없이 <code>hash</code>에 담았을 때 그 <code>Hash</code>의 값이 max보다 크거나 작음 되는 일!!</li>
<li>중복 없는 <code>Hash</code>는? 
 =&gt; <code>Hashset</code></li>
</ol>
<hr>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int solution(int[] nums) {

        //1. max는 nums.length / 2
        int max = nums.length / 2;
        //2. 중복 없는 Hashset 생성
        HashSet&lt;Integer&gt; set = new HashSet&lt;&gt;();
        // set에 nums의 값들을 하나씩 넣어서 그 size를 확인
        for(int i : nums){
            set.add(i);
        }
        // 만약 set의 크기가 max보다 크다면 set크기가 max.
        if(set.size() &gt; max){
            return set.size();
        }else{
            return max;
        }
    }
}</code></pre>
<p>max값을 print하는 것이 아니라 <code>return</code>을 사용한 나에게 굉장히 도취해 있었다.</p>
<p>그러나,,,</p>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/f9a7a21b-65e0-4e48-a602-b59fc8c26682/image.png" alt="">
왜,,,뭐가 문제인데
난 제대로 푼 거 같은데?</p>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int solution(int[] nums) {

        //1. max는 nums.length / 2
        int max = nums.length / 2;
        //2. 중복 없는 Hashset 생성
        HashSet&lt;Integer&gt; set = new HashSet&lt;&gt;();
        // set에 nums의 값들을 하나씩 넣어서 그 size를 확인
        for(int i : nums){
            set.add(i);
        }
        // 만약 set의 크기가 max보다 크다면 정답은 max (문제에서 nums.length이 최대라고 지정해줌)
        if(set.size() &gt; max){
            return max;
        }else{
            return set.size();
        }
    }
}</code></pre>
<p>왜 나는 항상 덤벙 거릴까..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 햄버거 만들]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%96%84%EB%B2%84%EA%B1%B0-%EB%A7%8C%EB%93%A4</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%96%84%EB%B2%84%EA%B1%B0-%EB%A7%8C%EB%93%A4</guid>
            <pubDate>Wed, 20 Sep 2023 14:01:34 GMT</pubDate>
            <description><![CDATA[<p><strong>문제 설명</strong>
햄버거 가게에서 일을 하는 상수는 햄버거를 포장하는 일을 합니다. 함께 일을 하는 다른 직원들이 햄버거에 들어갈 재료를 조리해 주면 조리된 순서대로 상수의 앞에 아래서부터 위로 쌓이게 되고, 상수는 순서에 맞게 쌓여서 완성된 햄버거를 따로 옮겨 포장을 하게 됩니다. 상수가 일하는 가게는 정해진 순서(아래서부터, 빵 – 야채 – 고기 - 빵)로 쌓인 햄버거만 포장을 합니다. 상수는 손이 굉장히 빠르기 때문에 상수가 포장하는 동안 속 재료가 추가적으로 들어오는 일은 없으며, 재료의 높이는 무시하여 재료가 높이 쌓여서 일이 힘들어지는 경우는 없습니다.</p>
<p>예를 들어, 상수의 앞에 쌓이는 재료의 순서가 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵]일 때, 상수는 여섯 번째 재료가 쌓였을 때, 세 번째 재료부터 여섯 번째 재료를 이용하여 햄버거를 포장하고, 아홉 번째 재료가 쌓였을 때, 두 번째 재료와 일곱 번째 재료부터 아홉 번째 재료를 이용하여 햄버거를 포장합니다. 즉, 2개의 햄버거를 포장하게 됩니다.</p>
<p>상수에게 전해지는 재료의 정보를 나타내는 정수 배열 ingredient가 주어졌을 때, 상수가 포장하는 햄버거의 개수를 return 하도록 solution 함수를 완성하시오.</p>
<h2 id="🌟-풀이">🌟 풀이</h2>
<pre><code class="language-java">import java.util.*;

class Solution {
    public int solution(int[] ingredient) {
        int answer = 0;
        //stack 만들기
        Stack&lt;Integer&gt; stack = new Stack&lt;Integer&gt;();
        //ingredient를 돌며 stack에 넣기
        for(int i : ingredient){
            stack.push(i);
        }
        // 빵, 야채, 고기, 빵 들어가면 cnt++
        // 일단 4개 들어가면 ...
        int cnt = 0;
        if(stack.size() &gt;= 4){
            //재료 순서 확인
            if(stack.pop() == 1 &amp;&amp; stack.pop()== 2 &amp;&amp; stack.pop() == 3 &amp;&amp; stack.pop() == 1){
                cnt++;
            }
        }
        return cnt;
    }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/c398d676-d445-4ba6-a97d-d5202cfa40b4/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 달리기 경주]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC</guid>
            <pubDate>Mon, 18 Sep 2023 16:36:21 GMT</pubDate>
            <description><![CDATA[<p><strong>문제 설명</strong>
얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 &quot;mumu&quot;, &quot;soe&quot;, &quot;poe&quot; 선수들이 순서대로 달리고 있을 때, 해설진이 &quot;soe&quot;선수를 불렀다면 2등인 &quot;soe&quot; 선수가 1등인 &quot;mumu&quot; 선수를 추월했다는 것입니다. 즉 &quot;soe&quot; 선수가 1등, &quot;mumu&quot; 선수가 2등으로 바뀝니다.</p>
<p>선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.</p>
<p><strong>제한사항</strong>
5 ≤ players의 길이 ≤ 50,000
players[i]는 i번째 선수의 이름을 의미합니다.
players의 원소들은 알파벳 소문자로만 이루어져 있습니다.
players에는 중복된 값이 들어가 있지 않습니다.
3 ≤ players[i]의 길이 ≤ 10
2 ≤ callings의 길이 ≤ 1,000,000
callings는 players의 원소들로만 이루어져 있습니다.
경주 진행중 1등인 선수의 이름은 불리지 않습니다.</p>
<h2 id="👉-풀이">👉 풀이</h2>
<pre><code class="language-java"></code></pre>
<p>대강 반복문을 돌면서 <code>index</code> 뽑아 <code>swap</code>하면 되지 않을까 생각하였지만
요즘 매우매우 바빠(지쳐서) 일단 힌트를 찾아보았다.
<code>Map</code>을 공부해야 풀 수 있는 문제인 것으로 판단!</p>
<hr>
<h2 id="🌳-java-map">🌳 Java Map</h2>
<h3 id="🌟-map이란">🌟 <code>Map</code>이란?</h3>
<ul>
<li><code>Map</code>은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고  key를 통해 value값을 찾는다.</li>
</ul>
<h3 id="🌟-map-특징">🌟 <code>Map</code> 특징</h3>
<ul>
<li>요소의 저장 순서를 유지하지 않는다.</li>
<li><code>key</code>는 중복을 허용하지 않으나 <code>value</code>는 중복을 허용한다.</li>
</ul>
<hr>
<h2 id="👉-다시-풀이">👉 다시 풀이</h2>
<ol>
<li><code>PlayerMap</code> 생성</li>
<li><code>RankMap</code> 생성</li>
<li><code>Map</code> 사용을 위한 초기화</li>
<li>반복문을 돌며</li>
<li><code>callings</code>에서 부른 선수와 해당 선수 <code>index</code> 추출</li>
<li><code>swap</code>하기</li>
</ol>
<hr>
<pre><code class="language-java">class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];

        //Map 생성
        Map&lt;String, Integer&gt; mapPlayer = new HashMap&lt;&gt;();
        Map&lt;Integer, String&gt; mapRank = new HashMap&lt;&gt;();

        //Map 초기화: 각각 key, value를 교차해서 저장
        for(int i = 0; i &lt; players.length; i++){
            mapPlayer.put(players[i],i);
            mapRank.put(i, players[i]);
        }

        // 반복문 돌면서 
        for(int i = 0; i&lt; callings.length; i++){
            // player와 rank 추출
            int nowRank = mapPlayer.get(callings[i]);
            String nowPlayer = mapRank.get(nowRank);
            //swap
            //추월한 player 뽑아내기 : 코드의 간결함을 위해
            String overTaking = mapRank.get(nowRank-1);
            //진짜 swap
            mapPlayer.put(nowPlayer, nowRank - 1);
            mapPlayer.put(overTaking, nowRank);

            mapRank.put(nowRank - 1, nowPlayer);
            mapRank.put(nowRank, overTaking);
        }

        for (int i = 0; i &lt; players.length; i++) {
            answer[i] = mapRank.get(i);
        }

        return answer;
    }

}</code></pre>
<p>그와중에 오답</p>
<pre><code class="language-java">import java.util.*</code></pre>
<p>잊지말자. 나는 이 한줄로 sk 코딩테스트를 포기했다.</p>
<h2 id="👉-정말-정답">👉 정말 정답</h2>
<pre><code class="language-java">import java.util.*
class Solution {
    public String[] solution(String[] players, String[] callings) {
        String[] answer = new String[players.length];

        //Map 생성
        Map&lt;String, Integer&gt; mapPlayer = new HashMap&lt;&gt;();
        Map&lt;Integer, String&gt; mapRank = new HashMap&lt;&gt;();

        //Map 초기화: 각각 key, value를 교차해서 저장
        for(int i = 0; i &lt; players.length; i++){
            mapPlayer.put(players[i],i);
            mapRank.put(i, players[i]);
        }

        // 반복문 돌면서 
        for(int i = 0; i&lt; callings.length; i++){
            // player와 rank 추출
            int nowRank = mapPlayer.get(callings[i]);
            String nowPlayer = mapRank.get(nowRank);
            //swap
            //추월한 player 뽑아내기 : 코드의 간결함을 위해
            String overTaking = mapRank.get(nowRank-1);
            //진짜 swap
            mapPlayer.put(nowPlayer, nowRank - 1);
            mapPlayer.put(overTaking, nowRank);

            mapRank.put(nowRank - 1, nowPlayer);
            mapRank.put(nowRank, overTaking);
        }

        for (int i = 0; i &lt; players.length; i++) {
            answer[i] = mapRank.get(i);
        }

        return answer;
    }

}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 자연수 뒤집어 배열로 만들기]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EC%97%B0%EC%88%98-%EB%92%A4%EC%A7%91%EC%96%B4-%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%A7%8C%EB%93%A4</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EC%97%B0%EC%88%98-%EB%92%A4%EC%A7%91%EC%96%B4-%EB%B0%B0%EC%97%B4%EB%A1%9C-%EB%A7%8C%EB%93%A4</guid>
            <pubDate>Thu, 14 Sep 2023 15:34:45 GMT</pubDate>
            <description><![CDATA[<p>자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.</p>
<p>제한 조건
n은 10,000,000,000이하인 자연수입니다.</p>
<h2 id="👉-풀이">👉 풀이</h2>
<pre><code class="language-java">class Solution {
    public int[] solution(long n) {
        String s = Long.toString(n);
        int[] answer = new int[s.length()];

        for(int i = 0; i &lt; s.length(); i++){
            answer[s.length()-i-1] = Character.getNumericValue(s.charAt(i));
        }

        return answer;
    }
}</code></pre>
<p>아직은 <code>Character.getNumericValue</code>와 같은 메서드를 사용하기 위해 검색은 필수였다.
<code>answer[s.length()-i-1]</code> 이부분에서 한번의 범위 실수가 있었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 카펫]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B9%B4%ED%8E%AB</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%B9%B4%ED%8E%AB</guid>
            <pubDate>Wed, 13 Sep 2023 00:15:16 GMT</pubDate>
            <description><![CDATA[<p>Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
<img src="https://velog.velcdn.com/images/j_ie_j/post/b0df11cc-df5f-4333-9e00-88973fc475c9/image.png" alt="">
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.</p>
<p>Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.</p>
<p>제한사항
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.</p>
<h2 id="✅-풀이">✅ 풀이</h2>
<pre><code class="language-java">class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int row = 0; 
        int column = 0; 
        int box = brown + yellow;
        for(int i = 1; i &lt; box/2; i++){
            if(box % i == 0){
                row = i;
            }
        }
        answer[0] = row;
        answer[1] = box / row;

        return answer;
    }
}</code></pre>
<p>이렇게 풀었으나 오답!!
테스트케이스를 보니 최대공약수를 구해야한다는 것을 알게되었다.
최대공약수를 구현해보자!!</p>
<h2 id="👉-정답">👉 정답</h2>
<pre><code class="language-java">class Solution {
    public int[] solution(int brown, int yellow) {
        int[] answer = new int[2];
        int box = brown + yellow;

        for(int i = 1; i &lt;= box; i++){
            if(box % i == 0){
                int row = i;
                int col = box / i;

                if((row - 2) * (col - 2) == yellow){
                    answer[0] = col;
                    answer[1] = row;
                    break;
                }
            }
        }

        return answer;
    }
}

</code></pre>
<p><code>while</code>문을 돌리는 과정에서 box의 값이 변하지 않아 무한루프에 빠지는 것이 문제였다. 
이러한 문제를 해결해보았읍니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 숫자의 표현]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%88%AB%EC%9E%90%EC%9D%98-%ED%91%9C%ED%98%84</guid>
            <pubDate>Tue, 12 Sep 2023 08:34:53 GMT</pubDate>
            <description><![CDATA[<p>Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.</p>
<p>1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.</p>
<h2 id="🤔-챗헷">🤔 챗헷</h2>
<pre><code>public class Solution {
    public int solution(int n) {
        int answer = 0;

        for (int i = 1; i &lt;= n; i++) {
            int sum = 0;
            for (int j = i; j &lt;= n; j++) {
                sum += j;
                if (sum == n) {
                    answer++;
                    break;
                }
                if (sum &gt; n) {
                    break;
                }
            }
        }

        return answer;
    }
}
</code></pre><p>보아하니 <strong><em>이중<code>for</code>문</em></strong>을 사용한 것을 볼 수 있다.
나는 항상 <strong><em>이중<code>for</code>문</em></strong>을 사용할 때 범위값 주는 것을 어려워하였다.
예를 들어 위에 처럼 첫 번째 <code>for</code>문의 i를 두 번째 <code>for</code>문의 범위로 쓰는 경우,
내 머리론 이게 참 힘들었다. </p>
<hr>
<p>친구랑 코딩테스트 준비를 같이 하면서 하루에 알고리즘 두 문제 풀기를 약속하였다.
지금 시각 00시 56분 친구는 잠들었다.
내가 이 문제를 풀지 못했다는 사실을 친구는 내일 볼 것이다. </p>
<p>친구야 미안해.. 나 좀 졸린 거 같아
대신 정말 월요일에 아, 이미 월요일이구나 그래도 내가 아직 안잤으니 지금은 일요일이야
월요일에 Lev2 2문제 풀게
너가 괜찮다고해도 사실 내가 안괜찮아</p>
<p>요즘 코테 볼 때마다 못 푸는게 스트레스다.
취업,,,하고 싶다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 피보나치 수]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%BC%EB%B3%B4%EB%82%98%EC%B9%98-%EC%88%98</guid>
            <pubDate>Tue, 12 Sep 2023 05:21:47 GMT</pubDate>
            <description><![CDATA[<p>피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.</p>
<p>예를들어</p>
<p>F(2) = F(0) + F(1) = 0 + 1 = 1
F(3) = F(1) + F(2) = 1 + 1 = 2
F(4) = F(2) + F(3) = 1 + 2 = 3
F(5) = F(3) + F(4) = 2 + 3 = 5
와 같이 이어집니다.</p>
<p>2 이상의 n이 입력되었을 때, <span style="background-color:yellow">n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수</span>, solution을 완성해 주세요.</p>
<p>제한 사항
n은 2 이상 100,000 이하인 자연수입니다.</p>
<h2 id="✅-첫-번째-풀이">✅ 첫 번째 풀이</h2>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 0; i &lt; n ; i++){
            answer  =+ (i+1);
        } 
        return answer;
    }
}</code></pre>
<p>피보나치 수가 뭔지 기억이 안나 피보나치 수 검색하고 일단 대강 짜본 코드
테케 하나는 맞고 하나는 틀렸다.
이게 아님을 그냥 알 수 있지만, 어떻게 해야하는지 생각은 못하는 중</p>
<pre><code class="language-java">class Solution {
    public int solution(int n) {
        int answer[] = new int[n+1];
        for(int i = 0; i &lt;= n ; i++){
           if(i == 0) answer[i] = 0;
            else if (i == 1) answer[i] = 1;
            else{
                int sum = (answer[i-2]+answer[i-1]) % 1234567;
                answer[i] = sum;
            }
        } 
        return answer[n];
    }
}</code></pre>
<p>문제를 잘 읽자!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] x만큼 간격이 있는 n개의 숫자]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-x%EB%A7%8C%ED%81%BC-%EA%B0%84%EA%B2%A9%EC%9D%B4-%EC%9E%88%EB%8A%94-n%EA%B0%9C%EC%9D%98-%EC%88%AB%EC%9E%90</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-x%EB%A7%8C%ED%81%BC-%EA%B0%84%EA%B2%A9%EC%9D%B4-%EC%9E%88%EB%8A%94-n%EA%B0%9C%EC%9D%98-%EC%88%AB%EC%9E%90</guid>
            <pubDate>Tue, 12 Sep 2023 00:16:02 GMT</pubDate>
            <description><![CDATA[<p>문제 설명
함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.</p>
<p>제한 조건
x는 -10000000 이상, 10000000 이하인 정수입니다.
n은 1000 이하인 자연수입니다.</p>
<h2 id="😒-첫-번째-풀이">😒 첫 번째 풀이</h2>
<pre><code class="language-JAVA">class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int index = 0; index &lt; n; index++){
          answer[index] = x * (index+1);
        }
        return answer;
    }
}</code></pre>
<p>별 거 아니네 하고 풀었는데
<img src="https://velog.velcdn.com/images/j_ie_j/post/75e231ce-92c1-4f48-aea0-c667bafdf76a/image.png" alt="">
어이가 없다.
왜지...?</p>
<pre><code>class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for(int index = 0; index &lt; n; index++){
          answer[index] = (long)x * (index+1);
        }
        return answer;
    }
}</code></pre><p>알고리즘 1단계를 풀면서 내가 놓쳤던 기본기를 다질 수 있어 좋다.
위 문제의 오답의 이유는 범위였다. 
문제에서 주어진 범위는 <code>long</code>이였으나 내가 <code>int</code>로 풀었기에 테스트케이스에서 몇 개가 오답이였던 것!!
범위설정을 다시 해주니 바로 정답이 나왔다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 짝지어 제거하기]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%9D%EC%A7%80%EC%96%B4-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%9D%EC%A7%80%EC%96%B4-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 11 Sep 2023 14:35:58 GMT</pubDate>
            <description><![CDATA[<p>문제 설명
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.</p>
<p>예를 들어, 문자열 S = baabaa 라면</p>
<p>b aa baa → bb aa → aa →</p>
<p>의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.</p>
<p>제한사항
문자열의 길이 : 1,000,000이하의 자연수
문자열은 모두 소문자로 이루어져 있습니다.</p>
<h2 id="🤔-첫-번째-풀이">🤔 첫 번째 풀이</h2>
<pre><code class="language-Java">import java.util.*;
//이런 문제는 stack을 이용하던가?
class Solution
{
    public int solution(String s)
    {
        Stack stack = new Stack&lt;&gt;();
        //스택이 비어있지 않고 맨 위에있는게 같음 넣나,,,?
        // foreach문 코테에서 기억 안나서 못썼는데 이제 앎!
        for(char c : s.toCharArray()) {
            if(!stack.isEmpty() &amp;&amp; stack.peek == c){
                stack.pop();
            }else{
                stack.push(c);
            }
            return stack.isEmpty ? 1: 0;
        }
}</code></pre>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/1aec3a1d-3d0e-41fc-adb9-292e437b2ed6/image.png" alt=""></p>
<p>이쯤 되면 다 때려치고 불닭볶음면이나 먹고싶어진다.</p>
<h2 id="👉-정답">👉 정답</h2>
<pre><code class="language-Java">import java.util.*;
//이런 문제는 stack을 이용하던가?
class Solution{
    public int solution(String s){
        Stack&lt;Character&gt; stack = new Stack&lt;&gt;();
        //스택이 비어있지 않고 맨 위에있는게 같음 넣나,,,?
        // foreach문 코테에서 기억 안나서 못썼는데 이제 앎!
        for(char c : s.toCharArray()) {
            if(!stack.isEmpty() &amp;&amp; stack.peek() == c){
                stack.pop();
            }else{
                stack.push(c);
            }
        }
            return stack.isEmpty()? 1: 0;
        }
    }
</code></pre>
<p><code>stack</code>의 제네릭을 설정해주었어야했다.
문제에서 주어진대로 괄호의 위치를 설정하였더니 가장 기본적인 괄호 실수가 너무 많았다.
실제 시험에서는 내가 보기 편하게 위치시키고 문제를 푸는 것 또한 실수를 줄이는 방법이 될 거 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 다음 큰 수]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EC%9D%8C-%ED%81%B0-%EC%88%98</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%8B%A4%EC%9D%8C-%ED%81%B0-%EC%88%98</guid>
            <pubDate>Mon, 11 Sep 2023 14:08:59 GMT</pubDate>
            <description><![CDATA[<p>자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.</p>
<p>조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.</p>
<p>자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.</p>
<p>제한 사항
n은 1,000,000 이하의 자연수 입니다.</p>
<h2 id="🤔-첫-번째-풀이">🤔 첫 번째 풀이</h2>
<pre><code class="language-Java">class Solution {
    public int solution(int n) {
        int answer = 0;

        //일단, 2진수로 바꿔야함
        String b = Integer.toBinaryString(n);
        System.out.println(b);
        //2진수에서 1의 갯수를 cnt해야함
        int cnt = 0;
        for(int i = 0; i &lt; b.length(); i++){
            if(b.charAt(i) == &#39;1&#39;) cnt++;
        }
        // 1의 갯수가 같으면서  n보다 큰 수를 찾아야함
        // 이거 1단계 맞아?
        while(true){
            //이진수는 String, 내가 하고싶은건 int연산...
            //n을 1씩 증가하면서 반복문 돌리자
            n++;
            String next = Integer.toBinaryString(n);
            int cnt1 = 0;
            for(int i = 0; i &lt; next.length();i++){
                if(next.charAt(i)==&#39;1&#39;){
                    cnt1++;
                }
            }
            if(cnt == cnt1){
                answer = n;
                break;
            }
        }
        return answer;
    }
}</code></pre>
<p>답은 맞았으나 시간초과가 떴다...
<img src="https://velog.velcdn.com/images/j_ie_j/post/291b7b4c-e5f4-46c3-b1da-6f9830328918/image.png" alt="">
이런 경우는 또 너무 오랜만이라 난감하다...
보아하니 겹치는 구문이 있어 함수로 나누면 어떨까하는 생각이 들었다. 
그러던 중 필요없는 출력문 발견 ㅎ</p>
<pre><code>class Solution {
    public int solution(int n) {
        int answer = 0;

        //일단, 2진수로 바꿔야함
        String b = Integer.toBinaryString(n);
        //2진수에서 1의 갯수를 cnt해야함
        int cnt = 0;
        for(int i = 0; i &lt; b.length(); i++){
            if(b.charAt(i) == &#39;1&#39;) cnt++;
        }
        // 1의 갯수가 같으면서  n보다 큰 수를 찾아야함
        // 이거 1단계 맞아?
        while(true){
            //이진수는 String, 내가 하고싶은건 int연산...
            n++;
            String next = Integer.toBinaryString(n);
            int cnt1 = 0;
            for(int i = 0; i &lt; next.length();i++){
                if(next.charAt(i)==&#39;1&#39;){
                    cnt1++;
                }
            }
            if(cnt == cnt1){
                answer = n;
                break;
            }
        }
        return answer;
    }
//     private static int toBinary(int n){

//     }
}
</code></pre><p><img src="https://velog.velcdn.com/images/j_ie_j/post/3109a353-51eb-4020-a452-863ec8d3337b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 자릿수 더하기]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%A6%BF%EC%88%98-%EB%8D%94%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%90%EB%A6%BF%EC%88%98-%EB%8D%94%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sun, 10 Sep 2023 15:43:12 GMT</pubDate>
            <description><![CDATA[<p>자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.</p>
<h2 id="🤔-첫-번째-풀이">🤔 첫 번째 풀이</h2>
<pre><code>import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        String s = Integer.toString(n);
        for(int i = 0; i &lt; s.length(); i++){
          int N = Integer.parseInt(s.charAt(i));
            answer+= N;
        }

        return answer;
    }
}</code></pre><p>뭐가,,,잘못이지 한참을 바라보았다.
찾아보니 <code>Integer.parseInt</code>이 메서드는 <code>String</code>을 <code>int</code>로 변환하는 메서드인데 나는 <code>charAt</code>를 사용하여 하나의 문자만 넘겨준 것이 문제였다.</p>
<h2 id="👉-나의-정답">👉 나의 정답</h2>
<pre><code>import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        String s = Integer.toString(n);
        for(int i = 0; i &lt; s.length(); i++){
          int N = Integer.parseInt(String.valueOf(s.charAt(i)));
            answer+= N;
        }

        return answer;
    }
}</code></pre><p>그래서 문자로 변환한 것을 문자 하나하나로 쪼갠 것을 다시 문자열로 만들어서 더해주는 방법을 사용하였다.
정답은 나왔지만 사라지지 않는 찝찝함에 다른 사람 코드를 한번 보았다.</p>
<h2 id="👍-내가-생각하는-best-정답">👍 내가 생각하는 Best 정답</h2>
<pre><code>import java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        while(true){
            answer+=n%10;
            if(n&lt;10)
                break;

            n=n/10;
        }

        return answer;
    }
}</code></pre><p>이 사람은 <code>while</code>문을 활용하여 n이 10보다 작을 때 까지 10으로 나눈 나머지를 answer에 더하는 방식을 사용하였다.</p>
<p>나는 <code>while</code>문을 잘 쓰는 사람이 참 멋져보인다.
나도 <code>while</code>문을 조금 더 활용하도록 노력해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 이진 변환 반복하기]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9D%B4%EC%A7%84-%EB%B3%80%ED%99%98-%EB%B0%98%EB%B3%B5%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9D%B4%EC%A7%84-%EB%B3%80%ED%99%98-%EB%B0%98%EB%B3%B5%ED%95%98%EA%B8%B0</guid>
            <pubDate>Sat, 09 Sep 2023 14:17:54 GMT</pubDate>
            <description><![CDATA[<p>0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.</p>
<p>x의 모든 0을 제거합니다.
x의 길이를 c라고 하면, x를 &quot;c를 2진법으로 표현한 문자열&quot;로 바꿉니다.
예를 들어, x = &quot;0111010&quot;이라면, x에 이진 변환을 가하면 x = &quot;0111010&quot; -&gt; &quot;1111&quot; -&gt; &quot;100&quot; 이 됩니다.</p>
<p>0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 &quot;1&quot;이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.</p>
<h2 id="🤔-첫번-째-풀이">🤔 첫번 째 풀이</h2>
<pre><code class="language-Java">class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        while(s.length() &gt; 1){
            int cnt = 0;
            for(int i = 0; i &lt; s.length(); i++){
                if(s.charAt(i) == 0){
                    answer[1]++;
                }else{
                    cnt++;
                }}

                s = Integer.toBinaryString(cnt); 
                answer[0]++;
        }
        return answer;
    }
}</code></pre>
<p>시간초과가 나왔다.
나는 바보다.</p>
<pre><code class="language-Java">class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        while(s.length() &gt; 1){
            int cnt = 0;
            for(int i = 0; i &lt; s.length(); i++){
                if(s.charAt(i) == &#39;0&#39;){
                    answer[1]++;
                }else{
                    cnt++;
                }}

                s = Integer.toBinaryString(cnt); 
                answer[0]++;
        }
        return answer;
    }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[프로그래머스] 나머지가 1이 되는 수 찾기]]></title>
            <link>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%82%98%EB%A8%B8%EC%A7%80%EA%B0%80-1%EC%9D%B4-%EB%90%98%EB%8A%94-%EC%88%98-%EC%B0%BE%EA%B8%B0</link>
            <guid>https://velog.io/@j_ie_j/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%82%98%EB%A8%B8%EC%A7%80%EA%B0%80-1%EC%9D%B4-%EB%90%98%EB%8A%94-%EC%88%98-%EC%B0%BE%EA%B8%B0</guid>
            <pubDate>Sat, 09 Sep 2023 13:47:51 GMT</pubDate>
            <description><![CDATA[<p>자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.</p>
<h3 id="🤔-첫-번째-풀이">🤔 첫 번째 풀이</h3>
<pre><code>
class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 2; i &lt; n; i++){
            if(n % i == 1){
                answer = i;
            }
        }
        return answer;
    }
}</code></pre><p>나는 옛날부터 break가 참 싫었다.</p>
<h3 id="👏-정답">👏 정답</h3>
<pre><code class="language-Java">
class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 2; i &lt; n; i++){
            if(n % i == 1){
                answer = i;
                break;
            }
        }
        return answer;
    }
}</code></pre>
<p><code>break</code>를 쓰지 않아 <code>answer</code>의 값이 반복문을 다 돌 때까지 변하게 된다. 
답은 나머지가 1이 되는 최소의 숫자를 찾는 것이기에 나머지가 처음으로 1이 되었을 때 <code>break</code>를 써줘야 한다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[코딩테스트]]></title>
            <link>https://velog.io/@j_ie_j/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8</link>
            <guid>https://velog.io/@j_ie_j/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8</guid>
            <pubDate>Sat, 09 Sep 2023 13:26:18 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>모두가 자소서 쓰며 코테시험볼때 알고리즘 공부하는 미친 취준생.
늦었다고 생각할때가 가장 늦은걸 알지만 더 이상 늦기 전에 한다. 알고리즘.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[SSAFY 생활 (싸피 1학기)]]></title>
            <link>https://velog.io/@j_ie_j/SSAFY-%EC%83%9D%ED%99%9C-%EC%8B%B8%ED%94%BC-1%ED%95%99%EA%B8%B0</link>
            <guid>https://velog.io/@j_ie_j/SSAFY-%EC%83%9D%ED%99%9C-%EC%8B%B8%ED%94%BC-1%ED%95%99%EA%B8%B0</guid>
            <pubDate>Wed, 03 May 2023 00:39:48 GMT</pubDate>
            <description><![CDATA[<h2 id="싸피생활-정말-오랜만">싸피생활 정말 오랜만</h2>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/18b1fa7e-22d9-4627-8f93-21be58a274d6/image.png" alt="">
먼저 자랑부터 하고 갈께요.
저 이번 월말 90점 받았어요!! 👏👏</p>
<hr>
<p>오늘은 싸피 1학기 동안 있었던 일들을 간단하게 정리하고자 합니다!</p>
<h3 id="👉-ssaftcial-지원-그리고-합격">👉 SSAFTcial 지원 그리고 합격</h3>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/50cae558-b50a-4d55-8011-f16d8faa163a/image.png" alt=""></p>
<p>SSAFYcial 은 사람들에게 <span style= "color : skyblue"><strong>SSAFY</strong></span>를 홍보하는 기자단 활동입니다.
다들 그런 로망 하나즈음 가지고 있잖아요. 학교 다니면서 막 방송부 하고, 인싸놀이 하고, 
제가 그런 로망 가지고 있었는데 학교 다닐때 세상 아싸였거든요. 
그 로망 <span style= "color : skyblue"><strong>SSAFY</strong></span>에서 이뤘습니다.
물론 인싸는 아니지만 소소하게 <span style= "color : skyblue"><strong>SSAFY</strong></span>생활을 YouTube에 올리고 있어요!</p>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/dc6a74cb-fd5e-4680-841e-9ee4c6a23f66/image.jpg" alt="">
유튭 검색창에 EAST 재2 라고 검색하면 제가 올린 영상을 보실 수 있습니다.</p>
<p>다들 한번 보러왕</p>
<blockquote>
<p>📹 <a href="https://www.youtube.com/watch?v=tli6-BrU5yY&amp;list=PLF34NxMMimMhnIEEM4QbIU7Vho9gnLBIq&amp;index=2">☀️SSAFY 출근길|대전 동구의 해는 유성구보다 일찍 뜬다.</a> </p>
</blockquote>
<h3 id="👉-고난의-알고리즘">👉 고난의 알고리즘</h3>
<p>블로그 맨 첫 장에 월말평가 90점 자랑하긴 했지만, 사실 과락의 고배도 마셨봤습니다..
바로 <strong>Alogorithm</strong>
알고리즘 시험 끝나고 우리반 교수님이 슬며시 다가와 &quot;재이씨, 많이 힘들죠?&quot; 라고 mm 보내셨읍니다...
네,,, 많이 힘들었어요.
아직 알고리즘 많이 부족하지만, 
<img src="https://velog.velcdn.com/images/j_ie_j/post/52514f80-3a7b-4c4c-840d-3040e95f93f0/image.png" alt="">
어느덧 <span style="color : gold"><strong>GOLD</strong></span>가 되었네요.
사실 Spring시작하면서 알고리즘 살짝 놓았는데 오늘부터 (2023.05.01) 다시 갓생 들어갑니다.</p>
<h3 id="👉-동료들과-함께하는-관통프로젝트">👉 동료들과 함께하는 관통프로젝트</h3>
<p>뭐라구요? 플젝 경험이 없어 취업이 망설여지신다구요?
뭐하세요 <span style= "color : skyblue"><strong>SSAFY</strong></span> 지원 안하고
싸피는 한 과목이 끝나면 책걸이 노노노
관통프로젝트를 진행합니다.</p>
<p>관통프로젝트 하면서 주간시험, 월말시험 준비하다보면 약간 피곤하고 힘들긴 하는데 하다보면 이거 왜 시키는지 알게되요. </p>
<p>내가 뭘 모르는지 확실해지거든요 ^^*</p>
<p>또 잘 준비하면 이만한 포토폴리오가 없습니다.</p>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/09ceca5e-abc3-47a4-a5df-a7f146886e06/image.jpg" alt=""></p>
<p>유튭에 작업할 때 듣기 좋은 playList만 알고리즘에 올라오는 이유.</p>
<p>관통프로젝트 준비물 =&gt; 음악 그리고 동료</p>
<h3 id="👉-그리고-번아웃">👉 그리고 번아웃</h3>
<p>뭐랄까 딱히 이룬 것이 없다는 것을 깨닫게 된 4월.
번아웃이 왔습니다..
<img src="https://velog.velcdn.com/images/j_ie_j/post/53ec85af-1aea-416c-8ee1-798b6a45115e/image.jpg" alt="">
나름 꾸준하게 올리던 공부타이머 못 올린지 너무 오래 되었네요.</p>
<p>다들 한번씩 겪는 거 같아요. 번아웃 (나만 그럴지도,,)</p>
<p>알고리즘 나름 열심히 공부하였지만, 시험만 보면 멘붕... 그렇게 알고리즘 주간을 지나고 나니,
괜히 뒤쳐지는 거 같고, 뒤쳐지니 따라가고자 무리하게 계획짜고, 계획 반도 못 이루면 다시 절망하고</p>
<pre><code>while(절망){
    system.out.println(&quot;나는 개똥벌레&quot;);
}</code></pre><p>거의 이 수준의 무한loop</p>
<p>그래서, 잠시 휴식을 가졌습니다.
<img src="https://velog.velcdn.com/images/j_ie_j/post/06290bf0-1a10-4b31-8e7b-8f73b9f5985e/image.jpg" alt=""></p>
<p>마침 사촌오빠가 해운대에서 결혼 한다길래 바다도 한 번 봐주고
컴퓨터 앞에서 가슴 마흔다섯일곱 번 팡팡 치고 다시 공부 한 결과</p>
<p><strong>spring 90 점</strong></p>
<p>약간의 휴식도 중요하다는 것을 깨달았습니다.</p>
<p>(물론 약간의 휴식 아니였음...)</p>
<hr>
<p>SSAFY의 1학기가 끝나가네요. 사실 아직 제가 새발자가 되어가고 있는지 개발자가 되어가고 있는지 잘 모르겠어요.
그래도 어떡하겠습니까, 들어온거 최선을 다해야죠!!
오늘 이 글을 쓰면서 다시 한번 생각하게 됩니다.
내가 SSAFY에 얼마나 진심이였는지, 얼마나 간절했는지!!
그때 그 초심 가지고 다시 열심히 달려볼께요! 
모두모두 지켜봐 주시고, 아직 <span style= "color : skyblue"><strong>SSAFY</strong></span> 망설이시는 분들은 얼른얼른 지원하세요.
이거 손해보는 장사 절대 아닙니다.</p>
<p>다음엔 더 알찬 기사로 찾아오겠습니다.</p>
<p><span style= "color : skyblue"><strong>SSAFYcial</strong></span> *<em>김재이 이였습니다. *</em></p>
<p><img src="https://velog.velcdn.com/images/j_ie_j/post/570ca274-2332-469b-81fe-8ed171692c4d/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>