<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>black-pepper.log</title>
        <link>https://velog.io/</link>
        <description>백엔드 주니어 개발자입니다:D 저만 알기 아까운 정보를 정리해둡니다.</description>
        <lastBuildDate>Thu, 10 Aug 2023 12:31:52 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>black-pepper.log</title>
            <url>https://velog.velcdn.com/images/black-pepper/profile/24fac9af-013f-4bb7-af79-987b9f5e404b/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. black-pepper.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/black-pepper" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[코틀린-스프링 시작하기]]></title>
            <link>https://velog.io/@black-pepper/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@black-pepper/%EC%BD%94%ED%8B%80%EB%A6%B0-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Thu, 10 Aug 2023 12:31:52 GMT</pubDate>
            <description><![CDATA[<p>자료 찾기가 쉽지 않아서 정리:3</p>
<p><img src="https://velog.velcdn.com/images/black-pepper/post/4cb1d76a-ebb8-4c5a-be24-7cd2d5bacef7/image.png" alt="">
<a href="https://start.spring.io/">https://start.spring.io/</a> 에서
Project, Language를 Kotln으로 설정,
Dependencies에 Spring Web, JPA, DB Driver, Dev Tools를 설정</p>
<p><img src="https://velog.velcdn.com/images/black-pepper/post/8a6f4c0d-d5ce-4b50-9935-3c40f76b946e/image.png" alt="">
intelliJ에서 File-Project Structure에서 SDK를 17로 설정</p>
<p><img src="https://velog.velcdn.com/images/black-pepper/post/58eb0ae2-66b5-417f-8c99-e9d1d227deba/image.png" alt="">
Gradle에서 JVM변경</p>
<p>build.gradle.kts 설정</p>
<pre><code>plugins {
...
}

noArg {
    annotation(&quot;jakarta.persistence.Entity&quot;)
}

dependencies {
...
}

allOpen {
    annotation(&quot;jakarta.persistence.Entity&quot;)
    annotation(&quot;jakarta.persistence.MappedSuperclass&quot;)
    annotation(&quot;jakarta.persistence.Embeddable&quot;)
}</code></pre><p>plugins 뒤에 noArg, dependencies 밑에 allOpen을 달아준다</p>
<p>이 뒤부터 스프링 하던대로 설정</p>
<p>application.properties 설정</p>
<pre><code>spring.datasource.url=jdbc:mysql://주소:포트번호/데이터베이스
spring.datasource.username=사용자명
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql=trace</code></pre><p><img src="https://velog.velcdn.com/images/black-pepper/post/58beab19-ba84-4fda-9d89-bcdcb6ea2c3d/image.png" alt="">
메인함수 실행시켜서 확인!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[에러] Invalid options object. Dev Server has been initialized using an options object that does not match the API schema.]]></title>
            <link>https://velog.io/@black-pepper/Invalid-options-object.-Dev-Server-has-been-initialized-using-an-options-object-that-does-not-match-the-API-schema</link>
            <guid>https://velog.io/@black-pepper/Invalid-options-object.-Dev-Server-has-been-initialized-using-an-options-object-that-does-not-match-the-API-schema</guid>
            <pubDate>Tue, 08 Nov 2022 03:01:10 GMT</pubDate>
            <description><![CDATA[<p>프로젝트를 진행하던 중에 프론트엔드(리액트)를 확인하려고 실행시켰더니 이런 에러와 마주하게 됩니다..</p>
<p><img src="https://velog.velcdn.com/images/black-pepper/post/f26b022b-0742-47cb-ba3e-e3b6bcb193b1/image.png" alt=""></p>
<p>프론트엔드님은 이 에러가 안뜬다고 하더라구요,,
팀원 3명(백1,프1,풀1)중 두명이 이 에러로 안되는 상황!
구글링을 열심히 해본 결과</p>
<p><strong>&#39;무선랜을 이용하면 된다&#39;</strong> 라는 방법(?)을 찾게됩니다...
(프론트엔드님은 무선랜을 이용중이라 해당 에러가 뜨지 않았던것...)</p>
<p><img src="https://velog.velcdn.com/images/black-pepper/post/b18c5dd8-ada7-4742-92a5-47f5885b131c/image.png" alt="오마이갓">
<del>아니 무슨 이런 에러가 있담?</del></p>
<p>저(백엔드): 이거 와이파이 연결하면 안뜬대요. 와이파이 연결 가능하신가용?
풀스택님: 와이파이 연결 불가능 !</p>
<p>해당 방법을 기각하고 다른 방법을 찾기 시작합니다...</p>
<p>리액트 설정 방법, 리액트 지우고 새로설치 등등.. 온갖 방법을 다 써보고도 안되던 때...
마지막으로 스택오버플로에서 Daniel Ji님의 답변을 발견합니다.
<a href="https://stackoverflow.com/questions/70374005/invalid-options-object-dev-server-has-been-initialized-using-an-options-object">https://stackoverflow.com/questions/70374005/invalid-options-object-dev-server-has-been-initialized-using-an-options-object</a>
<img src="https://velog.velcdn.com/images/black-pepper/post/bd63dc04-0a74-46f8-9f3a-e50088904a34/image.png" alt=""></p>
<p>이더넷 케이블 구성에서 IP주소가 비공개라 값을 가지고 오지 못하기 때문이라네요.
.env파일에 DANGEROUSLY_DISABLE_HOST_CHECK=true를 넣으면 해결된다고 합니다.
<img src="https://velog.velcdn.com/images/black-pepper/post/acc098a4-4fb2-413b-adea-4da4da435ca4/image.png" width="200"/>
설명 꼼꼼히 적어주셨으니 영어와 네트워크를 잘 아시는분들은 읽어보시는것도 괜찮겠습니다. (일단 전 못함)</p>
<p>아무튼 프론트엔드 루트 폴더 (package.json 있는곳)에 .env 파일을 생성해줍니다.</p>
<pre><code>DANGEROUSLY_DISABLE_HOST_CHECK=true </code></pre><p>이런식으로 넣어주면 됩니다.
<img src="https://velog.velcdn.com/images/black-pepper/post/97b1021d-fa7a-4d9f-8a22-9fcca957850a/image.png" alt=""></p>
<p>저장하고 다시 실행시키면 정상적으로 실행됩니다:D
<img src="https://velog.velcdn.com/images/black-pepper/post/97335bc8-296f-4bfa-b2b1-64ead4fcf5b2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1377번: 버블 소트]]></title>
            <link>https://velog.io/@black-pepper/%EB%B0%B1%EC%A4%80-1377%EB%B2%88-%EB%B2%84%EB%B8%94-%EC%86%8C%ED%8A%B8</link>
            <guid>https://velog.io/@black-pepper/%EB%B0%B1%EC%A4%80-1377%EB%B2%88-%EB%B2%84%EB%B8%94-%EC%86%8C%ED%8A%B8</guid>
            <pubDate>Tue, 08 Nov 2022 02:21:40 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.acmicpc.net/problem/1377">백준 1377번: 버블 소트</a></p>
<p>문제에 제시된 C++코드는 배열을 돌면서 정렬이 완료되면 확인 작업을 몇 회 했는지 출력하는 코드입니다.</p>
<pre><code class="language-python">10 1 5 2 3</code></pre>
<pre><code class="language-python">1 5 2 3 10 #1번</code></pre>
<pre><code class="language-python">1 2 3 5 10 #2번</code></pre>
<pre><code class="language-python">1 2 3 5 10 #3번, 바뀐 부분이 없으므로 break!</code></pre>
<p>따라서 3을 출력해야합니다.</p>
<p>물론 이 코드를 그대로 사용하면 시간초과가나죠..
더 빨리 횟수를 찾는방법을 알아내야 합니다.</p>
<p>문제에 제시된 버블소트에는 특징이 있는데,
바로 <strong>작은 수가 왼쪽으로 이동할 때는 한 칸씩 밖에 움직이지 못한다</strong>는 것입니다.
매번 왼쪽과 오른쪽수만 비교해서 큰 수를 오른쪽으로 옮기를 작업을 진행하니, 작은 수들은 한 칸씩만 밀려나는식으로 이동하는거죠.
10 1 5 2 <strong>3</strong>
1 5 2 <strong>3</strong> 10
1 2 <strong>3</strong> 5 10
제시된 숫자 3을 보시면 한칸씩 이동하는 모습을 볼 수 있습니다!</p>
<p>따라서 <strong>최대 왼쪽 이동 횟수</strong>를 구하면 답을 쉽게 찾아낼 수 있습니다.</p>
<p>이동횟수를 구하기위해 기존 위치를 함께 저장해줍니다.</p>
<pre><code class="language-python">[(10, 0), (1, 1), (5, 2), (2, 3), (3, 4)]</code></pre>
<p>그 다음에 정렬해주세요!</p>
<pre><code class="language-python">[(1, 1), (2, 3), (3, 4), (5, 2), (10, 0)]</code></pre>
<p>현재위치와 이전위치를 비교합니다. (이전위치-현재위치)</p>
<pre><code class="language-python">[1, 2, 2, -1, -4]</code></pre>
<p>여기서 최대값 2에서 마지막 확인 횟수 1을 더하면 정답인 3이 됩니다.</p>
<p>*전체코드입니다.</p>
<pre><code class="language-python">import sys
input = sys.stdin.readline

N = int(input())
arr = []
for i in range(N):
    n = int(input())
    arr.append((n, i))

arr.sort()
diff = [0]*N
for i in range(N):
    diff[i] = arr[i][1]-i
print(max(diff)+1)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 11003번: 최솟값 찾기]]></title>
            <link>https://velog.io/@black-pepper/%EB%B0%B1%EC%A4%80-11003%EB%B2%88-%EC%B5%9C%EC%86%9F%EA%B0%92-%EC%B0%BE%EA%B8%B0</link>
            <guid>https://velog.io/@black-pepper/%EB%B0%B1%EC%A4%80-11003%EB%B2%88-%EC%B5%9C%EC%86%9F%EA%B0%92-%EC%B0%BE%EA%B8%B0</guid>
            <pubDate>Tue, 08 Nov 2022 01:53:19 GMT</pubDate>
            <description><![CDATA[<p><a href="https://www.acmicpc.net/problem/11003">백준 11003번: 최솟값 찾기</a></p>
<p>힙(우선순위 큐) 풀이방법 적어보겠습니다!</p>
<pre><code>1 5 2 3 6 2 3 7 3 5 2 6</code></pre><p>위는 예제 입력 1의 수열입니다. </p>
<p>이를 배열 A로 정의하고, 결과를 구하기 위해 for문을 돌면서 힙에 현재위치(i)와 해당 숫자를 넣습니다.</p>
<p>L이 3이기때문에 힙에 3개를 모두 채울때까지(=i가 2일때까지) 넣고, 최소값을 출력합니다.</p>
<pre><code class="language-python">[(1, 0), (5, 1), (2, 2)]</code></pre>
<p>그러면 힙에 위와 같이 들어갈겁니다.</p>
<p>이제 i가 4인 경우, 힙에 4개가 들어가게됩니다.</p>
<pre><code class="language-py">[(1, 0), (5, 1), (2, 2), (5, 1)]</code></pre>
<p>i가 4일때 A[1]~A[4]에 있는 값 중 가장 작은 값을 출력해야합니다.</p>
<p>그런데 저희가 처음에 위치를 같이 힙에 넣었었죠?</p>
<p>heap[0]이 (1, 0)이라는 뜻은, 여기서 최소값이 1이지만 이 위치가 0, 즉, 저희가 구하려는 범위(A[1]~A[3])을 벗어난다는 의미입니다. 범위를 벗어났으므로 pop을 해줍니다.</p>
<pre><code class="language-python">[(2, 2), (3, 3), (5, 1)]</code></pre>
<p>pop을 하면 힙이 이렇게 됩니다. 이제 최소값이 2이고, 해당 최소값의 위치는 2, 구하려고 하는 범위(A[1]~A[3]) 사이에 위치한다는 뜻이죠. 구하려는 값이므로 최소값을 출력해줍니다.</p>
<p>만약 pop을 하고도 구하려는 범위를 벗어난다면 계속 pop을 하면서 위치를 맞춰주시면 됩니다!</p>
<p>*PyPy3로 통과하는 코드입니다.</p>
<pre><code class="language-python">import heapq
N, L = map(int, input().split())
A = list(map(int, input().split()))

heap = []
for i in range(N):
    heapq.heappush(heap, (A[i], i))
    while heap[0][1] &lt;= i-L:
        heapq.heappop(heap)
    print(heap[0][0], end=&#39; &#39;)  </code></pre>
]]></description>
        </item>
    </channel>
</rss>