<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>민주대장</title>
    <link>https://jap-boss.tistory.com/</link>
    <description>Inhatc Computer System 20 / KNOU 23 </description>
    <language>ko</language>
    <pubDate>Tue, 25 Aug 2026 17:52:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>EGG._.Developer</managingEditor>
    <image>
      <title>민주대장</title>
      <url>https://tistory1.daumcdn.net/tistory/4924604/attach/221c1df241634e26ab0c626c0b2dc8e6</url>
      <link>https://jap-boss.tistory.com</link>
    </image>
    <item>
      <title>[정처기] 함수 종속 완벽하게 정리하기</title>
      <link>https://jap-boss.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;원래 이론 공부하는 건 잘 포스팅하지 않지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 계속 틀려서... 내가 맨날 틀려서... 다시는 틀리고 싶지 않아서... 적어보는 함수 종속 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;함수 종속&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 : 속성의 의미와 속성 간 상호 관계로부터 발생하는 제약 조건. X -&amp;gt; Y 관계일 때, X는 결정자고 Y는 종속자이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론상 개념은 이러하지만 실제로는 X를 알면 Y도 딱 하나로 정해지나?? 를 따지는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 학번 학생 한 명한테 부여되는 고유한 번호이기 때문에 학번을 알면 이름은 무조건 하나가 나올 수 밖에 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우를 함수 종속 성립으로 봄!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;완전 함수 종속&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 : 기본키가 속성이 여러 개일 경우, 기본 키를 전체를 알아야지 종속자를 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 학교를 예로 들었을때 '수강성적' 테이블에 학번, 과목 코드를 복합 기본키로 설정해놓은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 홍길동의 학번과 홍길동이 수강하는 과목의 코드를 알아야지만 비로소 홍길동의 A과목의 성적을 알 수 있는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우를 완전 함수 종속으로 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;부분 함수 종속&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 : 기본키가 복합키인 경우 일부 속성만으로도 종속자를 알 수 있다 (이 경우 제2정규화를 통해 없애야 함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'수강성적' 테이블에서 해당 과목을 수강하는 학생 이름을 확인하는 것으로 가정해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'수강성적' 테이블의 기본키는 학번, 과목코드지만 학생 이름은 학번만 있어도 충분히 도출이 가능하다(이 경우를 학번에만 종속되어있다고 한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 부분 함수 종속으로 보며, 데이터 이상 현상을 유발하는 위험요소로 보기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이행 함수 종속&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념 : X -&amp;gt; Y, Y -&amp;gt; Z일 때, X -&amp;gt; Z가 성립되는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 학과 테이블을 예로 들어보자. 이 테이블의 기본키는 학번이라고 가정하고, 속성을 학과 코드, 학과명으로 가정했을때&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학번을 알면 해당 학생의 학과 코드를 알 수 있고, 학과 코드를 알면 학과명을 알아낼 수 있다.(학번 -&amp;gt; 학과코드, 학과코드 -&amp;gt; 학과명)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 학번을 안다는 것은 해당 학생의 학과명도 자동으로 알 수 있게 된다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우 이행 함수 종속으로 보며 제 3정규화로 처리해주는 것이 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 제발!! 틀리지!! 말자!! 제발!!&lt;/p&gt;</description>
      <category>공부/이론</category>
      <category>부분함수종속</category>
      <category>완전함수종속</category>
      <category>이행삼수종속</category>
      <category>정처기</category>
      <category>정처기 함수종속 예시</category>
      <category>정처기 함수종속 완벽이해</category>
      <category>함수종속</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/111</guid>
      <comments>https://jap-boss.tistory.com/111#entry111comment</comments>
      <pubDate>Sat, 14 Mar 2026 00:26:03 +0900</pubDate>
    </item>
    <item>
      <title>[PostgreSQL] 시퀀스 생성, 활용</title>
      <link>https://jap-boss.tistory.com/110</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;시퀀스 컬럼을 세팅할 때 mysql에서는 auto-increment를 컬럼에 설정할 수 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;postgresql은 sequence를 객체를 따로 생성해서 연결해줘야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 시퀀스 생성부터 활용을 어떻게 하는지까지 한 번 적어보겠습니다~!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;시퀀스 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시퀀스 생성은 테이블 생성과 마찬가지로 CREATE를 사용합니다. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 생성 시 들어가는 옵션은 달라요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- START WITH : 몇 번 부터 시작할지. 미설정 시 기본값 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- INCREMENT BY : 증가폭. 미설정 시 기본값 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- MINVALUE : 최소값 설정. 미설정 시 기본값 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- MAXVALUE&amp;nbsp; : 최대값 설정. 미설정 시 데이터 타입 범위 내 최댓값 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CYCLE : 순환여부. 최댓값 도달 시 1부터 다시 시작할지 여부를 정함. 기본값은 비활성화&lt;/p&gt;
