<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>carwoo_125.log</title>
        <link>https://velog.io/</link>
        <description>코린이입니다.</description>
        <lastBuildDate>Fri, 12 Jan 2024 00:35:15 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>carwoo_125.log</title>
            <url>https://velog.velcdn.com/images/carwoo_125/profile/be79dbd7-35ab-4fe0-84ff-71dd3a5bbbc4/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. carwoo_125.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/carwoo_125" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[쿠키(Cookie)와 세션(Session) (01.12)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%BF%A0%ED%82%A4Cookie%EC%99%80-%EC%84%B8%EC%85%98Session-01.12</link>
            <guid>https://velog.io/@carwoo_125/%EC%BF%A0%ED%82%A4Cookie%EC%99%80-%EC%84%B8%EC%85%98Session-01.12</guid>
            <pubDate>Fri, 12 Jan 2024 00:35:15 GMT</pubDate>
            <description><![CDATA[<h2 id="쿠키와-세션의-사용이유">쿠키와 세션의 사용이유</h2>
<h3 id="http프로토콜의-특징이자-약점을-보완하기위해-사용합니다">HTTP프로토콜의 특징이자 약점을 보완하기위해 사용합니다.</h3>
<h4 id="http프로토콜의-특징">HTTP프로토콜의 특징</h4>
<h4 id="1-connectionless-프로토콜-비연결-지향">1. Connectionless 프로토콜 (비연결 지향)</h4>
<ul>
<li>클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리방식이다.<h4 id="2-stateless-프로토콜">2. Stateless 프로토콜</h4>
</li>
<li>커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.</li>
<li>클라이언트와 첫 번째 통신에서 데이터를 주고받았다 해도, 두 번째 통신에서 이전 데이터를 유지하지 않는다.</li>
</ul>
<p>이렇게 HTTP의 Stateless 라는 특징 때문에 데이터를 유지해야 하는 경우에 사용하기위해 쿠키와 세션이 등장한 것이다</p>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/b4d27a07-9e4a-4d3f-a5b7-217afe5adc86/image.png" alt=""></p>
<br>

<h4 id="사용-이유">사용 이유</h4>
<ul>
<li>서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 한 번 통신이 되면 끊어진다.</li>
<li>따라서 서버는 클라이언트가 누구인지 계속 인증을 해줘야 한다. 하지만 그것은 매우 귀찮고 번거로운 일이다.</li>
<li>그런 번거로움을 해결하는 방법이 바로 쿠키와 세션이다.</li>
</ul>
<br>

<h2 id="쿠키cookie">쿠키(Cookie)</h2>
<h3 id="쿠키의-동작-순서">쿠키의 동작 순서</h3>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/899053d3-75c4-4883-98f6-549bca92c038/image.png" alt=""></p>
<ul>
<li>이런 식으로 쿠키는 요청이 들어오면 쿠키도 같이 만들어서 클라이언트에 쿠키 저장소에 user 정보를 저장 하였다가 다시 쿠키 저장소에서 조회하여 쿠키를 포함한 HTTP요청을 날리면 그의 따른 데이터를 반환한다. </li>
</ul>
<h2 id="세션session">세션(Session)</h2>
<h3 id="세션의-동작-순서">세션의 동작 순서</h3>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/62d059a2-d648-4246-98d1-b437ed7126ab/image.png" alt=""></p>
<ul>
<li>세션은 쿠키와 다르게 클라이언트의 저장소가 아니라 서버에 세션으로 저장하여 세션id값에 따른 데이터 조회를 가능하게 한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[MVC 패턴 (01.11)]]></title>
            <link>https://velog.io/@carwoo_125/MVC-%ED%8C%A8%ED%84%B4-01.11</link>
            <guid>https://velog.io/@carwoo_125/MVC-%ED%8C%A8%ED%84%B4-01.11</guid>
            <pubDate>Thu, 11 Jan 2024 15:13:37 GMT</pubDate>
            <description><![CDATA[<h2 id="mvc-패턴">MVC 패턴</h2>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/21b9e977-e4a2-4e51-8b7c-38d1ce299702/image.png" alt=""></p>
<h3 id="mvc-패턴의-등장-배경">MVC 패턴의 등장 배경</h3>
<h3 id="너무-많은-역할">너무 많은 역할</h3>
<p>한 곳에서 화면을 보여주는 역할(뷰 렌더링)과 비즈니스 로직을 모두 처리하게 되면 너무 많은 역할을 하게 되고, 결과적으로 유지보수가 어려워진다. 비지니스 로직의 변경이 있어도 해당 코드를 변경해야 하고, UI의 변경에도 해당 코드를 변경해야 한다.</p>
<h3 id="변경의-라이프-사이클">변경의 라이프 사이클</h3>
<p>사실은 비즈니스 로직과 UI를 수정하는 일은 라이프 사이클이 다르다. 정말 큰 변경이 있다면 두 개다 변경이 되야겠지만, 대부분 각각 다르게 발생할 가능성이 매우 높고 서로에게 영향을 주지 않는다. 이렇게 다른 라이프 사이클을 가진 두 컴포넌트를 하나의 코드로 관리하는 것은 유지보수하기 좋지 않다.</p>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/ecefab66-f995-4382-8b0c-5dbc3f6136ac/image.png" alt=""></p>
<h2 id="m-v-그리고-c">M, V 그리고 C</h2>
<ul>
<li><p><strong>모델</strong>: 뷰에 출력할 데이터를 담아둔다. 뷰가 필요한 데이터를 모두 모델에 담아서 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있다.</p>
</li>
<li><p><strong>뷰</strong>: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. 여기서는 HTML을 생성하는 부분을 말한다.</p>
</li>
<li><p><strong>컨트롤러</strong>: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.</p>
</li>
</ul>
<h2 id="mvc의-장점">MVC의 장점</h2>
<h3 id="1-컴포넌트의-명확한-역할-분리로-인해-서로간의-결합도를-낮출-수-있다">1. 컴포넌트의 명확한 역할 분리로 인해 서로간의 결합도를 낮출 수 있다.</h3>
<p>과거에는 뷰에서 비즈니스 로직이 들어있는 등, 뷰에서 모델의 일까지 같이 하는 경우도 있었다. 하지만 MVC 패턴을 사용하면 뷰와 모델의 역할을 분리함으로써 서로 간의 결합도를 낮춰줄 수 있다.</p>
<h3 id="2-서비스를-유지-보수하고-테스트하는데-용이해진다">2. 서비스를 유지 보수하고 테스트하는데 용이해진다.</h3>
<p>변경이 필요하거나 오류가 난 부분을 보다 쉽게 파악하여 수정할 수 있고, 해당 컴포넌트만 수정하기 때문에 다른 부분에 덜 영향을 가게해서 유지보수가 좋아진다. 또한, 여러 컴포넌트로 나눠졌기 때문에 테스트할 때에도 뭉쳐진 코드를 테스트하는게 아닌 개별적으로 분리된 코드를 테스트하기 때문에 테스트에 용이하다.</p>
<h2 id="배운점">배운점</h2>
<h4 id="1-mvc의-정의-모델-뷰-컨트롤러는-알고-있었지만-mvc의-등장배경이나-장점-등은-정확히-알-수-없었는데-정리를-하면서-더-잘-알게-되었습니다">1. MVC의 정의 모델, 뷰, 컨트롤러는 알고 있었지만 MVC의 등장배경이나 장점 등은 정확히 알 수 없었는데 정리를 하면서 더 잘 알게 되었습니다.</h4>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTP Method(01.10)]]></title>
            <link>https://velog.io/@carwoo_125/HTTP-Method01.10</link>
            <guid>https://velog.io/@carwoo_125/HTTP-Method01.10</guid>
            <pubDate>Wed, 10 Jan 2024 16:10:05 GMT</pubDate>
            <description><![CDATA[<h2 id="http-method의-종류">HTTP Method의 종류</h2>
<p><code>RFC 9110</code>이 정의하는 HTTP Method의 종류는 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/e0365ef0-9f00-4dec-8ba8-95d8d13573a4/image.png" alt=""></p>
<h3 id="우리가-자주-쓰는-http-method">우리가 자주 쓰는 HTTP Method</h3>
<ul>
<li>GET: 리소스 조회</li>
<li>POST: 요청 데이터 처리, 주로 등록에 사용</li>
<li>PUT: 리소스를 <strong>대체,</strong> 해당 리소스가 없으면 생성</li>
<li>PATCH: 리소스 부분 변경</li>
<li>DELETE: 리소스 삭제</li>
</ul>
<h3 id="각-http-메서드에-대해서-제대로-알아보자">각 HTTP 메서드에 대해서 제대로 알아보자</h3>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/4f74da2e-b703-4d1e-9c81-fcbbe528ff7f/image.png" alt=""></p>
<br>

<p><img src="https://velog.velcdn.com/images/carwoo_125/post/065405d1-abd6-4dd4-ac20-d10d2bbe5538/image.png" alt=""></p>
<p>배운점 : PUT 메소드는 있던 리소스를 덮어버린다고 생각 하면 되고 PATCH 메소드는 일부분만 수정하고 싶을 때 사용하는 경우 가 많다고 알게 되었다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DB] 기본키 / 외래키(01.09)]]></title>
            <link>https://velog.io/@carwoo_125/DB-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A401.09</link>
            <guid>https://velog.io/@carwoo_125/DB-%EA%B8%B0%EB%B3%B8%ED%82%A4-%EC%99%B8%EB%9E%98%ED%82%A401.09</guid>
            <pubDate>Tue, 09 Jan 2024 14:51:25 GMT</pubDate>
            <description><![CDATA[<h3 id="기본키primary-key">기본키(Primary key)</h3>
<ul>
<li><h4 id="기본키는-후보키-중에서-행을-식별하기-위해-특별히-선택된-키를-말한다">기본키는 후보키 중에서 행을 식별하기 위해 특별히 선택된 키를 말한다.</h4>
<ul>
<li><h4 id="기본키는-중복될-수-없으며-null값이-올-수-없다">기본키는 중복될 수 없으며, NULL값이 올 수 없다.</h4>
</li>
<li><h4 id="유일성과-최소성을-만족해야-한다">유일성과 최소성을 만족해야 한다.</h4>
</li>
<li><h4 id="unique는-한-테이블의-여러-필드에-설정할-수-있다">UNIQUE는 한 테이블의 여러 필드에 설정할 수 있다.</h4>
</li>
<li><h4 id="primary-key는-테이블당-오직-하나의-필드에만-설정할-수-있다">PRIMARY KEY는 테이블당 오직 하나의 필드에만 설정할 수 있다.</h4>
</li>
<li><h4 id="primary-key-제약-조건은-테이블의-데이터를-쉽고-빠르게-찾도록-도와주는-역할을-한다">PRIMARY KEY 제약 조건은 테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 한다.</h4>
<br>

</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/517cded3-6b15-4706-aaf4-e69c07440f32/image.png" alt=""></p>
<h3 id="외래키foreign-key">외래키(Foreign Key)</h3>
<ul>
<li><h4 id="한-테이블이-다른-테이블의-기본키를-참조해서-테이블-간의-관계를-만드는-것을-의미한다">한 테이블이 다른 테이블의 기본키를 참조해서 테이블 간의 관계를 만드는 것을 의미한다.</h4>
</li>
<li><h4 id="어떤-테이블의-식별자를-끌어와서-그것에-대한-정보를-또-추가하는-것">어떤 테이블의 식별자를 끌어와서 그것에 대한 정보를 또 추가하는 것</h4>
</li>
<li><h4 id="취미-테이블의-학번은-학생-테이블의-학번을-참조해서-학생마다-취미가-무엇인지를-나타내고-있으므로-외래키이다">취미 테이블의 [학번]은 학생 테이블의 [학번]을 참조해서 학생마다 취미가 무엇인지를 나타내고 있으므로 외래키이다.</h4>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/carwoo_125/post/fc6d05ec-2835-4aa2-b6a7-e95a7b4fa1e9/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[RDBMS의 제1 정규화(01.08)]]></title>
            <link>https://velog.io/@carwoo_125/RDBMS%EC%9D%98-%EC%A0%9C1-%EC%A0%95%EA%B7%9C%ED%99%9401.08</link>
            <guid>https://velog.io/@carwoo_125/RDBMS%EC%9D%98-%EC%A0%9C1-%EC%A0%95%EA%B7%9C%ED%99%9401.08</guid>
            <pubDate>Mon, 08 Jan 2024 12:56:55 GMT</pubDate>
            <description><![CDATA[<h3 id="정규화-normalization">정규화 (Normalization)</h3>
<ul>
<li><p>정규화는 테이블 간에 데이터의 중복 저장을 방지하기 위함</p>
</li>
<li><p>무결성(Integrity) 유지 가능</p>
</li>
<li><p>DB 의 저장 용량 ↓</p>
</li>
<li><p>테이블을 분해하는 방식에 따라 정규화 단계가 달라진다</p>
</li>
</ul>
<h3 id="제1-정규화">제1 정규화</h3>
<h4 id="1-정의">1. 정의</h4>
<p>-테이블의 컬럼이 <code>원자값(Atomic Value, 하나의 값)</code>을 갖도록 테이블을 분해하는 것</p>
<ul>
<li>부수적인 데이터를 저장하기 위해 ,기본 데이터가 중복되는 경우</li>
</ul>
<h4 id="2-예시">2. 예시</h4>
<p>고객 취미 테이블이 있을 때.</p>
<p>추신수와 박세리는 여러 개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못한다.
<img src="https://velog.velcdn.com/images/carwoo_125/post/2d0fa4f5-9188-4d15-be0e-f96094ab5229/image.png" alt=""></p>
<p>이를 제1 정규화 해서 분해한다면?
<img src="https://velog.velcdn.com/images/carwoo_125/post/44aade82-0214-4a2c-b3ab-280ff16af21f/image.png" alt="">
이렇게 제1 정규화 할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[RDBMS와 NoSQL의 장점 과 단점(01.05)]]></title>
            <link>https://velog.io/@carwoo_125/RDBMS%EC%99%80-NoSQL%EC%9D%98-%EC%9E%A5%EC%A0%90-%EA%B3%BC-%EB%8B%A8%EC%A0%9001.05</link>
            <guid>https://velog.io/@carwoo_125/RDBMS%EC%99%80-NoSQL%EC%9D%98-%EC%9E%A5%EC%A0%90-%EA%B3%BC-%EB%8B%A8%EC%A0%9001.05</guid>
            <pubDate>Fri, 05 Jan 2024 13:23:27 GMT</pubDate>
            <description><![CDATA[<h3 id="rdbms">RDBMS</h3>
<br>

<h4 id="장점-">장점 :</h4>
<blockquote>
<h4 id="1-관계형-데이터-베이스로-스키마에-따라-데이터를-저장하기-때문에-명확한-데이터-구조를-보장합니다">1. 관계형 데이터 베이스로 스키마에 따라 데이터를 저장하기 때문에 명확한 데이터 구조를 보장합니다.</h4>
</blockquote>
<h4 id="2-데이터-중복이-없습니다">2. 데이터 중복이 없습니다.</h4>
<h4 id="단점">단점:</h4>
<blockquote>
<h4 id="1-성능향상을-위해서는-scale-up서버의-사양을-업그레이드하여-시스템을-확장하는-것만을-지원합니다">1. 성능향상을 위해서는 Scale-up(서버의 사양을 업그레이드하여 시스템을 확장하는 것)만을 지원합니다.</h4>
</blockquote>
<h4 id="2-스키마로-인해-데이터가-유연하지-못하다-나중에-스키마가-변경-될-경우-번거롭고-어렵다">2. 스키마로 인해 데이터가 유연하지 못하다. 나중에 스키마가 변경 될 경우 번거롭고 어렵다.</h4>
<h3 id="nosql">NoSQL</h3>
<h4 id="장점--1">장점 :</h4>
<blockquote>
<h4 id="1-반면에-nosql은-스키마없기-때문에-자유로운-데이터-구조를-가지게-됩니다">1. 반면에 NoSQL은 스키마없기 때문에 자유로운 데이터 구조를 가지게 됩니다.</h4>
</blockquote>
<h4 id="2-scale-out이-가능하다는-장점을-이용해막대한-데이터-저장해야되는-시스템-적합니다">2. Scale-out이 가능하다는 장점을 이용해막대한 데이터 저장해야되는 시스템 적합니다.</h4>
<h4 id="단점-">단점 :</h4>
<blockquote>
</blockquote>
<h4 id="1-단점-데이터-중복으로-인해서-중복된-모든-데이터에-변경사항을-적용해야합니다">1. 단점 데이터 중복으로 인해서 중복된 모든 데이터에 변경사항을 적용해야합니다.</h4>
<h4 id="2-rdbms와-반대로-명확한-데이터-구조를-보장하지-않으며-데이터-구조-결정이-어려울-수-있습니다">2. RDBMS와 반대로 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정이 어려울 수 있습니다.</h4>
<ul>
<li>배운점 : RDBMS와 NoSQL에 대해 차이점과 장점, 단점을 알 수있었고 어떤 프로젝트이냐(프로젝트 시스템 규모?)에 따라 다른 DBMS와 SQL을 쓸 수 있다는 것을 알 수 있었습니다.  </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘(01.04)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9801.04</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9801.04</guid>
            <pubDate>Thu, 04 Jan 2024 14:01:42 GMT</pubDate>
            <description><![CDATA[<h4 id="입출력-예">입출력 예)</h4>
<p>&amp;nbsp&amp;nbsps    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspskip&amp;nbsp&amp;nbsp    index    &amp;nbsp&amp;nbsp result
&quot;aukks&quot;    &amp;nbsp&amp;nbsp&amp;nbsp&quot;wbqd&quot;&amp;nbsp&amp;nbsp    5&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    &quot;happy&quot;
<br></p>
<ul>
<li>문자열 s 를 index 만큼 이동한뒤(a-b-c-d-e-f)반환하는 것 하지만 skip에 포함될 경우 skip하여 a-b-c-d-e-f-g-h가 되어서 h가 반환된다.<br>

</li>
</ul>
<pre><code>class Solution {
    public String solution(String s, String skip, int index) {
        String answer = &quot;&quot;;
        for(int i=0; i&lt;s.length(); i++){
          char c = s.charAt(i);
              for(int j=0; j&lt;index; j++){
                  c+=1;  
                  if(skip.contains(String.valueOf(c))){j--;}
                   if(c&gt;&#39;z&#39;){c=&#39;a&#39;;}
              }
            answer+=c;
        }
        return answer;
    }
}</code></pre><ul>
<li>배운점 문자형을 문자열로 변환할때 String.valueof함수와 toString 함수를 쓸수 있다는 것을 배웠도 문자형에 숫자를 더하면 그만큼 알파벳 순서가 이동된다는 것을 배움</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[KPT 회고 (6조)]]></title>
            <link>https://velog.io/@carwoo_125/KPT-%ED%9A%8C%EA%B3%A0-6%EC%A1%B0</link>
            <guid>https://velog.io/@carwoo_125/KPT-%ED%9A%8C%EA%B3%A0-6%EC%A1%B0</guid>
            <pubDate>Wed, 03 Jan 2024 11:30:58 GMT</pubDate>
            <description><![CDATA[<h2 id="6ts-kpt-회고">(6TS) KPT 회고</h2>
<ul>
<li><p>팀장 : 김민석
K : 내 실력이 모자라서 도움이 안되는 걸 알지만 뭐라도 해보려고 했던 점
P : CRUD마저도 혼자 구현하지 못하는 내 처참한 현재 상황
T : 짬나는 시간을 활용해 계속 공부해서 조금이라도 1인분을 할 수 있도록 노력하기..</p>
</li>
<li><p>팀원 : 임상훈
K : 서로 역할 분담을 잘해서 프로젝트 진행이 수월했다
P : 깃이나 추가 기능구현을 시도하지 못했다.
T : 다음 최종프로젝트 때는 꼭 추가 기능 구현을 최대한 많이 구현하고 깃을 더 공부해야겠다.</p>
</li>
<li><p>팀원 : 김한준
K : 팀원들과 협업하며 코드를 완성 해 나갔던 것과 코드에 무엇이 부족하고 수정해야 부분이 뭔지 계속 고민했던 점
P : 소셜로그인을 postman 테스트 환경으로 구축하지 못한 점과 보드에서 초대된 유저를 찾아올 때 로직이 깔끔하지 못한 것
T : 소셜로그인쪽을 좀 더 공부하고, CI/CD 라던가 아키텍처같은 부분도 신경써야겠다.</p>
</li>
<li><p>팀원 : 차우빈
K : 맡은 부분을 최대한 열심히 하고 힘든 부분은 팀원들과 적극적으로 소통하고 협력하여 진행하는 부분이 좋았습니다
P : REDME 파일 등 시각화된 자료구현이 부족하다.
T : REDME 파일에 ERD 연관관계(아키텍처 정리, 배포 결과 사진)같은 것을 자세히 구현면서 시각화된 자료 첨부 해야할 것 같다고 생각하게 되었습니다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘(01.02)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9801.02</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9801.02</guid>
            <pubDate>Tue, 02 Jan 2024 12:08:44 GMT</pubDate>
            <description><![CDATA[<h4 id="입출력-----nbspnbspnbsp----예">입출력     &amp;nbsp&amp;nbsp&amp;nbsp    예)</h4>
<p>n    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspk    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspresult
10    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp3    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp[3, 6, 9]
15&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    5    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp[5, 10, 15]</p>
<pre><code>class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n/k];
        int j=0;
        for(int i=k; i&lt;=n; i++){
            if(i%k==0){
                answer[j] =i; 
                    j++;
            }
        }
        return answer;
    }
}</code></pre><p>배운점 : 배열을 만들 때 크기를 정해주지 않으면 아웃오브바운드 인덱스 에러가 나기 때문에 꼭 크기를 정해주고 예상 답보다 1개정도 큰 크기로 만들면 좋다는 것을 배웠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.29)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.29</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.29</guid>
            <pubDate>Mon, 01 Jan 2024 23:40:33 GMT</pubDate>
            <description><![CDATA[<h3 id="입출력-예">입출력 예</h3>
<p>my_string    is_prefix    result
&quot;banana&quot;    &quot;ban&quot;    1
&quot;banana&quot;    &quot;nan&quot;    0
&quot;banana&quot;    &quot;abcd&quot;    0
&quot;banana&quot;    &quot;bananan&quot;    0</p>
<pre><code>class Solution {
    public int solution(String my_string, String is_prefix) {
        int answer = 0;
       if(my_string.length() &gt;= is_prefix.length()){
           if(is_prefix.equals(my_string.substring(0, is_prefix.length()))){
               answer++;
           }
       }
        return answer;
    }
}</code></pre><ul>
<li>배운점 : 접두사이기 때문에 일단 전체 문자열 길이보다 작아야해서 조건문을 달아주고 substring함수를 이용하여 첫 번째 문자부터 주어진 문자열의 길이까지 잘라서 비교하여 같으면 1을 리턴하면 되는 것 이었다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘(12.28)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.28</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.28</guid>
            <pubDate>Thu, 28 Dec 2023 16:07:14 GMT</pubDate>
            <description><![CDATA[<h3 id="문제설명">문제설명</h3>
<ul>
<li>효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.</li>
</ul>
<ul>
<li><p>입출력 예
n    &amp;nbsp&amp;nbsp&amp;nbspresult
4    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp5
3    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp3</p>
</li>
<li><p>완성 코드</p>
<pre><code>class Solution {
  public long solution(int n) {
    long[] dp = new long[n+2];
      dp[1] = 1;
      dp[2] = 2;

      for(int i=3; i&lt;=n; i++){
          dp[i]=(dp[i-1]+dp[i-2])% 1234567;
      }

      return dp[n];
  }
}</code></pre></li>
</ul>
<p>배운점 : 이 문제는 피보나치 수열 문제였는데 전에 2개의 방법의 개수를 더한 값이 현재의 칸의 방법의 개수인 것이다.
그래서 구현을 i의 값을 3부터 시작하여서 미리 배열에 1의 값과 2의 값을 넣어준뒤 i-1, i-2의 원소를 더한값을 넣어주는 면 되는 것을 배웠다. 그리고 n의 값이 너무 커지면 안되기 때문에 1234567을 나눈 나머지의 값을 구현 하였다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘(12.27)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.27</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.27</guid>
            <pubDate>Thu, 28 Dec 2023 00:08:09 GMT</pubDate>
            <description><![CDATA[<ul>
<li><h4 id="문제설명-">문제설명 :</h4>
</li>
</ul>
<ol>
<li>문자열 my_string과 정수 s, e가 매개변수로 주어질 때, my_string에서 인덱스 s부터 인덱스 e까지를 뒤집은 문자열을 return 하는 solution 함수를 작성해 주세요.</li>
</ol>
<ul>
<li>예제 : 
my_string    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsps    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspe    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp result
&quot;Progra21Sremm3&quot;    &amp;nbsp&amp;nbsp6    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp12    &amp;nbsp&amp;nbsp&amp;nbsp&quot;ProgrammerS123&quot;
&quot;Stanley1yelnatS&quot;    &amp;nbsp&amp;nbsp&amp;nbsp4    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp10    &amp;nbsp&amp;nbsp&amp;nbsp&quot;Stanley1yelnatS&quot;</li>
</ul>
<pre><code>class Solution {
    public String solution(String my_string, int s, int e) {
        String answer = my_string.substring(s,e+1);

        //뒤집어서 다른 변수에 저장한다

        String reversedStr = &quot;&quot;;
        for(int i=answer.length()-1; i&gt;=0; i--){
            reversedStr += answer.charAt(i);
        }

        //원본에다 뒤집은 걸 대체한다
        my_string = my_string.replaceAll(answer, reversedStr);
        return my_string;
    }
}</code></pre><p>배운점 : 이 문제는 뒤집어서 저장한 부분을 replaceAll()이라는 함수로 바꿔 넣으면 되는 문제 였는데 replaceAll()이라는 함수에 대해 더 잘 알게 된것같다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.26)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.26</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.26</guid>
            <pubDate>Wed, 27 Dec 2023 00:06:16 GMT</pubDate>
            <description><![CDATA[<h3 id="문제-설명">문제 설명</h3>
<br>

<p>문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다.</p>
<p>배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해 주세요.</p>
<br>

<pre><code>class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        int j=0;
        int a=0;
        for(int i=0; i&lt;intStrs.length; i++){
            if(k&lt;Integer.parseInt(intStrs[i].substring(s,(l+s)))){
                j++;
            }
        }
        int[] answer = new int[j];
        for(int i=0; i&lt;intStrs.length; i++){
            if(k&lt;Integer.parseInt(intStrs[i].substring(s,(l+s)))){
                answer[a] = Integer.parseInt(intStrs[i].substring(s,(l+s)));
                a++;
            }
        }

        return answer;
    }
}</code></pre><ul>
<li>배운점 :  주어진 배열의 숫자의 타입이 문자열이기 때문에 substring을 써서 자르고 Integer.parseInt를 이용하여 풀면 간단한 문제 였다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-a1hj042u</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-a1hj042u</guid>
            <pubDate>Thu, 21 Dec 2023 16:06:05 GMT</pubDate>
            <description><![CDATA[<h3 id="문제-설명">문제 설명</h3>
<h4 id="단어-s의-가운데-글자를-반환하는-함수-solution을-만들어-보세요-단어의-길이가-짝수라면-가운데-두글자를-반환하면-됩니다">단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.</h4>
<h4 id="제한사항">제한사항</h4>
<h4 id="s는-길이가-1-이상-100이하인-스트링입니다">s는 길이가 1 이상, 100이하인 스트링입니다.</h4>
<h4 id="입출력-예">입출력 예</h4>
<p>&amp;nbsp&amp;nbsp&amp;nbsps    &amp;nbsp &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspreturn
&quot;abcde&quot;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp    &quot;c&quot;
&quot;qwer&quot;    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&quot;we&quot;</p>
<pre><code>class Solution {
    public String solution(String s) {
        String answer = &quot;&quot;;
            if(s.length()%2==0){
                answer += s.charAt(s.length()/2-1);
                answer += s.charAt(s.length()/2);
            }else{
                answer += s.charAt(s.length()/2);
            }

        return answer;
    }
}</code></pre><ul>
<li>배운점 : substing을 이용한 풀이가 있었지만 위에 풀이처럼 짝수 일 때와 홀수 일때를  잘 나누어서 풀면 간단한 문제였다.(charAt을 이용하여)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.20)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.20-pl2cw3tn</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.20-pl2cw3tn</guid>
            <pubDate>Wed, 20 Dec 2023 12:04:06 GMT</pubDate>
            <description><![CDATA[<h3 id="알고리즘-스터디-때-배운-내용을-정리-해봤다">알고리즘 스터디 때 배운 내용을 정리 해봤다.</h3>
<br>

<p>x    s를 왼쪽으로 x칸만큼 회전    올바른 괄호 문자열? 
0    &quot;[]&quot;()&amp;nbsp{}    O
1    &quot;](){}[&quot;    X
2    &quot;(){}[]&quot;    O
3    &quot;){}[](&quot;    X
4    &quot;{}<a href=""></a>&quot;    O
5    &quot;}<a href=""></a>{&quot;    X</p>
<pre><code>import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
        // 괄호는 열고 닫히는 특성
        // boolean
        // 오해
        // 0, 1 만약에 이거를 다 돌고 끝났을 때
        // 0으로 끝나면 정상
        // 1로 끝나면 비정상
        // 비정상 &lt; 0 &gt; 비정상
        String[] sStrArr = s.split(&quot;&quot;);
        List&lt;String&gt; sList = new ArrayList&lt;&gt;();
        for (int i = 0; i &lt; sStrArr.length; i++) {
            sList.add(sStrArr[i]);
        }
        for (int i = 0; i &lt; sList.size()-1; i++) {
            int small = 0;
            int middle = 0;
            int large = 0;
            for(int j = 0; j &lt; sList.size(); j++) {
                if (sList.get(j).equals(&quot;(&quot;)) {
                    small++;
                } else if (sList.get(j).equals(&quot;{&quot;)) {
                    middle++;
                } else if (sList.get(j).equals(&quot;[&quot;)) {
                    large++;
                }
                if (sList.get(j).equals(&quot;)&quot;)) {
                    small--;
                } else if (sList.get(j).equals(&quot;}&quot;)) {
                    middle--;
                } else if (sList.get(j).equals(&quot;]&quot;)) {
                    large--;
                }
                // 소중대 중 하나라도 0이하로 떨어졌다면?
                if (small &lt; 0 || middle &lt; 0 || large &lt; 0) {
                    break;
                }
            }
            if (small == 0 &amp;&amp; middle == 0 &amp;&amp; large == 0) {
                answer++;
            }
            // 회전 로직
            String tmp = sList.get(0);
            sList.remove(0);
            sList.add(tmp);
        }
        return answer;
    }
}</code></pre><ul>
<li>처음 이 문제를 풀었읋 때는 모든 경우의 수를 다 적을 생각이었지만 위에 코드처럼 열리고 닫히는것을 개수를 세서 풀었으나 14번 째 에서 틀려버렸다.</li>
</ul>
<br>

<ul>
<li>힌트를 본 후</li>
</ul>
<pre><code>class Solution {
    public int solution(String s) {
        int answer = 0;
        String s2 = s;
        String s3 = s;
        for(int i = 0; i &lt; s.length()-1; i++) {
            s3 = s2;
            for(int j = 0; j &lt; s.length(); j++) {
                s3 = s3.replace(&quot;()&quot;, &quot;&quot;);
                s3 = s3.replace(&quot;{}&quot;, &quot;&quot;);
                s3 = s3.replace(&quot;[]&quot;, &quot;&quot;);
            }
            if(s3.length() == 0) {
                answer++;
            }
            s2 = s2.substring(1) + s2.charAt(0);
        }
        return answer;
    }
}</code></pre><ul>
<li>replace 함수를 이용하여 간단하게 풀 수 있었던 문제였다... 여기서 배운것은 문자열의 값을 substring과  charAt을 이용해 자르고 이어 붙일 수 있다는 것이다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 12.20]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.20</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.20</guid>
            <pubDate>Tue, 19 Dec 2023 23:48:14 GMT</pubDate>
            <description><![CDATA[<p>arr  &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp return
[4,3,2,1]     &amp;nbsp &amp;nbsp[4,3,2]</p>
<p>[10]     &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp [-1]</p>
<pre><code>class Solution {
    public int[] solution(int[] arr) {
        if (arr.length==1) {
            int[] answer_one = {-1};
            return answer_one;
        }
        int[] answer = new int[arr.length-1];

        int min = arr[0];
        for (int i=0; i&lt;arr.length; i++){
            min = Math.min(min, arr[i]); // 함수 추가한 부분
        }
        int answer_num = 0;
        for (int j=0; j&lt; arr.length; j++){
            if (arr[j]==min){
                continue;
            }
                answer[answer_num++] = arr[j];
        }
        return answer;
    }
}</code></pre><ul>
<li>배운점 : 처음 코드는 최소값을 직접 하나씩 비교해 가며 구했었는데 그러다 보니 코드가 좀 복잡 했었다. 그래서 풀고 난 뒤 Math 함수가 있다는 것을 알고 적용 시켜 다시풀어 함수를 알고 모르는 것에 따라 코드의 복잡도나 가독성이 천차만별이라는 것을 배웠다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.18)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.18</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.18</guid>
            <pubDate>Mon, 18 Dec 2023 23:52:01 GMT</pubDate>
            <description><![CDATA[<h4 id="--입출력-예--">- 입출력 예) -</h4>
<p>numbers    &amp;nbsp &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspresult
[1,2,3,4,6,7,8,0]    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp14
[5,8,4,0,6,7,9]    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp6</p>
<h3 id="--처음-풀었던-코드--">- 처음 풀었던 코드 -</h3>
<pre><code>import java.util.*;
class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int[] sum = {0,1,2,3,4,5,6,7,8,9};

        for(int i = 0; i&lt; sum.length; i++){
            for(int j=0; j&lt; numbers.length; j++){
                if(sum[i] == numbers[j]){
                    sum[i] -= numbers[j];
                }
            }
            answer += sum[i];
        }
        return answer;
    }
}</code></pre><br>

<ul>
<li>처음에는 배열을 하나 만들어서 0~9값을 모두 더하여 만들어 보았다.</li>
</ul>
<h2 id="--간단하게-푼-코드--">- 간단하게 푼 코드 -</h2>
<pre><code>class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        int sum = 0;
        for(int i=0; i&lt;numbers.length; i++){
            sum += numbers[i];
        }
        return answer = 45-sum;
    }
}</code></pre><br>

<ul>
<li>배운점 : 사실 간단하게 풀려면 이렇게 0~9를 모두 던한값에서 주어진 배열의 값을 모두 빼주면 된다. 사람의 생각에 따라라 코드가 정말 간단해 질 수 도있다는 것읋 배웠다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘(12.14)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.14</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%9812.14</guid>
            <pubDate>Thu, 14 Dec 2023 23:57:34 GMT</pubDate>
            <description><![CDATA[<p>phone_number      &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp return
&quot;01033334444&quot;     &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp&quot;<strong>***</strong>4444&quot;
&quot;027778888&quot;     &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp &amp;nbsp&quot;*****8888&quot;</p>
<pre><code>class Solution {
    public String solution(String phone_number) {
        String answer = &quot;&quot;;
        int number;
        number = phone_number.length();
        for(int i=0; i&lt;number-4; i++){
            answer+=&quot;*&quot;;
        }
        answer += phone_number.substring(number-4);
        return answer;
    }
}</code></pre><ul>
<li>배운점 : 처음에는 별부분을 치환해줄려고 했으나 삭제하고 넣는 것이 간단하여 바꾸게 되었다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.13)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.13</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.13</guid>
            <pubDate>Wed, 13 Dec 2023 23:42:20 GMT</pubDate>
            <description><![CDATA[<p>absolutes    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbspsigns         &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&nbsp;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  result
[4,7,12]    &amp;nbsp&amp;nbsp&amp;nbsp[true,false,true]    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp9
[1,2,3]    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp[false,false,true]    &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp0</p>
<pre><code>class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for(int i=0; i&lt;absolutes.length; i++){
            if(signs[i]){
                answer += absolutes[i];
            }
            else{
                answer += (-1*absolutes[i]);
            }
        }
        return answer;
    }
}</code></pre><ul>
<li><p>이 문제는 signs라는 불리언 값에 따라 음 양을 정하고 배열 안에 있는 값을 모두 더하는 코드 이다.</p>
</li>
<li><p>배운점 : 처음에는 signs안에 있는 값을 else if  문으로 하려 했으나 else문으로 하면 간단하게 만들 수 있다는  것을 알게 되어서 바꾸게 되었다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[오늘의 알고리즘 (12.12)]]></title>
            <link>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.12</link>
            <guid>https://velog.io/@carwoo_125/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-12.12</guid>
            <pubDate>Tue, 12 Dec 2023 12:53:05 GMT</pubDate>
            <description><![CDATA[<ul>
<li>str이 &quot;1234&quot;이면 1234를 반환하고, &quot;-1234&quot;이면 -1234를 반환하면 됩니다.</li>
<li>str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.</li>
</ul>
<pre><code>import java.util.*;
class Solution {
    public int solution(String s) {
        int answer = 0;
            return answer = Integer.parseInt(s);
    }
}</code></pre><ul>
<li>처음에는 IF문을 써서 equals함수를 이용해 풀었지만 사실 스트링(문자열)을 숫자형으로 바꾸기만 하면 되는 코드이기 때문에 
더욱 간단하게 풀 수 있었다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>