<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ds</title>
        <link>https://velog.io/</link>
        <description>What do you think?</description>
        <lastBuildDate>Tue, 30 Jan 2024 07:10:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>ds</title>
            <url>https://velog.velcdn.com/images/d_s/profile/5ba05b46-103e-4f0e-9f41-fafcc4289964/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. ds. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/d_s" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[백준1446번: 지름길 풀이 (Python)]]></title>
            <link>https://velog.io/@d_s/%EB%B0%B1%EC%A4%801446%EB%B2%88-%EC%A7%80%EB%A6%84%EA%B8%B8-%ED%92%80%EC%9D%B4-Python</link>
            <guid>https://velog.io/@d_s/%EB%B0%B1%EC%A4%801446%EB%B2%88-%EC%A7%80%EB%A6%84%EA%B8%B8-%ED%92%80%EC%9D%B4-Python</guid>
            <pubDate>Tue, 30 Jan 2024 07:10:54 GMT</pubDate>
            <description><![CDATA[<h3 id="❗문제❗">❗문제❗</h3>
<p><a href="https://www.acmicpc.net/problem/1446">백준 1446번: 지름길</a></p>
<h2 id="🤔생각의-흐름">🤔생각의 흐름</h2>
<ol>
<li>N의 최대값이 12이므로 완전탐색, 백트랙킹도 가능하겠다.</li>
<li>선택하는 것에 따라서 이후의 값들이 영향을 받는 것 같은데, 패턴을 한 번 찾아볼까?</li>
<li>도착 위치가 D보다 크거나 지름길을 이용했을 때 더 오래걸리는 입력들은 무시하고 생각해보자.</li>
<li>출발위치와 도착위치가 같은 입력들은 그 중에서 지름길의 길이가 짧은 입력만 받아들이자.</li>
<li>정리된 입력값들을 쭉 나열해보니, 이전 인덱스의 값을 이용하여서 이후 인덱스의 값을 결정하네? DP로 접근해야겠다.</li>
</ol>
<h2 id="🧻풀이">🧻풀이</h2>
<p><a href="https://github.com/tfer2442/myAlgorithm/blob/master/%EB%B0%B1%EC%A4%80/Silver/1446.%E2%80%85%EC%A7%80%EB%A6%84%EA%B8%B8/%EC%A7%80%EB%A6%84%EA%B8%B8.py">백준 1446번: 지름길 풀이 코드</a></p>
<ol>
<li>딕셔너리를 이용하여 (출발점, 도착점)을 key로 하고 지름길 길이를 value로 입력받기.</li>
<li>1 도착위치 - 출발위치 &lt;= 지름길 입력 제외</li>
<li>2 도착위치 &gt; D 입력 제외</li>
<li>3 딕셔너리에 값을 넣을 때 같은 key가 존재한다면, 지름길 길이가 작은 값으로 업데이트</li>
<li>딕셔너리에서 출발점과 도착점을 추출하여 중복없는 리스트로 만들기</li>
<li>1 출발점인 0과 도착점인 D는 항상 존재해야 하므로, 리스트에 추가</li>
<li>위에서 만든 리스트와 같은 크기의 리스트를 하나 생성</li>
<li>지점이 저장된 리스트의 값을 차례대로 읽으며, 생성한 리스트의 값을 업데이트한다.</li>
<li>1 이전 지점의 값 + (현재 지점 위치 - 이전 지점 위치)와 현재 지점을 도착지점으로 하는 값들을 딕셔너리에서 찾아서 모두 비교 한 후 가장 작은 값을 리스트에 업데이트 한다.</li>
</ol>
<p>말이 어려우니, 예제 입력 3번을 기준으로 설명해보겠다.
N = 8, D = 900
(0, 10) : 9
(80, 190): 100
(50, 70): 15
(160, 180): 14
(140, 160): 14
(450, 900): 0
이 값들만 입력으로 받게 된다.</p>
<p>그리고, 출발점과 도착점으로 리스트를 만든다.
[0, 10, 50, 70, 80, 140, 160, 180, 190, 450, 900]
그리고, 새로 리스트를 하나 생성하여 지점까지의 최소 값을 담는다.</p>
<p>예를 들어, 70까지 가기 위해서 얼마만큼의 거리를 이동해야 하는가를 보자.
(0, 70) + 0, (10, 70) + 10에 해당하는 값, (50, 70) + 50에 해당하는 값, 70-50 + 50에 해당하는 값 이 값들을 비교하여 가장 작은 값을 새로운 리스트의 70에 해당하는 3번째 index에 값을 업데이트 한다.
(딕셔너리에 (0, 70), (10, 70), (50, 70) 값 중 존재하지 않는 것들은 계산하지 않는다. 70-50 + 50에 해당하는 값은 무조건 존재하기 때문에, 딕셔너리에 모두다 없다면, 50이 가지고 있는 값에서 70-50을 더해준 값이 업데이트 된다.)</p>
<p>이렇게 값을 끝까지 업데이트하면
[0, 9, 49, 64, 74, 134, 148, 162, 172, 432, 432]가 된다.
리스트의 마지막 값이 정답이 된다.</p>
<h2 id="📔후기">📔후기</h2>
<p>문제 이름부터 지름길이었고, 최단 거리를 찾는 문제여서 다익스트라나 BFS를 썼으면 쉽게 풀었을 것 같다. 그래프로 생각하지 못하여서 DP를 이용해서 풀었는데, 괜히 어렵게 생각 한 것 같다. 최단 거리를 찾는 문제에 익숙해질 필요를 느꼈다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA] 자바 실행환경]]></title>
            <link>https://velog.io/@d_s/JAVA-%EC%9E%90%EB%B0%94-%EC%8B%A4%ED%96%89%ED%99%98%EA%B2%BD</link>
            <guid>https://velog.io/@d_s/JAVA-%EC%9E%90%EB%B0%94-%EC%8B%A4%ED%96%89%ED%99%98%EA%B2%BD</guid>
            <pubDate>Fri, 15 Sep 2023 14:17:02 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/d_s/post/935768d2-9ebb-4ad2-b1d3-e49101ff90ef/image.png" alt=""></p>