&lt;pre id=&quot;code_1773034295435&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE SEQUENCE [시퀀스명] START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 제가 명시적으로 작성한 거고 실제로는&lt;/p&gt;
&lt;pre id=&quot;code_1773034824273&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE SEQUENCE [시퀀스명]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게만 작성해도 위의 예문이랑 똑같은 설정을 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;생성한 시퀀스 연결&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 생성한 시퀀스를 연결해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난번 게시글에 언급했듯이 컬럼에 시퀀스를 연결하려면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ALTER&amp;nbsp; 사용 후 SET 키워드를 통해 설정을 변경해주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773034963078&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] 
ALTER COLUMN [컬럼명] SET DEFAULT NEXTVAL('시퀀스명')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해주면 의도한대로 시퀀스 설정이 마무리됩니다!&lt;/p&gt;</description>
      <category>공부/DB</category>
      <category>postgre</category>
      <category>postgre 시퀀스</category>
      <category>postgre 시퀀스 적용</category>
      <category>PostgreSQL</category>
      <category>postrgre 시퀀스 생성</category>
      <category>포스트그레</category>
      <category>포스트그레 시퀀스</category>
      <category>포스트그레 시퀀스 생성</category>
      <category>포스트그레 시퀀스 적용</category>
      <category>포스트그레SQL</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/110</guid>
      <comments>https://jap-boss.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 9 Mar 2026 15:00:14 +0900</pubDate>
    </item>
    <item>
      <title>[PostgreSQL] 테이블 ALTER문  정리</title>
      <link>https://jap-boss.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;후후 잊을만하면 옵니다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;살짝의 블미새의 맛을 본 저, 뭔가 적을만한 건덕지가 있으면 바로 로그인을 하는 사람이 됐습니다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여튼 각설하고 제가 PK DEFAULT도 좀 바꾸고 컬럼명도 바꾸고 테이블명도 잘못 세팅한 게 있어서 수정을 하려고 보니까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PostgreSQL은 ALTER문에 MODIFY를 사용할 수 없더라구요!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 간단히 정리해보려고 합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;사실 계속 사용할거라서 제가&amp;nbsp; 잊어버릴까봐&lt;/s&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 테이블명 변경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 테이블 이름 변경할 때만 사용합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773033093079&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] RENAME TO [테이블명_NEW]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 컬럼 변경&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼명 변경할 때도 마찬가지로 RENAME을 사용합니다&lt;/p&gt;
&lt;pre id=&quot;code_1773033293959&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] RENAME COLUMN [컬럼명] TO [변경할 컬럼명]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 설정을 바꿀 때 좀 달랐는데요, MODIFY가 아니라 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ALTER COLUMN 구문을 사용하며, SET 키워드를 통해 설정을 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 뭐 default를 변경하거나, notnull을 설정하거나~&lt;/p&gt;
&lt;pre id=&quot;code_1773033403358&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] ALTER COLUMN [컬럼명] SET NOT NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 타입을 변경할 때는 SET 이 아닌 TYPE으로 변경합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1773033494382&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] ALTER COLUMN [컬럼명] TYPE [변경할 타입]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 오고 나면 컬럼명이랑 타입을 동시 수정하게 되면 어떡하나 라는 생각을 하실 수도 있을텐데요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PostgreSQL에서는 하나의 ALTER TABLE 문에서 여러 컬럼 변경 작업을 콤마(,)로 구분하여 동시 수행이 가능하기 때문에 그냥 나열해주면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1773033631934&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE [테이블명] 
RENAME COLUMN [컬럼명] TO [변경할 컬럼명],
ALTER COLUMN [변경할 컬럼명] TYPE [변경할 타입]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성 시에 콤마(,) 없으면 오류나니까 참고해주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 똑같은 듯 다른 문법 덕분에 알아가는 재미가 쏠쏠한 거 같아요!&lt;/p&gt;</description>
      <category>공부/DB</category>
      <category>postgre alter</category>
      <category>PostgreSQL</category>
      <category>포스트그레</category>
      <category>포스트그레 alter</category>
      <category>포스트그레 컬럼 설정 변경</category>
      <category>포스트그레 테이블 이름 변경</category>
      <category>포트스그레 컬럼명 변경</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/109</guid>
      <comments>https://jap-boss.tistory.com/109#entry109comment</comments>
      <pubDate>Mon, 9 Mar 2026 14:41:29 +0900</pubDate>
    </item>
    <item>
      <title>[Java] Pattern, Matcher Class 사용하기</title>
      <link>https://jap-boss.tistory.com/108</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;&lt;b&gt;CASE&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;코드를 사용하는 데이터가 있는데, 기존대로라면 쿼리에서 서브쿼리로 가지고 왔어야 할 것을, DB 서버가 달라서 가져오지 못하는 문제가 생겼다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다른 때였다면 그냥&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쿼리결과 List로 받기 -&amp;gt; API를 사용해서 codelist map으로 조회 -&amp;gt; foreach로 매칭시켜주기&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1769043287248&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// API로 조회해 온 codeMap
