<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>spinner_98.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 04 Jul 2023 11:53:20 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>spinner_98.log</title>
            <url>https://images.velog.io/images/spinner_98/profile/c355af06-f44e-421c-9d3d-0a2be397eb8c/KakaoTalk_20220211_171908815.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. spinner_98.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/spinner_98" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[자료구조 - PART01 연결리스트]]></title>
            <link>https://velog.io/@spinner_98/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-PART01-%EC%97%B0%EA%B2%B0%EB%A6%AC%EC%8A%A4%ED%8A%B8</link>
            <guid>https://velog.io/@spinner_98/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-PART01-%EC%97%B0%EA%B2%B0%EB%A6%AC%EC%8A%A4%ED%8A%B8</guid>
            <pubDate>Tue, 04 Jul 2023 11:53:20 GMT</pubDate>
            <description><![CDATA[<p>오늘은 자료구조 PART01 연결리스트에 관해 알아봤습니다.😀</p>
<blockquote>
<h2 id="목차">목차</h2>
</blockquote>
<ol>
<li>연결리스트의 개념</li>
<li>연결리스트의 종류
2-1 단순연결리스트
2-2 원형 연결리스트
2-3 이중 연결리스트
2-4 이중 원형 연결리스트</li>
</ol>
<br>

<h3 id="1-연결리스트의-개념">1. 연결리스트의 개념</h3>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/4a1c8eb4-d2ea-4b44-8d2c-5e8c0c349d64/image.png" alt=""></p>
<h4 id="정의">정의</h4>
<p>① 연결리스트는 첫 번째 노드를 가리키는 <strong>헤드 포인터가 필요</strong>하다</p>
<p>② 포인터가 다음 노드의 위치를 가리키는 구조로, 전체 노드는 <strong>논리적으로 서로 연결</strong>된 상태</p>
<p>③ 마지막 노드는 노드의 포이터를 <strong>Nil or Null</strong>이라 한다</p>
<p>④ 각각 노드는 기억장소에서 서로 이웃할 필요 없다 = <strong>물리적으로 연속적x</strong></p>
<p>⑤ 링크필드로 인한 기억공간이 많이 필요하며, 알고리즘 구현이 복잡하고 <strong>탐색시, 비효율적이다</strong>.</p>
<h4 id="노드란🧐">노드란?🧐</h4>
<p>자기자신을 참조하는 구조체를 이용해 정의한다 (<strong>data필드+포인터 저장된 link필드</strong>)</p>
<h3 id="2-연결리스트의-종류">2. 연결리스트의 종류</h3>
<h4 id="2-1-단순연결-리스트">2-1. 단순연결 리스트</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/0a3c7ebb-b077-411e-87db-aac6b99b0540/image.png" alt="">
① 거꾸로 갈 수 있는 방법은 없다. 탐색시간은 포인터를 이용해 순차적, <strong>시간복잡도 O(n)</strong>
② 노드를 삽입, 삭제의 경우 <strong>선행 노드를 알고 있어야한다.</strong>
③ 특정 노드 액세스를 위해서는 <strong>처음 노드부터 검색한다.</strong></p>
<h4 id="단순연결-리스트-삽입">단순연결 리스트 삽입</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/a3f802a6-e2d1-440e-9d5b-4d464aece193/image.png" alt=""></p>
<h4 id="코드">코드</h4>
<pre><code class="language-cs">procedure INSERT(Head,item,Y)
/* Y: 삽입할 노드 , X : 삽입 후, Y의 선행 노드 */
call GETNODE(Y)
/* Y노드 생성 */
DATA(Y) ← item
/*Y노드에 데이터 값 저장 */
if(Head=nill) then Head ← Y
LINK(Y) ← nill
/* Head가 NULL인 경우, Head가 Y를 가리키도록하라 */
else LINK(Y) ← LINK(X)
    LINK(X) ← Y
/* 마지막 노드는 항상 NULL */
end INSERT</code></pre>
<pre><code class="language-cs">void insert(listPointer *first, listpointer x)
{
listPointer temp;
MALLOC(temp, sizeof(*temp));
temp →data =50;
if(*first){
temp → link = x → link;
x→ link = temp;
}
else{
temp →link =NULL;
*first =temp;
}
}

</code></pre>
<h4 id="단순연결-리스트-삭제">단순연결 리스트 삭제</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/c007e406-616c-4b5c-a8d0-4a7505d400b6/image.png" alt=""></p>
<h4 id="코드-1">코드</h4>
<pre><code class="language-cs">procedure DELETE(X,Y,Head)
/* Y: 삭제할 노드 X: Y의 선행노드*/
if(Head=nil) call List-empty

if(X=nil) then Head ← LINK(Head)
/* 첫번째 노드 삭제 */
else LINK(X) ←LINK(Y)
/*중간 노드 삭제*/
call RET(Y)
end DELTE</code></pre>
<pre><code class="language-cs">void delete(listPinter *first,listPinter trail,listPinter node){
/* 리스트로부터 노드를 삭제, trail은 삭제될 x의 선행 노드, first는 리스트의 시작 */
if(rail)
    trail →link = x →link;
else
    *first= (*first) → link;
    free(x);
}</code></pre>
<h4 id="2-2-원형-연결리스트">2-2. 원형 연결리스트</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/6222e331-c03e-4eca-ab07-b63837659792/image.png" alt=""></p>
<h4 id="정의-1">정의</h4>
<p>① 마지막 노드가 null link 대신 리스트의 처음 노드의 포인트를 가진다.
② 마지막 노드를 변경하기 위해서는 마지막을 찾을 때 까지 <strong>모든 노드 탐색 **
③ head가 마지막을 가리킬 경우, **길이에 상관없이 첫 번째 앞 마지막 노드 위에 일정한 시간으로 노드를 삽입하 수 있다.</strong></p>
<h4 id="장단점">장단점</h4>
<p>장점 </p>
<ul>
<li>어느 한 노드로부터 다른 모든 노드에 접근 가능</li>
<li>임의의 노드 검색 시 현재노드 부터 검색 가능</li>
</ul>
<p>단점</p>
<ul>
<li>노드 검색 시 무한루프에 빠질 수 있다.</li>
<li>무한루프 문제는 head 포인터를 두어 방지 가능하다.</li>
</ul>
<h4 id="노드삽입">노드삽입</h4>
<h4 id="--앞에-삽입">- 앞에 삽입</h4>
<pre><code class="language-cs">procedure INSERT(T,Y) //T는 마지막 노드를 가리킨다.
    if T = nill then T ← Y  // 리스트가 빈 상태로 T가 Y를 지시
    LINK(Y)← T //Y는 자기자신을 가리킨다.
    else LINK(Y) ← LINK(T)// 새 리스트가 첫 번째 노드를 지시
    LINK(T)←Y // 마지막 노드의 링크필드가 새 노드를 지시
end INSERT</code></pre>
<p>① 원형 리스트가 빈 상태로 T가 새로운 노드 Y를 가리킨다 
② 새 노드의 Y의 링크 필드가 첫 번째 노드를 가리키게한다
③ 마지막 노드의 링크 필드가 새로운 노드 Y를 가리키게 한다.</p>
<pre><code class="language-cs">void insertFront(listPinter last, listPPinter node){
if(!(*last)){ //공백일 경우, last가 새로운 항목을 가리키도록 한다.
    *last =node;
    node → link=node;
    }
    else{// 공백이 아닌 경우, 리스트 앞에 새로운 항목 삽입
    node → link = (*last) →link;
    (*last)→link=node;
    }
 }</code></pre>
<h4 id="2-3-이중-연결리스트">2-3. 이중 연결리스트</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/8de958b9-eb33-4d1b-a276-d565ec9c299d/image.png" alt=""></p>
<h4 id="정의-2">정의</h4>
<p>① 원형리스트의 뒤로 순화할 수 없다는 점과 삭제의 번거로움의 단점을 보완했다
② 어떤 노드에 대해 다음 노드 뿐만 아니라 전 노드까지 알수 있도록 하여 양방향 탐색 가능
<img src="https://velog.velcdn.com/images/spinner_98/post/2f6243f9-37a4-4cc4-9f33-a1d750de4ec5/image.png" alt=""></p>
<p>③각 노드에 좌 우측2개의 포인터가 있으며, 각 포인터는 각각 좌우 노드를 가리키는 형태이다
④운영체제의 동적 메모리 관리에 적합하다.</p>
<ul>
<li>X = RLINK(LLINK(X)) = LLINK(RLINK(X))</li>
</ul>
<h4 id="장점">장점</h4>
<ul>
<li>양방향 검색이 가능해 속도가 빠르고** 선행노드 검색이 쉽다**</li>
<li>한 노드의 포인터 파괴시, <strong>복구 가능</strong></li>
<li>리스트 운행에 따른 <strong>알고리즘이 간단하다</strong><h4 id="단점">단점</h4>
</li>
<li>두 개의 링크를 저장할 <strong>기억공간이 낭비</strong>된다.</li>
</ul>
<h4 id="2-4-이중-원형-연결리스트">2-4. 이중 원형 연결리스트</h4>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/4a6f2702-7950-4cbd-9014-3f53c808f690/image.png" alt=""></p>
<h4 id="정의-3">정의</h4>
<p>마지막 노드의 RLINK는 처음 노드를 가리키게 하고 처음 노드의 LLINK는 마지막 노드를 가리킨다</p>
<h4 id="장점-1">장점</h4>
<ul>
<li>마지막 노드까지 데이터 저장 시, 빈 노드를 찾아 입력할 수 있는 융통성 부여</li>
<li>무한루프에 빠지는 것을 방지<h4 id="단점-1">단점</h4>
</li>
<li>알고리즘 구현의 복잡성</li>
</ul>
<h4 id="head노드란🧐">Head노드란?🧐</h4>
<p> 데이터를 가지지 않고, 삽입 삭제 코드를 간단하게 할 목적으로 만들어진 노드 </p>
<p><strong>가지고 있는 내용</strong></p>
<ul>
<li>첫 번째 노드 포인터</li>
<li>리스트 길이</li>
<li>마지막 노드 포인터</li>
<li>참조계수(자신을 참조하고 있는 포인터 수)<br>
####  오늘은 여기까지 🙂

</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring 프로젝트 생성]]></title>
            <link>https://velog.io/@spinner_98/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</link>
            <guid>https://velog.io/@spinner_98/Spring-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1</guid>
            <pubDate>Wed, 13 Apr 2022 05:30:19 GMT</pubDate>
            <description><![CDATA[<p>😀 오늘은 인프런 스프링 입문 강의를 통해 프로젝트 생성을 했습니다.</p>
<br>

<blockquote>
<h2 id="목차">목차</h2>
</blockquote>
<ol>
<li>기본준비
<a href="#1-1-java-11-%EC%84%A4%EC%B9%98">1-1 java 11설치</a>
<a href="#1-2-IntelliJ-IDEA-%EC%84%A4%EC%B9%98">1-2 IntelliJ IDEA 설치</a>
<a href="#1-3-H2-%EC%84%A4%EC%B9%98">1-3 H2 설치</a></li>
<li>프로젝트 생성
<a href="#2-1-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%8A%A4%ED%83%80%ED%84%B0-%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1">2-1 스프링부트 스타터 사이트를 이용해 프로젝트 생성</a>
<a href="#2-2-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-web%EC%9D%84-%ED%86%B5%ED%95%B4-%ED%99%95%EC%9D%B8">2-2 프로젝트 생성 web 통해 확인</a></li>
<li>버그
<a href="#open%EC%9D%84-%EB%88%84%EB%A5%B8-%ED%9B%84,-tag-mismatch-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%82%98%EC%98%AC-%EA%B2%BD%EC%9A%B0">3-1 open을 누른 후, tag mismatch 에러가 나올 경우</a>
<a href="#%EB%B2%84%EA%B7%B8-%EB%A9%94%EC%84%B8%EC%A7%80%EA%B0%80-%EB%9C%B0-%EA%B2%BD%EC%9A%B0,-gradle-%EC%84%A4%EC%A0%95%EC%9D%84-%EC%95%84%EB%9E%98%EC%99%80-%EA%B0%99%EC%9D%B4-%ED%95%B4%EC%A4%80%EB%8B%A4.">3-2 로컬호스트 에러가 나올 경우</a></li>
<li>알아가는 정보
<a href="#4.-%EC%95%8C%EC%95%84%EA%B0%80%EB%8A%94-%EC%A0%95%EB%B3%B4">알아가는 정보</a></li>
</ol>
<br>

<h2 id="1-기본준비">1. 기본준비</h2>
<h3 id="1-1-java-11-설치">1-1 Java 11 설치</h3>
<p><a href="https://www.oracle.com/kr/java/technologies/javase/jdk11-archive-downloads.html,%22java11%22">java 11SE kit 설치</a> 
<img src="https://velog.velcdn.com/images/spinner_98/post/d9bc35c0-7ab9-40c8-a069-bbb570b6e869/image.png" alt=""></p>
<ul>
<li>환경설정 Path 경로 지정(설정이 안되었을 경우)
시스템 속성 &gt; 고급 &gt; 환경변수 &gt; 시스템변수 &gt; path &gt; javapath경로 추가</li>
</ul>
<p>👉 확인 법
cmd창에서 javac 입력하거나 java -version 입력</p>
<br>

<h3 id="1-2--intellij-idea-설치">1-2  IntelliJ IDEA 설치</h3>
<p> <a href="https://www.jetbrains.com/ko-kr/idea/download/#section=windows,%22IntelliJ%22">IntelliJ 다운로드</a></p>
<p>** Community window.exe 선택 다운로드**</p>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/f47d067d-dc17-4136-8237-7d4d039584b1/image.png" alt=""></p>
<p>① Create Dsktop Shorcut : 윈도우 OS 환경 확인
② Update PATH Variable : 환경변수 자동 추가
③ Update Context Menu : 프로젝트 폴더 열기
④ Create Associations : 자바 사용(확장자)</p>
 <br>

<h3 id="1-3-h2-설치">1-3 H2 설치</h3>
<p><a href="https://www.h2database.com/html/download-archive.html,%22h2%22">h2 다운로드</a>
<img src="https://velog.velcdn.com/images/spinner_98/post/034801e9-a3cd-46f6-a2b9-e1717df76dac/image.png" alt="">
👉 1.4.200 설치!
최근 버전 설치시, 일부 기능 정상작동 불가</p>
<br>

<h2 id="2-프로젝트-생성">2. 프로젝트 생성</h2>
<br>

<h3 id="2-1-스프링부트-스타터-사이트를-이용해-프로젝트-생성">2-1 스프링부트 스타터 사이트를 이용해 프로젝트 생성</h3>
<p><a href="https://start.spring.io,%22spring">스프링 부트 스타터</a>
<img src="https://velog.velcdn.com/images/spinner_98/post/6f872b86-8d09-4845-9dd6-5b33bf529bcc/image.png" alt=""></p>
<p><strong>Dependencies에 Spring web, Thymeleaf 추가!</strong>😀
<strong>Generate 클릭하여 파일 다운로드</strong></p>
<p>다운로드한 파일을 원하는 폴더 위치에 옮긴 후, 압축 풀기
IntelliJ에서 Open or Import 선택</p>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/741e679e-1ff8-4688-9fc8-0d4f759990d3/image.png" alt=""></p>
<br>

<h3 id="2-2-프로젝트-생성-web을-통해-확인">2-2 프로젝트 생성 web을 통해 확인</h3>
<p>✋ build가 완료되었다면 src / main과 test 존재해야한다.</p>
<p>main파일 실행 
웹브라우저에서 localhost:8080 입력
결과는 아래와 같아야한다.
<img src="https://velog.velcdn.com/images/spinner_98/post/da00576e-96af-4792-b153-ad43249916a9/image.png" alt="">
<br></p>
<h2 id="3-버그">3. 버그</h2>
<h3 id="open을-누른-후-tag-mismatch-에러가-나올-경우">open을 누른 후, tag mismatch 에러가 나올 경우</h3>
<h4 id="경우-1-java-버전11-이외-다른-상위-버전이-설치된-경우">경우 1. Java 버전11 이외 다른 상위 버전이 설치된 경우</h4>
<p>파일 &gt; 프로젝트 구조 선택
아래와 같이 설정한 후 확인 -&gt; 적용 
<img src="https://velog.velcdn.com/images/spinner_98/post/9cc459a4-8ca7-4883-97e3-ce7ce689c843/image.png" alt=""></p>
<br>

<h4 id="경우-2-embed-tomcat-관련-문구가-나올-경우-tomcat-관련-설치가-안되어있을-경우">경우 2. embed tomcat 관련 문구가 나올 경우, tomcat 관련 설치가 안되어있을 경우</h4>
<p>파일 &gt; 설정 &gt; 플러그인
아래와 같이 검색 후, 설치한다.
<img src="https://velog.velcdn.com/images/spinner_98/post/4c658261-78f6-489f-b8fd-c6750897b319/image.png" alt=""></p>
<h3 id="버그-메세지가-뜰-경우-gradle-설정을-아래와-같이-해준다">버그 메세지가 뜰 경우, gradle 설정을 아래와 같이 해준다.</h3>
<p><img src="https://velog.velcdn.com/images/spinner_98/post/e9d5a7f9-6bd4-4eb1-a394-d827b3398b39/image.png" alt=""></p>
<br>


<h2 id="4-알아가는-정보">4. 알아가는 정보</h2>
<h4 id="buildgradle">build.gradle</h4>
<pre><code>sourceCompatibility = &#39;11&#39; //java 11과 호환됨(맞춤)
repositories {
    mavenCentral() //open 된 싸이트 dependencies를 해당 싸이트에서 다운
}
dependencies {
    implementation &#39;org.springframework.boot:spring-boot-starter-thymeleaf&#39;
    implementation &#39;org.springframework.boot:spring-boot-starter-web&#39;
    testImplementation (&#39;org.springframework.boot:spring-boot-starter-test&#39;){
        exclude group : &#39;org.junit.vintage&#39;, module:&#39;junit-vintage-engine&#39;
    }

}</code></pre>]]></description>
        </item>
    </channel>
</rss>