<p>자바를 다시 공부하면서 새롭게 알게된 것들과 자세히 알지 못했던 지식들을 기록을 남겨보려고 합니다.</p>
<h1 id="ide란">IDE란?</h1>
<p>IDE란 통합 개발 환경(Integrated Development Environment)으로 코딩, 디버그, 컴파일, 배포 등을 하나의 프로그램에서 처리 할 수 있도록 하는 소프트웨어이다. </p>
<h1 id="intellij-vs-eclipse">Intellij vs Eclipse</h1>
<p>인텔리제이와 이클립스는 자바의 IDE로 대표되는 것들인데, 이 둘을 비교한 자료를 정리해보았습니다.</p>
<ul>
<li>인텔리제이는 유료, 이클립스는 무료</li>
<li>인텔리제이가 이클립스에 비해 빠르다</li>
<li>사용자 경험에서 인텔리제이가 앞선다.</li>
<li>전자정부 프레임워크는 이클립스 개발 환경을 공식 지원한다.</li>
<li>인텔리제이가 자바, 스프링 부트 버전 향상에 대한 업데이트가 빠르다.</li>
<li>이클립스는 한 화면에 여러 프로젝트를 띄울 수 있지만, 인텔리제이는 한 화면에 하나의 프로젝트만 띄울 수 있다.</li>
</ul>
<h1 id="jdk-jre-jvm">JDK, JRE, JVM?</h1>
<h3 id="jdk란">JDK란?</h3>
<p>JDK란 Java Development Kit로 자바소스 파일을 만들고 javac 명령어로 소스 파일을 바이트 코드로 컴파일 할 수 있게 해준다. JRE를 포함하고 있다.</p>
<h3 id="jre란">JRE란?</h3>
<p>JRE란 Java Runtime Environment의 약자로 자바로 만들어진 프로그램을 실행시키는데 필요한 라이브러리, API, JVM이 포함되어 있다.</p>
<h3 id="jvm이란">JVM이란?</h3>
<p>JVM은 Java Virtual Machine으로 바이트 코드 파일을 완전한 기계어로 번역하고 실행시킨다. 그리고, Garbage Collection(GC)이 여기에 포함되는데 이로 인해 더 이상 필요하지 않은 객체를 식별하고 메모리에서 해제하여 프로그램의 메모리 사용을 최적화하는 역할을 자동으로 하게 해준다. 자바 가상 머신은 운영체제별로 다르게 설치된다.</p>
<h1 id="jar">JAR?</h1>
<p>JAR란 Java Archive로 .jar 확장자를 가지는 파일이다. 자바 클래스 파일과 관련 리소스들을 하나의 파일로 모아서 배포하기 위한 아카이브.</p>
<h1 id="자바-폴더들의-의미">자바 폴더들의 의미</h1>
<h3 id="src-source">src (Source)</h3>
<p>이 디렉토리는 소스 코드 파일을 포함하는 곳입니다. 주로 자바 소스 코드 파일들이 여기에 저장됩니다.</p>
<h3 id="bin-binary">bin (Binary)</h3>
<p>컴파일된 자바 클래스 파일들이 저장되는 디렉토리입니다. 소스 코드 파일을 컴파일하면 이 디렉토리에 클래스 파일들이 생성됩니다.</p>
<h3 id="lib-library">lib (Library)</h3>
<p>외부 라이브러리 또는 JAR(Java Archive) 파일들을 포함하는 디렉토리입니다. 이 라이브러리들은 프로젝트에서 사용될 수 있고, 클래스 패스(classpath)에 추가하여 프로젝트에서 접근할 수 있습니다.</p>
<h3 id="build">build</h3>
<p>프로젝트를 빌드한 결과물, 즉 실행 가능한 JAR 파일이나 WAR 파일 등이 저장되는 디렉토리입니다.</p>
<h3 id="resources">resources</h3>
<p>소스 코드 이외의 자원 파일들을 저장하는 곳입니다. 예를 들어, 이미지, 설정 파일, 텍스트 파일 등이 여기에 포함될 수 있습니다</p>
<h1 id="자바-프로그램-실행방법">자바 프로그램 실행방법</h1>
<ol>
<li><p>Java 개발 환경 설치 확인:
먼저 리눅스 시스템에 Java 개발 환경(JDK - Java Development Kit)이 설치되어 있는지 확인해야 합니다. 터미널을 열고 다음 명령어를 실행하여 JDK 버전을 확인합니다:</p>
<pre><code class="language-bash">java -version</code></pre>
</li>
<li><p>소스 코드 컴파일:
자바 소스 코드를 실행하기 전에 먼저 컴파일해야 합니다.</p>
<pre><code class="language-bash">javac hello.java</code></pre>
<p>이 명령은 컴파일된 클래스 파일(hello.class)을 생성합니다.</p>
</li>
<li><p>자바 클래스 실행:
컴파일된 클래스 파일을 실행하려면 다음 명령어를 사용합니다.</p>
<pre><code class="language-bash">java hello</code></pre>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JPA] INSERT Duplicate key error 해결]]></title>
            <link>https://velog.io/@d_s/JPA-INSERT-Duplicate-key-error-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@d_s/JPA-INSERT-Duplicate-key-error-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Sat, 18 Feb 2023 12:25:29 GMT</pubDate>
            <description><![CDATA[<p>스프링에서 entity를 만들고 Heidi SQL에서 쿼리문을 날렸는데, 아래와 같은 오류가 발생했다.
<img src="https://velog.velcdn.com/images/d_s/post/c0fbc596-12f5-4391-b042-d13a254f4452/image.PNG" alt="">
 PRIMARY KEY가 중복이 되어서 오류가 발생하였다는 것인데, 아래와 같은 코드 때문에 오류가 난 것이다.
<img src="https://velog.velcdn.com/images/d_s/post/27426797-aa57-48cd-a6b9-a049e21ca323/image.PNG" alt="">@GeneratedValue란 JPA에서 Entity의 Primary Key를 생성하여 주는 기능인데, strategy로 네 가지 전략을 사용할 수 있다.
여기서는 strategy = GenerationType.IDENTITY 전략을 사용하였는데, 이 것이 Duplicate key error의 원인이었다.</p>
<p>GenerationType.IDENTITY는 기본 키 생성을 데이터베이스에 위임하여 DB에서 PK를 AUTO_INCREMENT 한다.
<img src="https://velog.velcdn.com/images/d_s/post/5b998752-bced-43f1-a9c8-16d1abf64e9b/image.PNG" alt=""> AUTO_INCREMENT를 할 때 PK가 1부터 시작하여 1씩 올라가는데, PK에 직접 0을 INSERT 하니 AUTO_INCREMENT와 꼬인 것이다.
PK에 0을 입력한 첫 번째 줄을 지우면 Duplicate error가 해결된다.</p>
]]></description>
        </item>
    </channel>
</rss>