Map&amp;lt;String, String&amp;gt; codeMap = apiReulst.getData();
// 쿼리 조회
List&amp;lt;Dto&amp;gt; resultList = repository.selectList();

// 코드 값 세팅
for(Dto dto : resultList) {
  String codeName = codeMap.get(dto.getCode());
  dto.setCodeName(codeName);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; 이런식으로 진행을 했을텐데&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1769043377820&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// API로 조회해 온 codeMap
Map&amp;lt;String, String&amp;gt; codeMap = apiReulst.getData();
// 쿼리 조회
List&amp;lt;Dto&amp;gt; resultList = repository.selectList();

// 코드 값 세팅
for(Dto dto : resultList) {
  String resultString = dto.getResultString(); // 제목:안녕, code:A0101, 작성자:민주대장
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번에는 이런 식으로 조합을 해서 값이 오는 상태...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저 resultString의 code를 찾아서 codeList와 매핑해서 replace하는 방법이 없나 찾아보다가 Pattern, Matcher Class 를 사용해보게되었다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;s&gt;분명교수님이알려주셨을테지만... 교수님이거보시면안돼요&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;&lt;b&gt;Pattern, Mather Class&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Pattern Class&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정규식을 다루기 위해 사용하는 클래스.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;정규식으로 문자열을 검증할때 사용하는데 복잡한 정규식의 경우 성능 저하가 될 수 있는 점 참고해서 사용하면 될 듯 싶다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Matcher Class&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pattern Class에서 반환한 값과 비교 대상 문자열의 전체 일치/부분 일치를 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;u&gt;&lt;b&gt;SOLVE&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 확인후 변환해야 할 코드명은&amp;nbsp;&lt;b&gt;대문자 알파벳+숫자 네 개 조합&lt;/b&gt;이라는 패턴을 가지고 있었기에 하기 코드를 보면서 해당 사실을 참조하면 좋을 거 같다&lt;/p&gt;
&lt;pre id=&quot;code_1769046405603&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 알파벳 대문자 + 숫자 네글자 조합 정규식
Pattern pattern = Pattern.compile(&quot;[A-Z][0-9]{4}&quot;); 

// 이 때 matcher의 값은 java.util.regex.Matcher[pattern=[A-Z][0-9]{4} region=0,258 lastmatch=]
Matcher matcher = pattern.matcher(resultString);

while(matcher.find()) {
    String code = matcher.group();
    String codeName = codeList.getOrDefault(code, '-');
    
    // 스트링은 불변. 값을 다시 대입해줘야함
    resultString = resultString.replace(code, codeName); // 제목:안녕, code:게시완료, 작성자:민주대장
 }&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설명&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[pattern=[A-Z][0-9]{4} region=0,258 lastmatch=]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pattern = 현재 정규식(알파벳 대문자 + 숫자 네글자).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;retgion = 비교 대상. resultString의 길이가 258이라는 뜻이고, 0부터 258까지 맞는 코드가 있는지 찾는다는 것.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lasterMatch = 찾은 결과. 현재 find() 메소드로 결과를 찾지 않았기 때문에&amp;nbsp; 비어있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 조회하는 부분을 해결할 수 있었다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 반대인 검색하는 경우를 해결해야 하는 문제가 있지만...⭐ 이건 머리만 아플 뿐이지 어렵진 않기 때문에 또 열심히 하기로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Java</category>
      <category>Java</category>
      <category>Match</category>
      <category>Pattern</category>
      <category>Pattern MatchClass</category>
      <category>매치클래스</category>
      <category>문자열 일부 매치</category>
      <category>스프링부트</category>
      <category>패턴클래스</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/108</guid>
      <comments>https://jap-boss.tistory.com/108#entry108comment</comments>
      <pubDate>Thu, 22 Jan 2026 11:08:01 +0900</pubDate>
    </item>
    <item>
      <title>[JSP/Button] button 사용 시 자동으로 submit 막기</title>
      <link>https://jap-boss.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;QR코드 생성을 구현하고 있는데 전혀 redirect가 될 일이 아닌 애가 redirect가 돼서 나를 괴롭히더라...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;작성중이었던 코드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;qr.jsp&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741306811741&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- QR 코드를 생성할 주소 정보 입력 --&amp;gt;
&amp;lt;input type=&quot;text&quot; id =&quot;qrurl&quot; name=&quot;qrurl&quot;/&amp;gt;
&amp;lt;button class=&quot;button&quot; onclick=&quot;fn_qr();&quot;&amp;gt;QR 생성&amp;lt;/button&amp;gt;

&amp;lt;!-- QR 코드 표시 영역 --&amp;gt;
&amp;lt;div class=&quot;qrResult&quot; id=&quot;qrResult&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;qr.js&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1741306885454&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function fn_qr(){

    let url = $(&quot;#qrurl&quot;).val();

    $.ajax({
        type:&quot;GET&quot;,
        url:&quot;/qr.do&quot;,
        data:{url:url},
        success : function(data){
            if(data){
                let imgSrc = &quot;data:image/png;base64,&quot; + data;
                let imgTag = &quot;&amp;lt;img src=\&quot;&quot; + imgSrc + &quot;\&quot; alt=\&quot;QR Code\&quot;&amp;gt;&quot;;
                $(&quot;#qrResult&quot;).html(imgTag);
            }
        }
    });

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전혀 redirect 될 일이 없을 거라고 생각했는데 자꾸 redirect가 돼서 불러왔던 QR도 다시 초기화가 되더라 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만? 원인은 생각보다 단순한 이유였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;button 태그 사용 시 type = &quot;button&quot;을 하지 않으면 &lt;span style=&quot;color: #ee2323;&quot;&gt;자동으로 submit&lt;/span&gt; 돼서 그랬던 것!&lt;/b&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;수정한 코드&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1741307029520&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- QR 코드를 생성할 주소 정보 입력 --&amp;gt;
&amp;lt;input type=&quot;text&quot; id =&quot;qrurl&quot; name=&quot;qrurl&quot;/&amp;gt;
&amp;lt;button type=&quot;button&quot; class=&quot;button&quot; onclick=&quot;fn_qr();&quot;&amp;gt;QR 생성&amp;lt;/button&amp;gt;

&amp;lt;!-- QR 코드 표시 영역 --&amp;gt;
&amp;lt;div class=&quot;qrResult&quot; id=&quot;qrResult&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 바꿔주었더니&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1PJsz/btsMC4uY9sv/o5UEUaa50gqcXGcLWTEa2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1PJsz/btsMC4uY9sv/o5UEUaa50gqcXGcLWTEa2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1PJsz/btsMC4uY9sv/o5UEUaa50gqcXGcLWTEa2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1PJsz%2FbtsMC4uY9sv%2Fo5UEUaa50gqcXGcLWTEa2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;260&quot; height=&quot;213&quot; data-origin-width=&quot;260&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/Spring</category>
      <category>html</category>
      <category>js</category>
      <category>jsp</category>
      <category>버튼 redirect 막기</category>
      <category>버튼 submit 막기</category>
      <category>버튼 태그</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/107</guid>
      <comments>https://jap-boss.tistory.com/107#entry107comment</comments>
      <pubDate>Fri, 7 Mar 2025 09:36:44 +0900</pubDate>
    </item>
    <item>
      <title>[백준/JAVA] 중앙 이동 알고리즘</title>
      <link>https://jap-boss.tistory.com/106</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2903&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2903&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnGm7Z/btsMyF3Rfkb/N1x9Rrny6viy7liCAPoe3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnGm7Z/btsMyF3Rfkb/N1x9Rrny6viy7liCAPoe3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnGm7Z/btsMyF3Rfkb/N1x9Rrny6viy7liCAPoe3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnGm7Z%2FbtsMyF3Rfkb%2FN1x9Rrny6viy7liCAPoe3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1275&quot; height=&quot;845&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 정리&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;종이를&amp;nbsp;n번&amp;nbsp;접었을&amp;nbsp;때,&amp;nbsp;나타낼&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;점을&amp;nbsp;겹치는&amp;nbsp;점&amp;nbsp;빼고&amp;nbsp;출력해라! &lt;br /&gt;&lt;br /&gt;이게&amp;nbsp;처음&amp;nbsp;문제를&amp;nbsp;봤을&amp;nbsp;땐&amp;nbsp;정말&amp;nbsp;무슨&amp;nbsp;말인지&amp;nbsp;모르겠어서 &lt;br /&gt;직접&amp;nbsp;그려보기로&amp;nbsp;했다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnwwZg/btsMAYAPEQ0/32DlMWi7758zKRRRsgOa60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnwwZg/btsMAYAPEQ0/32DlMWi7758zKRRRsgOa60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnwwZg/btsMAYAPEQ0/32DlMWi7758zKRRRsgOa60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnwwZg%2FbtsMAYAPEQ0%2F32DlMWi7758zKRRRsgOa60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;974&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;974&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막은&amp;nbsp;그리기&amp;nbsp;빡세서&amp;nbsp;못&amp;nbsp;그린&amp;nbsp;게&amp;nbsp;맞습니다&amp;nbsp; &lt;br /&gt;여튼&amp;nbsp;그림으로&amp;nbsp;정리해보니&amp;nbsp;쉬웠다&amp;nbsp; &lt;br /&gt;&lt;br /&gt;종이를&amp;nbsp;접으면&amp;nbsp;한&amp;nbsp;변의&amp;nbsp;점의&amp;nbsp;갯수를&amp;nbsp;제곱한&amp;nbsp;것&amp;nbsp;만큼의&amp;nbsp;점이&amp;nbsp;생기고,&amp;nbsp; &lt;br /&gt;이&amp;nbsp;점이&amp;nbsp;증가하는&amp;nbsp;식은&amp;nbsp;1,&amp;nbsp;2,&amp;nbsp;4,&amp;nbsp;8...&amp;nbsp; &lt;br /&gt;자신을&amp;nbsp;더해서&amp;nbsp;증가하는,&amp;nbsp;그니까&amp;nbsp;2진수&amp;nbsp;증가를&amp;nbsp;대입하니&amp;nbsp;쉬웠다&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;작성 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1741013602503&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        //초기상태는 점 4개
        int answer = 0;
        //초기 한 변의 점의 수는 2개
        int point = 2;
        //초기 증가는 1개
        int add = 1;

        for (int i = 0; i &amp;lt; N; i++) {
            
            //한 변의 점의 갯수
            point = point + add;
            answer = point * point;
            //증가는 2배씩 늘어남
            add += add;
           
        }

        System.out.println(answer);

        sc.close();
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/백준</category>
      <category>백준</category>
      <category>백준 2903</category>
      <category>백준 자바</category>
      <category>백준 중앙이동알고리즘 자바</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/106</guid>
      <comments>https://jap-boss.tistory.com/106#entry106comment</comments>
      <pubDate>Mon, 3 Mar 2025 23:54:05 +0900</pubDate>
    </item>
    <item>
      <title>[백준/JAVA] No.2720 세탁소 사장 동혁</title>
      <link>https://jap-boss.tistory.com/105</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/2720&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.acmicpc.net/problem/2720&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czHp7Y/btsMyTOsrE7/0kt6b3mb2w4ukOx7w20T00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czHp7Y/btsMyTOsrE7/0kt6b3mb2w4ukOx7w20T00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czHp7Y/btsMyTOsrE7/0kt6b3mb2w4ukOx7w20T00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczHp7Y%2FbtsMyTOsrE7%2F0kt6b3mb2w4ukOx7w20T00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1250&quot; height=&quot;654&quot; data-origin-width=&quot;1250&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 정리&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;거스름돈을 0.25, 0.10, 0.05, 0.01 로 나눠서 계산하면 되는 문제!&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;원 단위 계산은 기사 준비하면서, 그리고 교과서 예제로 심심찮게 봤는데 달러는 처음이었다.&lt;br /&gt;그래도 어렵지 않게 풀 수 있었다&lt;br /&gt;익숙한 거 최고&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;작성 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1741011946394&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);

        int t = sc.nextInt();
        int[][] charge = new int[t][4];

        for (int i = 0; i &amp;lt; t; i++) {

            //거스름돈 총액
            int input = sc.nextInt();

            charge[i][0] = input/25; //쿼터
            charge[i][1]  = (input % 25)/10; //페니
            charge[i][2]  = ((input % 25) % 10)/5; //니켈
            charge[i][3] = (((input % 25) % 10  % 5))/1; //다임

        }

        //출력
        for (int i = 0; i &amp;lt; charge.length; i++) {
            for (int is : charge[i]) {
                System.out.print(is + &quot; &quot;);
            }

            System.out.println();
        }

        sc.close();

    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;요즘 프로그래머스만 잔뜩 풀다가 백준 풀려니까&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;출력을 저렇게 맞춰야 해서 실수할뻔했다 ㅎㅎ.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;정신을 차리자&lt;/span&gt;&lt;/p&gt;</description>
      <category>코딩테스트/백준</category>
      <category>단계별풀기 level8</category>
      <category>백준</category>
      <category>백준 세탁소 사장 동혁 자바</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/105</guid>
      <comments>https://jap-boss.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 3 Mar 2025 23:26:12 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/JAVA] 로또의 최고 순위와 최저 순위</title>
      <link>https://jap-boss.tistory.com/104</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/77484&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/77484&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-03 004009.png&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cziOAx/btsMBf9XSdP/iW0uOy2ppUzSnarM17QXNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cziOAx/btsMBf9XSdP/iW0uOy2ppUzSnarM17QXNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cziOAx/btsMBf9XSdP/iW0uOy2ppUzSnarM17QXNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcziOAx%2FbtsMBf9XSdP%2FiW0uOy2ppUzSnarM17QXNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1033&quot; height=&quot;876&quot; data-filename=&quot;스크린샷 2025-03-03 004009.png&quot; data-origin-width=&quot;1033&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;값을&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;nbsp;등수를&amp;nbsp;확인해라 &lt;br /&gt;&lt;br /&gt;학교&amp;nbsp;다닐&amp;nbsp;때&amp;nbsp;숱하게&amp;nbsp;나왔던&amp;nbsp;동생이&amp;nbsp;낙서해서&amp;nbsp;알아볼&amp;nbsp;수&amp;nbsp;없게&amp;nbsp;된...&amp;nbsp;어쩌고...&amp;nbsp;문제였다 &lt;br /&gt;&lt;br /&gt;for문으로&amp;nbsp;푸는&amp;nbsp;방법을&amp;nbsp;해볼까&amp;nbsp;했는데&amp;nbsp;한창&amp;nbsp;hashSet을&amp;nbsp;익히는&amp;nbsp;중이라&amp;nbsp;이번&amp;nbsp;문제는&amp;nbsp;hashSet으로&amp;nbsp;풀어봤다&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;작성 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1740930053906&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;


class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
         //answer의 크기는 항상 2
        int[] answer = new int[2];


        HashSet&amp;lt;Integer&amp;gt; winArr = new HashSet&amp;lt;&amp;gt;();

        for (int wNum : win_nums) {
            winArr.add(wNum);
        }
        
        int right = 0;// 당첨 번호 
        int zero = 0;// 0일 경우 

        for(int l : lottos) {
            if(l == 0) {
                zero++;
            } else if(winArr.contains(l)) {
                right++;
            } 
        }


        int max = right+zero;//가장 높은 등수는 당첨번호 + 0
        int min = right;//당첨번호만

		//1개만 당첨되면 7등, 아니면 7 - max등
        answer[0] = 7 - max == 7 ? 6: 7 - max;
        answer[1] = 7 - min == 7 ? 6 : 7 -min;

        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩테스트/프로그래머스</category>
      <category>level1</category>
      <category>로또</category>
      <category>프로그래머스</category>
      <category>프로그래머스 로또 자바</category>
      <category>프로그래머스 로또 최고 순위와 최저 순위 자바</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/104</guid>
      <comments>https://jap-boss.tistory.com/104#entry104comment</comments>
      <pubDate>Mon, 3 Mar 2025 00:41:32 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/JAVA] 같은 숫자는 싫어</title>
      <link>https://jap-boss.tistory.com/103</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12906&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/12906&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-02 234738.png&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2oujH/btsMBguggJf/oCKKUXRnfi9ngKSNdu7VE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2oujH/btsMBguggJf/oCKKUXRnfi9ngKSNdu7VE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2oujH/btsMBguggJf/oCKKUXRnfi9ngKSNdu7VE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2oujH%2FbtsMBguggJf%2FoCKKUXRnfi9ngKSNdu7VE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1050&quot; height=&quot;463&quot; data-filename=&quot;스크린샷 2025-03-02 234738.png&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속적으로&amp;nbsp;나타나는&amp;nbsp;숫자는&amp;nbsp;하나만&amp;nbsp;남기고&amp;nbsp;남은&amp;nbsp;숫자는&amp;nbsp;출력하지&amp;nbsp;않음.&amp;nbsp;단,&amp;nbsp;hashSet처럼&amp;nbsp;중복이&amp;nbsp;아예&amp;nbsp;없는&amp;nbsp;게&amp;nbsp;아니고&amp;nbsp;&amp;lt;연속적인&amp;nbsp;같은&amp;nbsp;수&amp;gt;&amp;nbsp;가&amp;nbsp;없는&amp;nbsp;것임 &lt;br /&gt;&lt;br /&gt;왜&amp;nbsp;hashSet을&amp;nbsp;굳이&amp;nbsp;강조했냐면!! &lt;br /&gt;내가실수를했기때문이다&amp;nbsp;하하... &lt;br /&gt;&lt;br /&gt;그리고&amp;nbsp;해당&amp;nbsp;문제는&amp;nbsp;스택/큐라고&amp;nbsp;명시가&amp;nbsp;되어있어서 &lt;br /&gt;이번&amp;nbsp;문제는&amp;nbsp;stack으로&amp;nbsp;풀어보았다!!&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;작성 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1740926919108&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {

    public int[] solution(int []arr) {

        Stack&amp;lt;Integer&amp;gt; stArr = new Stack&amp;lt;&amp;gt;();

        for (int i = 0; i &amp;lt; arr.length; i++) {

            //스택이 비어있으면 무조건 arr[i]
            if(stArr.isEmpty()) {
                stArr.push(arr[i]);
                //스택이 지금 바라보고 있는 마지막이 arr[i]와 다르다면
            } else if(!(stArr.peek().equals(arr[i]))) {
                //추가
                stArr.push(arr[i]);
            }
        }

        int[] answer = new int[stArr.size()];

        //스택은 후입선출이니까 마지막부터
        for (int i = answer.length - 1; i &amp;gt;= 0; i--) {
            answer[i] = stArr.peek();
            //값 추가 후 pop 연산으로 현재 값(peek)를 다음으로 넘김
            stArr.pop();
         }

        return answer;
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/프로그래머스</category>
      <category>level1</category>
      <category>같은 숫자는 싫어</category>
      <category>프로그래머스</category>
      <category>프로그래머스 같은 숫자는 싫어 자바</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/103</guid>
      <comments>https://jap-boss.tistory.com/103#entry103comment</comments>
      <pubDate>Sun, 2 Mar 2025 23:49:21 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스/JAVA] 지폐 접기</title>
      <link>https://jap-boss.tistory.com/102</link>
      <description>&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;문제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340199&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/340199&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-03-02 214139.png&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyjzPw/btsMz7kz8SR/redpjmX1PmStEriLJgZ6g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyjzPw/btsMz7kz8SR/redpjmX1PmStEriLJgZ6g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyjzPw/btsMz7kz8SR/redpjmX1PmStEriLJgZ6g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyjzPw%2FbtsMz7kz8SR%2FredpjmX1PmStEriLJgZ6g1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1030&quot; height=&quot;899&quot; data-filename=&quot;스크린샷 2025-03-02 214139.png&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;문제 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;지폐를&amp;nbsp;접은&amp;nbsp;횟수를&amp;nbsp;저장할&amp;nbsp;정수&amp;nbsp;변수&amp;nbsp;answer를&amp;nbsp;만들고&amp;nbsp;0을&amp;nbsp;저장합니다. &lt;br /&gt;2.&amp;nbsp;반복문을&amp;nbsp;이용해&amp;nbsp;bill의&amp;nbsp;작은&amp;nbsp;값이&amp;nbsp;wallet의&amp;nbsp;작은&amp;nbsp;값&amp;nbsp;보다&amp;nbsp;크거나&amp;nbsp;bill의&amp;nbsp;큰&amp;nbsp;값이&amp;nbsp;wallet의&amp;nbsp;큰&amp;nbsp;값&amp;nbsp;보다&amp;nbsp;큰&amp;nbsp;동안&amp;nbsp;아래&amp;nbsp;과정을&amp;nbsp;반복합니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-1.&amp;nbsp;bill[0]이&amp;nbsp;bill[1]보다&amp;nbsp;크다면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bill[0]을&amp;nbsp;2로&amp;nbsp;나누고&amp;nbsp;나머지는&amp;nbsp;버립니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-2.&amp;nbsp;그렇지&amp;nbsp;않다면 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bill[1]을&amp;nbsp;2로&amp;nbsp;나누고&amp;nbsp;나머지는&amp;nbsp;버립니다. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-3.&amp;nbsp;answer을&amp;nbsp;1&amp;nbsp;증가시킵니다. &lt;br /&gt;3.&amp;nbsp;answer을&amp;nbsp;return합니다. &lt;br /&gt;&lt;br /&gt;ㅎㅎ&amp;nbsp;이번엔&amp;nbsp;예문이&amp;nbsp;자세히&amp;nbsp;나와&amp;nbsp;있어서&amp;nbsp;내가&amp;nbsp;정리할&amp;nbsp;시간을&amp;nbsp;줄였다&amp;nbsp;ㅎㅎ! &lt;br /&gt;&lt;br /&gt;처음에는&amp;nbsp;Arrays.sort로&amp;nbsp;해서&amp;nbsp;최댓값을&amp;nbsp;뺐는데,&amp;nbsp;swap하고&amp;nbsp;다시&amp;nbsp;계산하니&amp;nbsp;계산이&amp;nbsp;한&amp;nbsp;번&amp;nbsp;더&amp;nbsp;됐다... &lt;br /&gt;내가&amp;nbsp;어딘갈&amp;nbsp;분명히&amp;nbsp;잘못한&amp;nbsp;것일텐데&amp;nbsp;헛허 &lt;br /&gt;그래서&amp;nbsp;Math의&amp;nbsp;max,&amp;nbsp;min을&amp;nbsp;사용해서&amp;nbsp;풀었다. &lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;작성 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1740919384974&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;class Solution {
 public int solution(int[] wallet, int[] bill) {
        int answer = 0;

        int bWallet = Math.max(wallet[0], wallet[1]);
        int sWallet = Math.min(wallet[0], wallet[1]);
        int bBill = Math.max(bill[0], bill[1]);
        int sBill = Math.min(bill[0], bill[1]);


        while (true) {

            if(sBill &amp;gt; sWallet || bBill &amp;gt; bWallet) {
                bBill = bBill/2;
                answer++;
            }
                
            //접을 수 있는 지폐가 남아있으면 값 바꿔서 접기   
            if(bBill &amp;lt; sBill) {
                int tmp = bBill;
                bBill = sBill;
                sBill = tmp;
            }
       
             //지갑의 크기보다 같거나 작으면 종료
            if(sBill &amp;lt;= sWallet &amp;amp;&amp;amp; bBill &amp;lt;= bWallet) {
                break;
            }
        }
       
        
        return answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트/프로그래머스</category>
      <category>level1</category>
      <category>프로그래머스</category>
      <category>프로그래머스 지폐 접기</category>
      <category>프로그래머스 지폐접기 자바</category>
      <author>EGG._.Developer</author>
      <guid isPermaLink="true">https://jap-boss.tistory.com/102</guid>
      <comments>https://jap-boss.tistory.com/102#entry102comment</comments>
      <pubDate>Sun, 2 Mar 2025 21:43:28 +0900</pubDate>
    </item>
  </channel>
</rss>