<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>gaaaaaaani</title>
    <link>https://gani00.tistory.com/</link>
    <description>가니 뭐가 되고 싶니</description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 18:24:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>gani00</managingEditor>
    <item>
      <title>오굿푸드 | 마감식품 특가 플랫폼</title>
      <link>https://gani00.tistory.com/12</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4456&quot; data-origin-height=&quot;2542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baS0xd/dJMcaip4TSf/kwyxFOWI9yow5GGCO6nIr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baS0xd/dJMcaip4TSf/kwyxFOWI9yow5GGCO6nIr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baS0xd/dJMcaip4TSf/kwyxFOWI9yow5GGCO6nIr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaS0xd%2FdJMcaip4TSf%2FkwyxFOWI9yow5GGCO6nIr0%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;708&quot; height=&quot;404&quot; data-origin-width=&quot;4456&quot; data-origin-height=&quot;2542&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;span style=&quot;color: #141413;&quot;&gt;0. 프로젝트 개요&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;오굿푸드 | 마감식품 특가 플랫폼&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오굿푸드는 마감 임박 식품을 할인된 가격으로 판매할 수 있도록 돕는 플랫폼이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비자는 주변 매장의 마감 임박 상품을 확인하고 예약&amp;middot;구매할 수 있으며, 매장은 폐기될 가능성이 있는 상품을 판매로 전환할 수 있다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;개발 기간 / 팀 구성&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2025.07 / 5인 풀스택 개발&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;내 역할&lt;/b&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #73726c; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스 기획 (전체 기획 &amp;middot; 경쟁사 분석 &amp;middot; 문제 및 기능 정의)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;백엔드 개발 (사용자 서비스 관련 기능 구현)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;color: #141413;&quot;&gt;1. 문제 정의&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;문제 발견&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 소비기한 임박 상품의 낭비&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;식품 판매 과정에서 소비기한이 임박했지만 아직 판매 가능한 상품이 발생함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 상품은 제때 판매되지 않으면 폐기될 가능성이 높음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;판매 가능한 상품이 폐기되면서 매장 입장에서는 재고 손실과 폐기 비용이 발생함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비 가능한 식품이 버려진다는 점에서 자원 낭비 문제로도 이어짐&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 자영업자의 홍보 플랫폼 부족&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;편의점이나 대형마트는 자체 앱, 멤버십, 쿠폰 시스템을 통해 소비기한 임박 상품을 할인 판매할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;반면 개인 카페, 동네 빵집, 소규모 음식점 등 자영업자는 자체 플랫폼을 구축하기 어려움&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;할인 상품 정보를 소비자에게 실시간으로 알릴 수 있는 채널이 부족&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3) 마감식품 정보 접근 어려움&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비자는 주변 매장에 어떤 마감식품이 있는지 쉽게 알기 어려움&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;할인 상품이 있더라도 매장에 직접 방문하거나 별도로 확인해야 하는 불편함이 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 정보, 할인율, 구매 가능 여부를 한곳에서 확인하기 어려움&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이로 인해 합리적인 가격으로 상품을 구매할 기회를 놓칠 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;타겟 유저&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 고객&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;888&quot; data-start=&quot;861&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;주변 매장의 할인 상품을 한눈에 확인하고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;923&quot; data-start=&quot;889&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;품질에는 문제가 없지만 가격이 저렴한 상품을 구매하고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;956&quot; data-start=&quot;924&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비기한이 임박한 상품 정보를 미리 알고 방문하고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;985&quot; data-start=&quot;957&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;합리적인 소비를 통해 생활비 부담을 줄이고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 사장님&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1144&quot; data-start=&quot;1120&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;남은 상품을 폐기하기 전에 판매하고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1171&quot; data-start=&quot;1145&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;별도 앱이나 홍보 채널을 직접 만들기 어려움&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1200&quot; data-start=&quot;1172&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;할인 상품 정보를 소비자에게 빠르게 알리고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1231&quot; data-start=&quot;1201&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;재고 소진을 통해 로스율과 폐기 비용을 줄이고 싶음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;2. 기존 서비스와의 차별점&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;경쟁 서비스 분석&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 마감식품 할인 플랫폼을 중심으로 서비스 유형과 구매 방식에 대해 조사해봤습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구분&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;럭키밀&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;라스트오더&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Too Good To Go&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오굿푸드&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스 유형&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마감식품 럭키백 예약&amp;middot;픽업 서비스&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;편의점&amp;middot;마트&amp;middot;음식점 마감할인 플랫폼&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;글로벌 마감식품 Surprise Bag 플랫폼&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자영업자 중심 마감식품 예약&amp;middot;픽업 플랫폼&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;핵심 타겟&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;베이커리&amp;middot;카페 등 신선식품 매장과 할인 구매 소비자&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;편의점, 대형마트, 음식점 이용자&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;음식물 낭비를 줄이고 싶은 소비자와 식품 매장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마감식품을 판매하고 싶은 자영업자와 할인 구매 소비자&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 제공 방식&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;당일 남은 상품을 럭키백 형태로 구성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;매장별 마감할인 상품 노출&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Surprise Bag 형태의 랜덤 구성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;매장 상황에 따라 남은 상품을 마감식품 세트 또는 할인 상품으로 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;강점&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;랜덤박스의 재미와 높은 할인율&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다양한 제휴처와 상품 접근성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;환경 가치와 글로벌 서비스 검증&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자영업자도 활용 가능한 등록 구조와 상태 기반 픽업 흐름&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.6977%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;한계/고려점&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0465%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 구성을 사전에 정확히 알기 어려움&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.1628%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대형 유통&amp;middot;제휴 중심 성격이 강함&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.6279%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 선택권이 제한될 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;초기 서비스라 매장 확보와 신뢰 형성이 중요함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;우리 서비스의 포지션&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&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;color: #333333;&quot;&gt;&lt;b&gt;1) 자영업자 중심 마감식품 플랫폼&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오굿푸드는 대형마트나 편의점이 아닌, 자체 플랫폼 구축이 어려운 자영업자를 주요 공급자로 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사장님이 소비기한 임박 상품을 직접 등록하고 판매할 수 있는 구조를 기획&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자영업자는 폐기될 수 있는 상품을 판매로 전환해 로스율을 줄일 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 소비자 할인 구매 서비스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비자는 주변 매장의 마감식품 정보를 확인할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정가보다 저렴한 가격으로 상품을 구매할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마감식품 정보를 직접 찾아다니지 않아도 플랫폼 안에서 확인하고 구매할 수 있도록 설계&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) B2B와 B2C가 결합된 B2B2C 서비스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사장님에게는 마감식품 등록&amp;middot;판매 관리 기능을 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소비자에게는 할인 상품 탐색&amp;middot;구매&amp;middot;픽업 경험을 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;플랫폼은 사장님과 소비자 간 거래를 연결하는 중간 구조로 작동&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;4) 단순 상품 조회가 아닌 거래 흐름 중심 플랫폼&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;클론 코딩 수준의 상품 목록 구현에 그치지 않고, 실제 구매 흐름을 구성하고자 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 조회 &amp;rarr; 구매/결제 &amp;rarr; 매장 확인 &amp;rarr; 픽업 완료로 이어지는 흐름을 설계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마감식품 특성상 &amp;ldquo;구매 이후 실제 픽업까지 완료되는 과정&amp;rdquo;이 중요하다고 판단&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;5) 구매자&amp;middot;사장님&amp;middot;어드민 기능을 포함한 운영형 서비스&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구매자: 상품 조회, 상세 확인, 구매, 픽업 상태 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사장님: 상품 등록, 주문 확인, 픽업 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;어드민: 사용자, 매장, 상품 등 서비스 운영 정보 관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;세 사용자 유형을 나누어 실제 서비스 운영에 필요한 구조를 고려&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;span style=&quot;color: #141413;&quot;&gt;3. 기획 과정&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 사용자&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #5c5962; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예약 가능한 상품 조회 및 오늘 픽업 &amp;amp; 내일 픽업 제품 선택 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;필터링 기능을 통해 주문 상태 필터링 조회 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;리뷰 작성 및 내가 작성한 리뷰, 전체 리뷰 조회 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;북마크를 통한 관심 가게 등록 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 가게(사장님)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #5c5962; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오굿백 상품 등록 및 마감 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예약 목록 확인 및 픽업 처리, 취소 처리 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내 가게 리뷰 확인 및 월별 매출 확인 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3) 관리자&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #5c5962; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가게 등록 요청 승인 및 거절을 통한 사용자 관리 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;전체 회원 조회 및 상품 목록 조회 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예약, 픽업 상태 확인 및 관리 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용자, 사장님에게 알림 전송 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;전체 어플 매출 관리 및 통계 기능 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3d3d3a; letter-spacing: 0px;&quot;&gt;가장 어려웠던 결정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 알림 기능 구현 방식&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마감식품 서비스에서는 주문 상태가 바뀌거나 픽업 시간이 가까워졌을 때 사용자에게 알림을 제공하는 것이 중요함&lt;/li&gt;
&lt;li&gt;초기 개발 편의성과 알림 기능 구현에 적합한 Scheduler 선택&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 150px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Batch&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;Scheduler&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;대량 데이터 처리&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;정해진 시간마다 작업 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&lt;b&gt;적합한 작업&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;정산, 통계 집계, 대량 알림&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;픽업 알림, 주문 상태 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;실패 복구, 작업 이력 관리에 강함&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;구현이 간단하고 가벼움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;초기 설정이 복잡하고 무거움&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;복잡한 처리나 대량 작업에는 한계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;width: 17.8744%; height: 25px;&quot;&gt;&lt;b&gt;오굿푸드 적용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.8551%; height: 25px;&quot;&gt;서비스 확장 후 정산&amp;middot;통계에 적합&lt;/td&gt;
&lt;td style=&quot;width: 42.2705%; height: 25px;&quot;&gt;초기 알림 기능에 적합&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 데이터 정합성 관리&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주문과 결제 과정에서 데이터 정합성을 유지하는 것이 중요&lt;/li&gt;
&lt;li&gt;동시성 문제와 결제 실패 경우 고려해야&amp;nbsp;&lt;/li&gt;
&lt;li&gt;수량과 결제 정보가 어긋나지 않도록 트랜잭션과 예외처리 강화&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3) 결제 API 연동&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Toss API 연동으로 구매 흐름 설계&lt;/li&gt;
&lt;li&gt;결제 API 응답값과 서비스 내부 주문 상태를 일관되게 연결&lt;/li&gt;
&lt;li&gt;결제가 성공하면 주문 상태를 확정하고, 결제가 실패하면 주문이 생성되지 않거나 재고가 복구&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;유저 플로우&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnaE5N/dJMcafmDZ0t/MTguxgUL0pu8BR9hzOfs8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnaE5N/dJMcafmDZ0t/MTguxgUL0pu8BR9hzOfs8K/img.png&quot; data-alt=&quot;사장님, 어드민, 구매자별 간단한 유저플로우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnaE5N/dJMcafmDZ0t/MTguxgUL0pu8BR9hzOfs8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnaE5N%2FdJMcafmDZ0t%2FMTguxgUL0pu8BR9hzOfs8K%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;601&quot; height=&quot;620&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사장님, 어드민, 구매자별 간단한 유저플로우&lt;/figcaption&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;span style=&quot;color: #141413;&quot;&gt;4. 결과 및 회고&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;실제 결과(서비스 화면)&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blfg5b/dJMcacQUZPD/mlRkk9tleFMtNaetkIOqDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blfg5b/dJMcacQUZPD/mlRkk9tleFMtNaetkIOqDk/img.png&quot; style=&quot;width: 32.6098%; margin-right: 10px;&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;766&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.39&quot; id=&quot;kEditorPhotosEditingImage-1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blfg5b/dJMcacQUZPD/mlRkk9tleFMtNaetkIOqDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblfg5b%2FdJMcacQUZPD%2FmlRkk9tleFMtNaetkIOqDk%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;353&quot; height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czd95I/dJMcaijkonw/QdklMdT4sCXr4xnpYUUk0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czd95I/dJMcaijkonw/QdklMdT4sCXr4xnpYUUk0k/img.png&quot; style=&quot;width: 32.6525%; margin-right: 10px;&quot; data-origin-width=&quot;353&quot; data-origin-height=&quot;765&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;33.43&quot; id=&quot;kEditorPhotosEditingImage-2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czd95I/dJMcaijkonw/QdklMdT4sCXr4xnpYUUk0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczd95I%2FdJMcaijkonw%2FQdklMdT4sCXr4xnpYUUk0k%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;353&quot; height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BmbCo/dJMcahLuAVy/fIoJWk4ViSZT4s7g3jYea0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BmbCo/dJMcahLuAVy/fIoJWk4ViSZT4s7g3jYea0/img.png&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;858&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.4121%;&quot; data-widthpercent=&quot;33.18&quot; id=&quot;kEditorPhotosEditingImage-4&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BmbCo/dJMcahLuAVy/fIoJWk4ViSZT4s7g3jYea0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBmbCo%2FdJMcahLuAVy%2FfIoJWk4ViSZT4s7g3jYea0%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;393&quot; height=&quot;858&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;서비스 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;자세한 서비스 화면은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://ohgoodteam.github.io/OhGoodFood/pages/guide.html&quot;&gt;https://ohgoodteam.github.io/OhGoodFood/pages/guide.html&lt;/a&gt;&lt;span style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 확인 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;잘 된 것&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1) 전체 서비스 흐름과 기능이 안정적으로 연결됨&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 등록, 상품 조회, 구매, 결제, 주문 확정, 픽업으로 이어지는 전체 흐름을 구성함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구매자, 사장님, 어드민 기능을 나누어 실제 서비스 운영 구조를 고려함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;단순 상품 조회 서비스가 아니라, 거래가 발생하고 관리되는 플랫폼 형태로 구현함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스의 핵심 흐름이 끊기지 않고 작동하도록 기획과 개발을 연결한 점이 잘 작동함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 초기 아이디어가 기능으로 잘 반영됨&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;ldquo;사장님은 로스율을 줄이고, 소비자는 할인 구매를 할 수 있다&amp;rdquo;는 초기 문제의식을 서비스 기능으로 구체화함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자영업자가 마감식품을 등록하고, 소비자가 이를 확인해 구매하는 구조를 구현함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;B2B와 B2C가 동시에 작동하는 플랫폼 방향을 기능에 반영함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아이디어 수준에 머무르지 않고 구매자&amp;middot;사장님&amp;middot;어드민의 역할로 나누어 서비스 구조를 완성함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;아쉬운 것 / 추가 기획안&lt;/b&gt;&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;color: #333333;&quot;&gt;&lt;b&gt;1) 기존 서비스의 불만사항을 더 적극적으로 반영하지 못함&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마감식품 플랫폼을 리서치하면서 기존 서비스에 대한 몇 가지 불만사항을 확인할 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;대표적으로 높은 수수료율, 마감 할인 플랫폼에 입점하면 &amp;ldquo;장사가 안 되는 매장&amp;rdquo;처럼 보일 수 있다는 인식, 포스기와 별도 연동되지 않아 휴대폰으로 주문을 확인해야 하는 불편함이 있었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;프로젝트 당시에는 핵심 기능 구현에 집중하느라 이러한 운영상의 불편함까지 충분히 반영하지 못함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt; &lt;b&gt; &lt;/b&gt; 추가 기획안&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;초기 입점 사장님에게 낮은 수수료 또는 무료 등록 기간을 제공해 진입 장벽을 낮춤&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;ldquo;마감 할인&amp;rdquo;이라는 표현보다 &amp;ldquo;오늘의 특가&amp;rdquo;, &amp;ldquo;친환경 소비&amp;rdquo;, &amp;ldquo;로스 절감 캠페인&amp;rdquo;처럼 긍정적인 메시지로 브랜딩&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사장님용 주문 확인 화면을 단순화하고, 추후 POS 연동 또는 태블릿 전용 관리자 화면을 기획&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;주문이 들어왔을 때 사장님이 별도로 앱을 계속 확인하지 않아도 되도록 알림 기능 강화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 서비스 UI/UX의 일관성이 부족했음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;모바일 사이즈를 고려해 화면을 구성했지만, 완전한 반응형 웹으로 구현하지는 못함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;모바일 환경에서는 일부 화면이 깨지거나 사용성이 떨어질 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;팀원들이 각자 담당 기능의 프론트 화면을 구현하면서 색상, 버튼, 여백, 카드 디자인 등의 일관성이 부족했음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스 전체를 관통하는 디자인 시스템이나 공통 컴포넌트 기준이 충분하지 않았음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;  추가 기획안&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;색상을 줄이고 핵심 CTA 버튼 중심으로 화면을 단순화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 카드, 버튼, 상태 배지, 입력 폼 등 공통 UI 컴포넌트 정의&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;모바일 우선 레이아웃을 기준으로 반응형 화면 재구성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구매자 화면과 사장님 화면의 목적을 분리해 UX 구조 개선&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;상품 탐색 화면은 빠른 비교가 가능하도록, 사장님 화면은 주문 처리 속도를 높일 수 있도록 설계&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) 기존 서비스 벤치마킹이 더 필요했음&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;프로젝트를 진행하며 럭키밀, 라스트오더, Too Good To Go와 같은 유사 서비스를 확인했지만, 이를 충분히 구조적으로 분석하지는 못함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기존 서비스가 어떤 구매 흐름을 제공하는지, 어떤 방식으로 사장님을 입점시키는지, 어떤 불만사항이 있는지를 더 자세히 분석했다면 기획 완성도를 높일 수 있었을 것 같음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;특히 랜덤 구성 상품, 픽업 시간, 주문 취소, 노쇼 방지, 수수료 정책 등은 추가로 비교해볼 만한 요소였음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt; &lt;b&gt; &lt;/b&gt; 추가 기획안&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기존 서비스의 사용자 리뷰를 분석해 반복적으로 등장하는 불편사항 정리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사장님 입장에서 입점, 상품 등록, 주문 확인, 정산 과정의 불편함 분석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;구매자 입장에서 상품 탐색, 예약, 결제, 픽업 과정의 이탈 지점 분석&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;벤치마킹 결과를 바탕으로 오굿푸드의 기능 우선순위 재정의&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스 차별점을 &amp;ldquo;기능 추가&amp;rdquo;가 아니라 &amp;ldquo;운영 흐름 개선&amp;rdquo; 관점에서 설정&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;/div&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;b&gt;  Fin&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 오굿푸드는 Spring Legacy, JSP, HTML/CSS 기반의 서비스 개발 경험이라는 의의와 함께, 좋은 아이디어를 실제 사용자 흐름과 운영 구조로 구체화해본 기획 경험으로도 의미 있는 프로젝트였습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용자 경험을 고려하고 어드민 서비스를 함께 개발해 탄탄한 서비스 기획/개발 경험을 쌓을 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내기만사성</category>
      <category>내가만사성</category>
      <category>마감식품특가플랫폼</category>
      <category>오굿푸드</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/12</guid>
      <comments>https://gani00.tistory.com/12#entry12comment</comments>
      <pubDate>Wed, 10 Jun 2026 15:26:43 +0900</pubDate>
    </item>
    <item>
      <title>탐라탐라 |  LLM 기반 제주 여행 일정 추천 서비스</title>
      <link>https://gani00.tistory.com/10</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;0. 프로젝트 개요&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;탐라탐라&amp;nbsp;|&amp;nbsp;LLM&amp;nbsp;기반&amp;nbsp;제주&amp;nbsp;여행&amp;nbsp;일정&amp;nbsp;추천&amp;nbsp;서비스&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;사용자의 여행 취향과 일정에 따라 AI 기반 맞춤형 제주 여행 코스를 추천하는 웹 서비스이다.&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;사용자가 복잡한 검색 과정을 거치지 않고도 자신의 취향에 맞는 제주 여행 코스를 구성하고,&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;루트 설정부터 준비물 까지 한번에 해결할 수 있는 에이전트를 개발하는 것을 목적으로 삼았다.&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;개발 기간 / 팀 구성&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #73726c; text-align: start;&quot;&gt;2024. 09 - 2024. 11 / BE 2, FE 2, 삼성리서치 멘토&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;내 역할&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;서비스 기획 (컨셉 기획 &amp;middot; 경쟁사 분석 &amp;middot; 기능 정의)&lt;/span&gt;
&lt;div style=&quot;color: #73726c; text-align: start;&quot;&gt;백엔드 개발 (LLM 응답 구조 개선을 위한 RAG 도입, API 개발)&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;color: #141413;&quot;&gt;1. 문제 정의&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;문제 발견&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 제주 여행은 선택지가 다양하고, 이동 루트의 중요성이 높은 여행지임&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 관련 정보의 양은 충분하지만 다양한 요건을 고려해 선별하는 부담이 커짐&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 다양한 플랫폼을 비교하지 않고 하나의 서비스로 해결할 수 있는 편리함이 요구됨&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3d3d3a; letter-spacing: 0px;&quot;&gt;타겟 유저&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;제주도 여행을 준비하는 모든 사용자&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 여러 플랫폼을 비교하지 않고, 개인 취향을 반영하는 여행 계획을 세우고 싶어하는 사용자&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;2. 기존 서비스와의 차별점&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 경쟁 서비스 분석&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&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;color: #333333;&quot;&gt;다양한 여행 서비스를 제공하는 플랫폼에서 AI를 활용해 여행 일정을 추천해주는 서비스를 분석해 보았다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서비스&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 37.5581%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;특징&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.9768%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;한계&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;트리플 AI 일정 추천&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 37.5581%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여행지, 기간, 여행 스타일 라벨 기반으로 AI가 일정 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.9768%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실시간으로 요구사항을 추가하거나 대화형으로 수정하기 어려움&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마이리얼트립 AI 여행 플래너&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 37.5581%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;보유 DB와 GPT 기반으로 일정 및 관련 상품 추천&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.9768%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;번역 품질이 어색하거나 국내 여행지 답변이 미비할 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;viiv&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 37.5581%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;질문형 자연어 입력과 쇼츠 형식의 시각적 일정 제공&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.9768%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정해진 질문 중심이라 상호작용의 깊이가 제한적임&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 우리 서비스의 포지션&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;실시간 상호작용&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 대화형 인터페이스를 통해서 일정 추천 및 수정이 실시간으로 이어질 수 있음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;개인 성향 반영&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 대화가 이어질수록 사용자의 세부 요구를 반영해 보다 개인화된 일정 추천 가능&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;답변의 신뢰도&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 환각의 가능성을 줄이고자 정보 신뢰성을 높이는 방향으로 설계&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 데이터 기반 추천 구조 적용&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;color: #141413;&quot;&gt;3. 기획 과정&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;주요기능&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1) 사용자 맞춤형 여행 추천&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 사용자의 입력을 바탕으로 기간, 동반자, 선호 테마를 분석해 LLM이 여행 일정을 추천하도록 설계.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 추천 품질에 영향을 주는 핵심 정보만을 입력항목으로 설정.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 실시간 대화형 일정 수정&lt;/b&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- LLM의 추천 결과에 따라 실시간 대화형 인터페이스를 통해 계획의 일부을 수정할 수 있도록 설계.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 여행 계획의 초안을 바탕으로 보다 개인화 된 일정으로 발전 가능.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) RAG 기반 장소 데이터 활용&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- LLM의 환각(Hallucination) 문제를 해결하기 위한 주요 기능&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 직접 수집한 장소 데이터를 바탕으로 DB를 구성해 RAG 구조를 적용함으로써 신뢰도 높은 응답 결과 도출 가능.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;4) 세부 일정 및 경로 확인&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 지도를 활용한 세부 일정을 파악할 수 있고, 지도 API를 활용해 길찾기 기능으로 연결할 수 있도록 설계.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;5) 여행 일정 저장 및 관리&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 생성된 여행 일정을 저장하고, 다시 확인할 수 있는 기능&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;가장 어려웠던 결정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1) AI 기능의 신뢰 문제&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 환각 문제 &amp;rarr; RAG 구조 도입&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- SSE 문제 &lt;span style=&quot;text-align: start;&quot;&gt;&amp;rarr; 응답 시간을 고려해 실시간 스트리밍 설계&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 대화의 저장 방법 및 용량, 빈도&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 사용자 경험의 제공 범위&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 여행 일정 추천 서비스는 확장 가능성이 많음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 기간 내 개발 가능 기능과 핵심 기능 위주로 설계&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) 커뮤니티 기능&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 서비스 재방문과 콘텐츠를 쌓을 수 있다는 장점&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 일정 추천의 메인 기능보다 중요도가 높아질 수 있다는 한계로 확장 기능으로 남겨둠&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시퀸스다이어그램&lt;/b&gt;&lt;span style=&quot;color: #3d3d3a; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tHosn/dJMcad3f1Gf/wcpR6L0B7PB1ZgwR0cuY71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tHosn/dJMcad3f1Gf/wcpR6L0B7PB1ZgwR0cuY71/img.png&quot; data-alt=&quot;시퀸스다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tHosn/dJMcad3f1Gf/wcpR6L0B7PB1ZgwR0cuY71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtHosn%2FdJMcad3f1Gf%2FwcpR6L0B7PB1ZgwR0cuY71%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;731&quot; height=&quot;477&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시퀸스다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;span style=&quot;color: #141413;&quot;&gt;4. 결과 및 회고&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;실제 결과(서비스 화면)&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUPA1s/dJMcaf7Rci6/QLPDbzYs46Dpbv8UQcpiJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUPA1s/dJMcaf7Rci6/QLPDbzYs46Dpbv8UQcpiJ1/img.png&quot; data-alt=&quot;대화 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUPA1s/dJMcaf7Rci6/QLPDbzYs46Dpbv8UQcpiJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUPA1s%2FdJMcaf7Rci6%2FQLPDbzYs46Dpbv8UQcpiJ1%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;587&quot; height=&quot;277&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대화 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&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;&lt;a href=&quot;https://github.com/gaaaani/2024-2-SCS4031-jjambbong-3/blob/main/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/gaaaani/2024-2-SCS4031-jjambbong-3/blob/main/README.md&lt;/a&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;잘 된 것&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;1) 문제 정의와 기획 과정&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 실제 불편 사항에서 출발해 서비스를 기획&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 경쟁 서비스 분석으로 실시간 대화형 서비스로 차별화 요소를 추가함&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 서비스 범위와 신뢰성 문제&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 부가 기능을 넣기 보다는 여행 일정 추천과 관리에 집중&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 응답의 고도화를 위해 데이터를 기반으로 추천 구조를 적용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3) 최신 기술의 활용&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- LLM, RAG, LangChain, Pinecone 등 최신 기술을 활용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 프롬프팅을 통한 서비스 목적에 벗어나는 대화 제한&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;아쉬운 것&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) 실제 사용자 검증이 부족함&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 실사용자 대상으로 충분한 테스트를 진행하지 못함&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 개인화의 척도나 만족도에서 객관적인 수치적 성과를 얻어내지 못한 어려움&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2) 일정 내 지도와의 연계성에서 품질이 떨어짐&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 구현 과정에서 지도 연계 품질이 정교하지 못했음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 추천 루트가 최단거리 중심으로 구현되면서 실제 지형을 반영하지 못한 한계가 있었음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 다양한 교통수단을 고려한 추천이 부족했음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3) 불필요한 UI/UX 흐름&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 일정 추천 과정의 단계나 추천 결과를 확인하고 저장하는 과정에서 직관성이 떨어짐&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 추천 결과를 시각화와 함께 카드나 타임라인등의 형태로 보여줬으면 좋았을 듯&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내기만사성</category>
      <category>내기만사성</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/10</guid>
      <comments>https://gani00.tistory.com/10#entry10comment</comments>
      <pubDate>Wed, 3 Jun 2026 14:59:59 +0900</pubDate>
    </item>
    <item>
      <title>Reading Routine | 독서 기록 및 루틴 서비스</title>
      <link>https://gani00.tistory.com/9</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9qi14/dJMcagloRhl/SLD0wowkg1830DioIgaPVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9qi14/dJMcagloRhl/SLD0wowkg1830DioIgaPVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9qi14/dJMcagloRhl/SLD0wowkg1830DioIgaPVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9qi14%2FdJMcagloRhl%2FSLD0wowkg1830DioIgaPVK%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;340&quot; height=&quot;123&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0. &lt;span style=&quot;color: #141413;&quot;&gt;프로젝트 개요&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;Reading Routine | 독서 기록 및 루틴 서비스&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;독서 루틴 형성과 기록 관리를 돕는 웹 기반 서비스이다.&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;디지털 도구 활용 선호도를 기반으로 현대인의 독서율 향상에 기여하는 것을 목적으로 삼고 있다.&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3d3d3a; letter-spacing: 0px;&quot;&gt;개발 기간 / 팀 구성&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;2024. 09 - 2024. 11 / BE 2, FE 2&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;내 역할&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;서비스 기획 (컨셉 기획 &amp;middot; 경쟁사 분석 &amp;middot; 기능 정의)&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;백엔드 개발 (도서 API 연동, 서재&amp;amp;루틴 기능 개발)&lt;/div&gt;
&lt;div style=&quot;color: #185fa5;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;span style=&quot;color: #141413;&quot;&gt;문제 정의&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;문제 발견&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;1)&amp;nbsp; 독서 앱 대부분 책 기록에만 집중되어 있음&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;2)&amp;nbsp; 독서하는 장소를 기록하고 싶음&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;3)&amp;nbsp; 독서를 루틴화 하고, 같은 루틴을 공유하고 싶음&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;-&amp;gt; 독서 경험 자체를 담으며, 장소와 함께 독서를 기록하는 루틴 형성을 통해 기억과 감각을 연결시킬 수 있음&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;타겟 유저&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독서를 하고 싶은데 꾸준히 못 하는 사람 / 독서 루틴을 공유하고 싶은 사람&lt;/p&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;2. 기존 서비스와의 차별점&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;경쟁 서비스 분석&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;1) 북적북적&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;책 검색&amp;middot;기록, 페이지 수 트래킹, 월별 통계 제공. 읽은 권수를 cm로 환산해 캐릭터 리워드를 부여하는 등 디자인과 게임 요소가 강점. 독서에 흥미를 갖게 하는 입문용 앱으로 포지션.&lt;/div&gt;
&lt;span style=&quot;background-color: #fcebeb; color: #a32d2d; text-align: start;&quot;&gt;한계 &amp;mdash; 카테고리별 통계 없음, 루틴&amp;middot;습관화 기능 부재&lt;/span&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;2) 북덕방&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;독서 달력&amp;middot;타이머&amp;middot;메모(사진 밑줄) 등 기록 기능이 충실. 독서 모임 찾기 기능으로 오프라인 커뮤니티 연결 시도.&lt;/div&gt;
&lt;span style=&quot;background-color: #fcebeb; color: #a32d2d; text-align: start;&quot;&gt;한계 &amp;mdash; 루틴 관리 없음, 장소 기록 불가, 사용자 간 동기부여 연결 약함&lt;/span&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;3) 루티너리&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a; text-align: start;&quot;&gt;루틴 타이머&amp;middot;습관 트래킹&amp;middot;달력 제공. 독서 전용이 아닌 범용 루틴 앱으로, 루틴 관리 자체는 강력함.&lt;/div&gt;
&lt;span style=&quot;background-color: #fcebeb; color: #a32d2d; text-align: start;&quot;&gt;한계 &amp;mdash; 독서 특화 기능 없음, 세부 통계는 유료 버전에만 제공&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;color: #141413; text-align: start;&quot;&gt;기능 비교표&lt;/div&gt;
&lt;table style=&quot;color: #000000; text-align: start; border-collapse: collapse; width: 53.6047%; height: 259px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;height: 17px; width: 33.1984%;&quot;&gt;기능&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 15.587%;&quot;&gt;리딩루틴&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 14.7113%;&quot;&gt;북적북적&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 13.7085%;&quot;&gt;북덕방&lt;/td&gt;
&lt;td style=&quot;height: 17px; width: 15.7612%;&quot;&gt;루티러니&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;책 검색 및 기록&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;독서&amp;middot;루틴 달력&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #0f6e56; text-align: center;&quot;&gt;O&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;독서&amp;middot;루틴 타이머&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;메모&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #0f6e56; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;장소 저장 기능&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;color: #141413; height: 21px; width: 33.1984%;&quot;&gt;커뮤니티&amp;middot;경쟁 기능&lt;/td&gt;
&lt;td style=&quot;background-color: #e1f5ee; color: #0f6e56; height: 21px; width: 15.587%; text-align: center;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 14.7113%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;td style=&quot;color: #854f0b; height: 21px; width: 13.7085%; text-align: center;&quot;&gt;△&lt;/td&gt;
&lt;td style=&quot;color: #a32d2d; height: 21px; width: 15.7612%; text-align: center;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우리 서비스의 포지션&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1) 공통 한계&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;기존 서비스들을 기록을 메인으로, 습관화도 동기부여까지 연결되지 않는다는 한계점을 가진다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;div style=&quot;color: #185fa5; text-align: start;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2) 유저 인터뷰에서 발견한 니즈&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #0c447c; text-align: start;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&quot;독서한 장소를 함께 기록하고 싶다 &amp;mdash; 내가 어디서 가장 많이 읽는지 알고 싶다&quot;는 니즈 발견. 카페, 도서관 등 독서 공간과 기록을 연결하는 기능은 기존 서비스 어디에도 없었고, 이것이 리딩루틴의 핵심 차별점으로 설정했다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3) 차별화 포인트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 독서 장소 기록 &amp;rarr; 지도 API 활용&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;- 루틴 타이머 제공 &amp;rarr; 루틴별 기록 및 관리 가능&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 리딩 클럽 &amp;rarr; 다른 사용자와 루틴 및 기록 공유&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;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;3. 기획 과정&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;주요 기능&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #141413;&quot;&gt;1) 회원 관리&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 아이디&amp;middot;비밀번호 기반 로그인 및 회원가입. 개인화 서비스의 기반.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- Django(JWT)를 이용한 로그인/로그아웃 구현.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #141413;&quot;&gt;2) 루틴 기록&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 독서 루틴 등록 후 수행 시 책 제목&amp;middot;장소&amp;middot;한줄소감 포함한 독서록 작성.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 캘린더로 패턴 확인.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 루틴 등록시 설정한 시간을 바탕으로 타이머 작동.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #141413;&quot;&gt;3) 서재 관리&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 읽고 있는 책 등록. 책별 기록과 연결된 루틴을 한곳에서 확인.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 알라딘 API 활용으로 책 검색 용이.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #141413;&quot;&gt;4) 리딩 클럽&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 다른 사용자와 루틴을 공유하고 서로의 기록 확인. 함께하는 독서 습관 형성.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #141413;&quot;&gt;5) 커뮤니티&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 시간대별 인기 장소&amp;middot;책&amp;middot;루틴 확인. 다른 사용자 기록 탐색 및 참여 가능.&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;- 지도 API 활용으로 장소 등록 및 확인 가능.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3d3d3a; letter-spacing: 0px;&quot;&gt;가장 어려웠던 결정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;1) 루틴 알림 기능&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 웹 서비스 특성상 구현이 어려워 배제&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 개선 포인트로 남음&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;2) API 활용&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 도서&amp;middot;지도 API 후보에 대해 정확도&amp;middot;비용&amp;middot;연동 난이도를 기준으로 선정&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;b&gt;3) 메인 화면 구성&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 장소, 루틴, 참여 클럽 중 메인 화면 구성에 포함할 기능&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;- 서비스 차별점인 장소에 대한 것을 메인 화면 중앙에 배치&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;유저 플로우 / ERD&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nsJGg/dJMcajbhyug/I9k9q1JXKPNjUyshqJ1l6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nsJGg/dJMcajbhyug/I9k9q1JXKPNjUyshqJ1l6k/img.png&quot; data-alt=&quot;유저플로우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nsJGg/dJMcajbhyug/I9k9q1JXKPNjUyshqJ1l6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnsJGg%2FdJMcajbhyug%2FI9k9q1JXKPNjUyshqJ1l6k%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;571&quot; height=&quot;428&quot; data-origin-width=&quot;1707&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유저플로우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr5Pec/dJMcadoCyzN/ziTfdXXqz6NSmwqae5kv40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr5Pec/dJMcadoCyzN/ziTfdXXqz6NSmwqae5kv40/img.png&quot; data-alt=&quot;ERD&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr5Pec/dJMcadoCyzN/ziTfdXXqz6NSmwqae5kv40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr5Pec%2FdJMcadoCyzN%2FziTfdXXqz6NSmwqae5kv40%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;597&quot; height=&quot;416&quot; data-origin-width=&quot;1672&quot; data-origin-height=&quot;1166&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ERD&lt;/figcaption&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;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #141413;&quot;&gt;4. 결과 및 회고&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;실제 결과(서비스 화면)&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NtWGw/dJMcagZZaJm/ATgiHUaCWohEDCHriyupkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NtWGw/dJMcagZZaJm/ATgiHUaCWohEDCHriyupkk/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;976&quot; data-is-animation=&quot;false&quot; style=&quot;width: 29.484%; margin-right: 10px;&quot; data-widthpercent=&quot;30.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NtWGw/dJMcagZZaJm/ATgiHUaCWohEDCHriyupkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNtWGw%2FdJMcagZZaJm%2FATgiHUaCWohEDCHriyupkk%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;390&quot; height=&quot;976&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0wLu2/dJMcagMxsBg/7JzRtG9nFcEMZr8OaR29qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0wLu2/dJMcagMxsBg/7JzRtG9nFcEMZr8OaR29qK/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.0952%; margin-right: 10px;&quot; data-widthpercent=&quot;34.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0wLu2/dJMcagMxsBg/7JzRtG9nFcEMZr8OaR29qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0wLu2%2FdJMcagMxsBg%2F7JzRtG9nFcEMZr8OaR29qK%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;390&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emIcd1/dJMcaiwLQxk/PfMS2XAxqArzGV2RYj93JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emIcd1/dJMcaiwLQxk/PfMS2XAxqArzGV2RYj93JK/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 34.0952%;&quot; data-widthpercent=&quot;34.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emIcd1/dJMcaiwLQxk/PfMS2XAxqArzGV2RYj93JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemIcd1%2FdJMcaiwLQxk%2FPfMS2XAxqArzGV2RYj93JK%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;390&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;메인페이지, 루틴 리스트, 내 서재&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCalC4/dJMcahknSfM/d3cBKW8QthIUkecUstau90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCalC4/dJMcahknSfM/d3cBKW8QthIUkecUstau90/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCalC4/dJMcahknSfM/d3cBKW8QthIUkecUstau90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCalC4%2FdJMcahknSfM%2Fd3cBKW8QthIUkecUstau90%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;390&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5F8Nk/dJMcagFLXMu/B84YEl3wvKSem7qQd1msYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5F8Nk/dJMcagFLXMu/B84YEl3wvKSem7qQd1msYk/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5F8Nk/dJMcagFLXMu/B84YEl3wvKSem7qQd1msYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5F8Nk%2FdJMcagFLXMu%2FB84YEl3wvKSem7qQd1msYk%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;390&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQFzo7/dJMcac4nctd/EpLEbn8K3NRKas2g505fq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQFzo7/dJMcac4nctd/EpLEbn8K3NRKas2g505fq0/img.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;844&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQFzo7/dJMcac4nctd/EpLEbn8K3NRKas2g505fq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQFzo7%2FdJMcac4nctd%2FEpLEbn8K3NRKas2g505fq0%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;390&quot; height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;통계 기록 보기, 리딩클럽 상세&lt;/figcaption&gt;
&lt;/figure&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;size14&quot;&gt;&lt;a title=&quot;Reading Routine git&quot; href=&quot;https://github.com/CSID-DGU/2024-2-OSSProj-PAGE6-06/blob/main/Doc/%EC%88%98%ED%96%89%EA%B3%84%ED%9A%8D%EC%84%9C.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/CSID-DGU/2024-2-OSSProj-PAGE6-06/blob/main/Doc/%EC%88%98%ED%96%89%EA%B3%84%ED%9A%8D%EC%84%9C.md&lt;/a&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;잘 된 것&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;color: #73726c;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1)&amp;nbsp; 지도와 서점 API 도입으로 장소 기반 기록이라는 차별점을 실제 기능으로 구현.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2)&amp;nbsp; UI 완성도 - 직관적인 디자인으로 구현&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3)&amp;nbsp; 첫 본격 프로젝트로서 기획&amp;middot;개발 전 과정을 직접 경험&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 서비스 기획부터 구현까지 완주한 프로젝트로, 이후 프로젝트의 기반이 됨.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div style=&quot;color: #3d3d3a;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아쉬운 것 / 다음엔 다르게 할 것&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;color: #73726c;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1) 루틴 알림 기능 미구현 &lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 습관화를 돕는 핵심 요소였는데, 앱이 아닌 웹이라 우선순위에 밀려 빠진 것이 아쉬움 &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2) &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;서비스 경량화 필요 &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 클럽 기능을 배제하고 개인 독서 루틴 형성에 집중하는 방향도 유효했을 것&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3) 핵심 가치 전달 방식 부족 &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 기능은 구현됐지만 서비스의 차별점이 명확히 전달되도록 설계하지 못함. 다음엔 기획 단계에서 더 고민할 것&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4) 배포 후 운영 경험 부재 &lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #73726c;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;-실제 유저 데이터 기반의 유지보수&amp;middot;개선 사이클을 경험하지 못함. 다음엔 배포 이후 단계까지 계획에 포함할 것&lt;/span&gt;&lt;/div&gt;
&lt;/div&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;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5) 초기 기획 시 제안했던 기능 누락&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 도서관 API 활용한 근처 도서관 소장도서 검색 기능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 도서 추천 알고리즘&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 서점 링크 연동으로 구매 유도&lt;/span&gt;&lt;/p&gt;</description>
      <category>내기만사성</category>
      <category>내기만사성</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/9</guid>
      <comments>https://gani00.tistory.com/9#entry9comment</comments>
      <pubDate>Tue, 2 Jun 2026 15:38:12 +0900</pubDate>
    </item>
    <item>
      <title>내기만사성</title>
      <link>https://gani00.tistory.com/8</link>
      <description>&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;내가 기획자로 대성하는 그날까지 내기만사성 상태를 유지하겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J2FdO/dJMcaaesAId/ElDkdZuzxztbL9wSMljq7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J2FdO/dJMcaaesAId/ElDkdZuzxztbL9wSMljq7k/img.png&quot; data-alt=&quot;치얼스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J2FdO/dJMcaaesAId/ElDkdZuzxztbL9wSMljq7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ2FdO%2FdJMcaaesAId%2FElDkdZuzxztbL9wSMljq7k%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;326&quot; height=&quot;277&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;치얼스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;죽은 블로그를 다시 살려보자는 마음으로 기록하고,,&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내기만사성</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/8</guid>
      <comments>https://gani00.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 2 Jun 2026 12:49:02 +0900</pubDate>
    </item>
    <item>
      <title>02-3. 모의고사 (프로그래머스, JAVA)</title>
      <link>https://gani00.tistory.com/7</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  [Java] 모의고사 (프로그래머스)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 링크 &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/42840&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1773215131819&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ay3hI/dJMb8WexW6k/LPQ8STkoREONMeo2aOMqE0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/noJkA/dJMb84p610l/CJa0daURAGTT5ukYPDO5tK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42840&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ay3hI/dJMb8WexW6k/LPQ8STkoREONMeo2aOMqE0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/noJkA/dJMb84p610l/CJa0daURAGTT5ukYPDO5tK/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;정해진 패턴으로 문제를 찍는다.&lt;/b&gt;&lt;br /&gt;실제 정답 배열이 주어졌을 때 &lt;b&gt;가장 많이 맞춘 사람을 구하는 문제&lt;/b&gt;이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  풀이 과정&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ 문제 분석&lt;/h3&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;b&gt;반복 패턴&lt;/b&gt;으로 답을 찍는다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;수포자1 &amp;rarr; 1,2,3,4,5
수포자2 &amp;rarr; 2,1,2,3,2,4,2,5
수포자3 &amp;rarr; 3,3,1,1,2,2,4,4,5,5
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패턴이 &lt;b&gt;반복된다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;answers 배열 길이는 &lt;b&gt;최대 10,000&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 문제를 해결하려면 answers 배열과 수포자 패턴을 비교해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ 접근 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 &lt;b&gt;완전탐색(Brute Force)&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;=&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;answers 배열 전체를 순회하면서 각 수포자의 패턴과 비교 해보자&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;pre class=&quot;stylus&quot;&gt;&lt;code&gt;O(N)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ 핵심 아이디어&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;✔ 패턴 반복 처리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 핵심은 &lt;b&gt;패턴이 반복된다는 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 수포자1 패턴&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;1 2 3 4 5
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제가 10개라면&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1 2 3 4 5 1 2 3 4 5
&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;이를 해결하는 방법이 바로 &lt;b&gt;나머지 연산(%)&lt;/b&gt;이다.&lt;/p&gt;
&lt;pre class=&quot;coq&quot;&gt;&lt;code&gt;pattern[i % pattern.length]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;soopoja1[i % 5]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4️⃣ 알고리즘 설계&lt;/h3&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;1. 수포자 패턴 배열 생성
2. answers 배열 순회
3. 정답 비교 후 점수 증가
4. 최고 점수 찾기
5. 최고 점수자를 결과 배열에 추가&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  최종 코드&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {

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

        int[] soopoja1 = {1, 2, 3, 4, 5};
        int[] soopoja2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] soopoja3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};

        int[] score = new int[3];

        // 정답 비교
        for(int i = 0; i &amp;lt; answers.length; i++){

            if(answers[i] == soopoja1[i % 5]){
                score[0]++;
            }

            if(answers[i] == soopoja2[i % 8]){
                score[1]++;
            }

            if(answers[i] == soopoja3[i % 10]){
                score[2]++;
            }
        }

        // 최고 점수 찾기
        int max = Math.max(score[0], Math.max(score[1], score[2]));

        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        // 최고 점수자 찾기
        for(int i = 0; i &amp;lt; score.length; i++){
            if(score[i] == max){
                list.add(i + 1);
            }
        }

        // List &amp;rarr; 배열 변환
        return list.stream()
                   .mapToInt(Integer::intValue)
                   .toArray();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⏱ 시간복잡도&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답 배열을 한 번 순회&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;O(N)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대 문제 수&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;10,000
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 충분히 빠르게 실행된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제에서 기억해야 할 핵심은 다음 3가지이다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1️⃣ 완전탐색 (Brute Force)
2️⃣ 패턴 반복 처리 (% 연산)
3️⃣ 최대값 찾기
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 나머지 계산!&lt;/p&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;i % pattern.length
&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>내코가석자</category>
      <category>모의고사</category>
      <category>알고리즘</category>
      <category>알고리즘날먹하기</category>
      <category>코딩테스트합격자되기</category>
      <category>프로그래머스</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/7</guid>
      <comments>https://gani00.tistory.com/7#entry7comment</comments>
      <pubDate>Wed, 11 Mar 2026 16:50:24 +0900</pubDate>
    </item>
    <item>
      <title>02-2. 두 개 뽑아서 더하기 (프로그래머스, JAVA)</title>
      <link>https://gani00.tistory.com/6</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;  [Java] 두 개 뽑아서 더하기 (프로그래머스)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 링크 &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/68644&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/68644&lt;/a&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  풀이 과정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ 문제 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 핵심 조건&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서로 &lt;b&gt;다른 인덱스&lt;/b&gt;의 두 수를 선택&lt;/li&gt;
&lt;li&gt;두 수의 &lt;b&gt;합을 모두 구하기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중복 제거&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오름차순 정렬&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;numbers = [2,1,3,4,1]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가능한 합&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;2+1
2+3
2+4
2+1
1+3
1+4
1+1
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 수의 조합 개수&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;n(n-1)/2
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ 접근 방식&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;✔ 이중 반복문&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 인덱스를 선택하기 위해 &lt;b&gt;이중 반복문&lt;/b&gt;을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;for(int i = 0; i &amp;lt; numbers.length - 1; i++){
    for(int j = i + 1; j &amp;lt; numbers.length; j++){
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 i, j 조합이 생성되고&lt;/p&gt;
&lt;pre class=&quot;clojure&quot;&gt;&lt;code&gt;(i, j)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 인덱스 사용 방지 가능&lt;/li&gt;
&lt;li&gt;중복 조합 방지 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;✔ 중복 제거 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 제거 방법은 크게 2가지가 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;방법 1. List + contains()&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리스트에 값이 이미 존재하면 추가하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;if(!list.contains(sum)){
    list.add(sum);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 contains()는 내부적으로 &lt;b&gt;O(n)&lt;/b&gt; 탐색이기 때문에 데이터가 많아질수록 &lt;b&gt;성능이 떨어질 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;방법 2. HashSet&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HashSet은 &lt;b&gt;중복을 자동으로 제거&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 존재하는 값이면 자동 무시.&lt;/p&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;set.add(value)
&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 class=&quot;stylus&quot;&gt;&lt;code&gt;O(1)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3️⃣ 알고리즘 설계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 흐름&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. 두 수의 합 구하기
2. 중복 제거
3. 정렬
4. 배열 반환
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  풀이 1 &amp;mdash; List 활용&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {

        // 결과 저장 리스트
        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        // 두 수의 합 계산
        for(int i = 0; i &amp;lt; numbers.length - 1; i++){
            for(int j = i + 1; j &amp;lt; numbers.length; j++){

                int sum = numbers[i] + numbers[j];

                // 중복 체크
                if(!list.contains(sum)){
                    list.add(sum);
                }
            }
        }

        // List &amp;rarr; 배열 변환
        int[] ans = new int[list.size()];
        for(int i = 0; i &amp;lt; list.size(); i++){
            ans[i] = list.get(i);
        }

        // 정렬
        Arrays.sort(ans);

        return ans;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  풀이 2 &amp;mdash; HashSet 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 제거를 위해 HashSet을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {

        // 중복 제거를 위한 HashSet
        HashSet&amp;lt;Integer&amp;gt; set = new HashSet&amp;lt;&amp;gt;();

        // 두 수의 합 구하기
        for(int i = 0; i &amp;lt; numbers.length - 1; i++){
            for(int j = i + 1; j &amp;lt; numbers.length; j++){
                set.add(numbers[i] + numbers[j]);
            }
        }

        // Set &amp;rarr; 정렬 &amp;rarr; 배열 변환
        return set.stream()
                .sorted()
                .mapToInt(Integer::intValue)
                .toArray();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;⏱ 시간복잡도&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중 반복문&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;O(n&amp;sup2;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;O(n log n)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 시간복잡도&lt;/p&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;O(n&amp;sup2;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이중 반복문이 가장 큰 영향)&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  정리&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1️⃣ 두 수의 조합 만들기 - 이중 반복&lt;/h4&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;for(int i = 0; i &amp;lt; n; i++)
    for(int j = i+1; j &amp;lt; n; j++)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2️⃣ 중복 제거&lt;/h4&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;1. List + contains
2. HashSet&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3️⃣ 컬렉션 &amp;rarr; 배열 변환&lt;/h4&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;set.stream()
   .sorted()
   .mapToInt(Integer::intValue)
   .toArray();
&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>알고리즘</category>
      <category>알고리즘날먹하기</category>
      <category>코딩테스트합격자되기</category>
      <category>프로그래머스</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/6</guid>
      <comments>https://gani00.tistory.com/6#entry6comment</comments>
      <pubDate>Wed, 11 Mar 2026 16:42:36 +0900</pubDate>
    </item>
    <item>
      <title>02-1. 배열 몸풀기 문제</title>
      <link>https://gani00.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코딩테스트를 준비하면서 가장 기본이 되는 자료구조는 &lt;b&gt;배열(Array)&lt;/b&gt;이다.&lt;br /&gt;배열 문제에서는 보통 다음 3가지 패턴이 자주 등장한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열 정렬&lt;/li&gt;
&lt;li&gt;중복 제거&lt;/li&gt;
&lt;li&gt;배열 &amp;harr; 리스트 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1️⃣ 배열 정렬하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수 배열을 정렬해서 반환하는 solution() 함수를 작성한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;import java.util.Arrays;

public class Main {

    private static int[] solution(int[] arr) {
        Arrays.sort(arr); // 오름차순 정렬
        return arr;
    }

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1};
        int[] sorted = solution(arr);

        System.out.println(Arrays.toString(sorted));
        // [1, 2, 5, 9]
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Arrays.sort()&lt;/b&gt;&lt;/h4&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;Arrays.sort(arr);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배열을 &lt;b&gt;오름차순으로 정렬&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;원본 배열 자체가 변경됨 (in-place 정렬)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간복잡도&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;O(n log n)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;원본 배열 유지 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬 시 원본 배열을 유지하고 싶다면 &lt;b&gt;복사 후 정렬&lt;/b&gt;을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;int[] copy = arr.clone();
Arrays.sort(copy);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;int[] copy = Arrays.copyOf(arr, arr.length);
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2️⃣ 배열 제어하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수 배열을 받아 &lt;b&gt;중복값 제거 -&amp;gt; &lt;/b&gt;&lt;b&gt;내림차순 정렬 &lt;/b&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;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;import java.util.*;

public class Main {

    private static int[] solution(int[] arr) {

        Arrays.sort(arr); // 오름차순 정렬

        List&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

        // 중복 제거
        int prev = arr[0];
        list.add(prev);

        for (int i = 1; i &amp;lt; arr.length; i++) {
            if (arr[i] != prev) {
                list.add(arr[i]);
                prev = arr[i];
            }
        }

        // 내림차순 정렬
        Collections.sort(list, Collections.reverseOrder());

        // List &amp;rarr; int[] 변환
        return list.stream().mapToInt(Integer::intValue).toArray();
    }

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 2, 5, 1};
        int[] sorted = solution(arr);

        System.out.println(Arrays.toString(sorted));
        // [9, 5, 2, 1]
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[풀이 과정]&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 배열 정렬&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;&lt;b&gt;오름차순 정렬&lt;/b&gt;한다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;Arrays.sort(arr);
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[5,2,9,2,5,1]
&amp;rarr;
[1,2,2,5,5,9]
&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;2. 중복 제거&lt;/p&gt;
&lt;pre class=&quot;q&quot;&gt;&lt;code&gt;int prev = arr[0];
list.add(prev);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 값을 저장하고 다를 경우만 추가한다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;if(arr[i] != prev)
// [1,2,2,5,5,9] &amp;rarr; [1,2,5,9]&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;size18&quot;&gt;3. 내림차순 정렬&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;Collections.sort(list, Collections.reverseOrder());
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; Collections.reverseOrder()&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 메서드는 내림차순 정렬 기준(Comparator)을 반환한다.&lt;/li&gt;
&lt;li&gt;내부적으로 큰 값 &amp;rarr; 작은 값 순서로 정렬&lt;/li&gt;
&lt;li&gt;기본형 배열에서는 사용할 수 없어 boxed() 해줘야 함&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 동작 과정&lt;/p&gt;
&lt;pre id=&quot;code_1773214187127&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. Arrays.sort() 실행
2. Comparator로 reverseOrder 사용
3. 큰 값이 앞으로 오도록 비교
4. 배열을 내림차순 정렬&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;size18&quot;&gt;4. List &amp;rarr; 배열 변환&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;list.stream().mapToInt(Integer::intValue).toArray();
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 책 풀이 (Stream API)&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;import java.util.Arrays;
import java.util.Collections;

public class Main {

    private static int[] solution(int[] arr) {

        Integer[] res = Arrays.stream(arr)
                .boxed()
                .distinct()
                .toArray(Integer[]::new);

        Arrays.sort(res, Collections.reverseOrder());

        return Arrays.stream(res)
                .mapToInt(Integer::intValue)
                .toArray();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Stream API 주요 메서드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;boxed() : 기본형 &amp;rarr; 참조형 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Comparator는 기본형 배열에 사용할 수 없음&lt;/p&gt;
&lt;pre class=&quot;fortran&quot;&gt;&lt;code&gt;int &amp;rarr; Integer
&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;size18&quot;&gt;distinct() : 중복 제거&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;for문 vs Stream&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;for문&lt;/td&gt;
&lt;td&gt;직접 제어 가능, 알고리즘 이해 쉬움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stream&lt;/td&gt;
&lt;td&gt;코드 간결, 선언형 프로그래밍&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;  정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 배열 정렬&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;Arrays.sort(arr); // 오름차순
Arrays.sort(arr, Collections.reverseOrder()); // 내림차순&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간복잡도&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;O(n log n)
&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;size18&quot;&gt;2. 중복 제거 방법&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;1. Set 사용
2. distinct()
3. 직접 비교
&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;size18&quot;&gt;3. List &amp;harr; 배열 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;List &amp;rarr; 배열&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;list.stream().mapToInt(Integer::intValue).toArray();
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열 &amp;rarr; List&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;Arrays.stream(arr).boxed().toList();
&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>내코가석자</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/5</guid>
      <comments>https://gani00.tistory.com/5#entry5comment</comments>
      <pubDate>Wed, 11 Mar 2026 16:32:41 +0900</pubDate>
    </item>
    <item>
      <title>02. 배열</title>
      <link>https://gani00.tistory.com/4</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;배열과 리스트&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1️⃣ 배열 (Array)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;크기가 고정&lt;/b&gt;된 연속된 메모리 공간에 데이터를 저장&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1차원 배열&lt;/b&gt;, &lt;b&gt;2차원 배열&lt;/b&gt;로 나뉨&lt;/li&gt;
&lt;li&gt;빠른 인덱스 접근이 가능하지만 크기 변경 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// 1차원 배열
int[]arr1= {1,2,3,4,5};
System.out.println(arr1[0]);// 1

// 값 변경
arr1[2]=10;// arr1 = {1, 2, 10, 4, 5}

// 2차원 배열
int[][]arr2= {
    {1,2,3},
    {4,5,6},
    {7,8,9}
};
System.out.println(arr2[1][2]);// 6

// 배열 길이
System.out.println(arr1.length);// 5
System.out.println(arr2.length);// 3 (행)
System.out.println(arr2[0].length);// 3 (열)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2️⃣ 리스트 (ArrayList)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;크기가 가변적&lt;/b&gt;인 배열 형태의 자료구조&lt;/li&gt;
&lt;li&gt;배열보다 편리하게 요소 추가, 삭제 가능&lt;/li&gt;
&lt;li&gt;ArrayList는 &lt;b&gt;List 인터페이스&lt;/b&gt;를 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;importjava.util.ArrayList;
importjava.util.List;

// ArrayList 초기화
List&amp;lt;String&amp;gt;list=newArrayList&amp;lt;&amp;gt;();

// 값 추가
list.add(&quot;apple&quot;);
list.add(&quot;banana&quot;);
list.add(&quot;cherry&quot;);

// 값 조회
System.out.println(list.get(0));// apple

// 값 수정
list.set(1,&quot;blueberry&quot;);// banana -&amp;gt; blueberry

// 값 삭제
list.remove(2);// cherry 삭제

// 리스트 크기
System.out.println(list.size());// 2

// 반복문
for (Strings :list) {
System.out.println(s);
}

// 람다식 forEach
list.forEach(s -&amp;gt;System.out.println(s));
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;✅ 정리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분 배열(Array) 리스트(ArrayList)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;크기&lt;/td&gt;
&lt;td&gt;고정&lt;/td&gt;
&lt;td&gt;가변&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;요소 추가/삭제&lt;/td&gt;
&lt;td&gt;불편&lt;/td&gt;
&lt;td&gt;편리 (add, remove)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;장점&lt;/td&gt;
&lt;td&gt;메모리 효율, 빠른 인덱스 접근&lt;/td&gt;
&lt;td&gt;동적 크기, 다양한 메서드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;단점&lt;/td&gt;
&lt;td&gt;크기 변경 불가&lt;/td&gt;
&lt;td&gt;인덱스 접근은 배열보다 약간 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>내코가석자</category>
      <category>알고리즘</category>
      <category>알고리즘날먹하기</category>
      <category>코딩테스트합격자되기</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/4</guid>
      <comments>https://gani00.tistory.com/4#entry4comment</comments>
      <pubDate>Sat, 7 Mar 2026 23:59:40 +0900</pubDate>
    </item>
    <item>
      <title>01. 필수 문법</title>
      <link>https://gani00.tistory.com/3</link>
      <description>&lt;div data-message-model-slug=&quot;gpt-5-3&quot; data-message-id=&quot;d5766a23-5dac-493e-9ad8-826dc73b24dd&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;h1 data-end=&quot;161&quot; data-start=&quot;139&quot; data-section-id=&quot;13allmn&quot;&gt;Java 코딩 테스트 필수 문법 정리&lt;/h1&gt;
&lt;h2 data-end=&quot;201&quot; data-start=&quot;163&quot; data-section-id=&quot;1pub6ut&quot; data-ke-size=&quot;size26&quot;&gt;1. Primitive Type vs Reference Type&lt;/h2&gt;
&lt;h3 data-end=&quot;229&quot; data-start=&quot;203&quot; data-section-id=&quot;4k36nn&quot; data-ke-size=&quot;size23&quot;&gt;Primitive Type (기본 타입)&lt;/h3&gt;
&lt;p data-end=&quot;244&quot; data-start=&quot;231&quot; data-ke-size=&quot;size16&quot;&gt;값 자체를 저장하는 타입&lt;/p&gt;
&lt;p data-end=&quot;253&quot; data-start=&quot;246&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 타입&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;313&quot; data-start=&quot;255&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;262&quot; data-start=&quot;255&quot; data-section-id=&quot;168iou3&quot;&gt;int&lt;/li&gt;
&lt;li data-end=&quot;271&quot; data-start=&quot;263&quot; data-section-id=&quot;18b9x5u&quot;&gt;long&lt;/li&gt;
&lt;li data-end=&quot;281&quot; data-start=&quot;272&quot; data-section-id=&quot;19a39dk&quot;&gt;float&lt;/li&gt;
&lt;li data-end=&quot;292&quot; data-start=&quot;282&quot; data-section-id=&quot;1a5lsal&quot;&gt;double&lt;/li&gt;
&lt;li data-end=&quot;304&quot; data-start=&quot;293&quot; data-section-id=&quot;d3omj0&quot;&gt;boolean&lt;/li&gt;
&lt;li data-end=&quot;313&quot; data-start=&quot;305&quot; data-section-id=&quot;18h88a8&quot;&gt;char&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;317&quot; data-start=&quot;315&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;367&quot; data-start=&quot;319&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;333&quot; data-start=&quot;319&quot; data-section-id=&quot;1472ykn&quot;&gt;&lt;b&gt;값 자체를 저장&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;349&quot; data-start=&quot;334&quot; data-section-id=&quot;1e1ppgl&quot;&gt;&lt;b&gt;연산 속도가 빠름&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;367&quot; data-start=&quot;350&quot; data-section-id=&quot;16lcrpp&quot;&gt;null을 가질 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772894988080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// primitive type
int a = 0;
long[] longs = new long[10];
float f = 10.5f;
double d = 10 / 3.0;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;481&quot; data-start=&quot;478&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;509&quot; data-start=&quot;483&quot; data-section-id=&quot;1r7god5&quot; data-ke-size=&quot;size23&quot;&gt;Reference Type (참조 타입)&lt;/h3&gt;
&lt;p data-end=&quot;534&quot; data-start=&quot;511&quot; data-ke-size=&quot;size16&quot;&gt;객체의 &lt;b&gt;메모리 주소를 저장하는 타입&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;543&quot; data-start=&quot;536&quot; data-ke-size=&quot;size16&quot;&gt;대표적인 타입&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;623&quot; data-start=&quot;545&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;556&quot; data-start=&quot;545&quot; data-section-id=&quot;16ebxym&quot;&gt;Integer&lt;/li&gt;
&lt;li data-end=&quot;565&quot; data-start=&quot;557&quot; data-section-id=&quot;17q0dmq&quot;&gt;Long&lt;/li&gt;
&lt;li data-end=&quot;575&quot; data-start=&quot;566&quot; data-section-id=&quot;psccwo&quot;&gt;Float&lt;/li&gt;
&lt;li data-end=&quot;586&quot; data-start=&quot;576&quot; data-section-id=&quot;160n4gt&quot;&gt;Double&lt;/li&gt;
&lt;li data-end=&quot;597&quot; data-start=&quot;587&quot; data-section-id=&quot;lt5ja5&quot;&gt;String&lt;/li&gt;
&lt;li data-end=&quot;611&quot; data-start=&quot;598&quot; data-section-id=&quot;1efw2gj&quot;&gt;ArrayList&lt;/li&gt;
&lt;li data-end=&quot;623&quot; data-start=&quot;612&quot; data-section-id=&quot;19ejdqe&quot;&gt;HashMap&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;627&quot; data-start=&quot;625&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;690&quot; data-start=&quot;629&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;645&quot; data-start=&quot;629&quot; data-section-id=&quot;1prbg3h&quot;&gt;객체의 &lt;b&gt;주소를 참조&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;657&quot; data-start=&quot;646&quot; data-section-id=&quot;1h1uq7q&quot;&gt;null 가능&lt;/li&gt;
&lt;li data-end=&quot;690&quot; data-start=&quot;658&quot; data-section-id=&quot;16skp9k&quot;&gt;Primitive보다 &lt;b&gt;연산 속도가 느릴 수 있음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772895014660&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArrayList&amp;lt;Integer&amp;gt; arrayList = new ArrayList&amp;lt;&amp;gt;();
Stack&amp;lt;Long&amp;gt; stack = new Stack&amp;lt;&amp;gt;();
Queue&amp;lt;Float&amp;gt; queue = new ArrayDeque&amp;lt;&amp;gt;();
ArrayDeque&amp;lt;Double&amp;gt; arrayDeque = new ArrayDeque&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;886&quot; data-start=&quot;883&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;919&quot; data-start=&quot;888&quot; data-section-id=&quot;k4j7u4&quot;&gt;2. 컬렉션 (Collection Framework)&lt;/h1&gt;
&lt;p data-end=&quot;968&quot; data-start=&quot;921&quot; data-ke-size=&quot;size16&quot;&gt;컬렉션 프레임워크는 &lt;b&gt;여러 개의 데이터를 저장하고 관리하기 위한 클래스들의 집합&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;990&quot; data-start=&quot;970&quot; data-ke-size=&quot;size16&quot;&gt;코딩 테스트에서 자주 사용하는 컬렉션&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1052&quot; data-start=&quot;992&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1005&quot; data-start=&quot;992&quot; data-section-id=&quot;1efw2gj&quot;&gt;ArrayList&lt;/li&gt;
&lt;li data-end=&quot;1015&quot; data-start=&quot;1006&quot; data-section-id=&quot;wxrbly&quot;&gt;Stack&lt;/li&gt;
&lt;li data-end=&quot;1025&quot; data-start=&quot;1016&quot; data-section-id=&quot;y66461&quot;&gt;Queue&lt;/li&gt;
&lt;li data-end=&quot;1040&quot; data-start=&quot;1026&quot; data-section-id=&quot;pr9oi9&quot;&gt;ArrayDeque&lt;/li&gt;
&lt;li data-end=&quot;1052&quot; data-start=&quot;1041&quot; data-section-id=&quot;19ejdqe&quot;&gt;HashMap&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1057&quot; data-start=&quot;1054&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1073&quot; data-start=&quot;1059&quot; data-section-id=&quot;1pggky2&quot;&gt;3. 배열 vs 리스트&lt;/h1&gt;
&lt;h2 data-end=&quot;1088&quot; data-start=&quot;1075&quot; data-section-id=&quot;zisont&quot; data-ke-size=&quot;size26&quot;&gt;배열 (Array)&lt;/h2&gt;
&lt;p data-end=&quot;1092&quot; data-start=&quot;1090&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1151&quot; data-start=&quot;1094&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1105&quot; data-start=&quot;1094&quot; data-section-id=&quot;1dj8uu9&quot;&gt;&lt;b&gt;크기 고정&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1126&quot; data-start=&quot;1106&quot; data-section-id=&quot;foael7&quot;&gt;특정 인덱스 접근 &lt;b&gt;O(1)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1140&quot; data-start=&quot;1127&quot; data-section-id=&quot;1xvab4z&quot;&gt;삽입 / 삭제 불가능&lt;/li&gt;
&lt;li data-end=&quot;1151&quot; data-start=&quot;1141&quot; data-section-id=&quot;1ohbp4e&quot;&gt;값 변경만 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772895027872&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int[] arr = new int[10];
arr[0] = 5;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1206&quot; data-start=&quot;1203&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1226&quot; data-start=&quot;1208&quot; data-section-id=&quot;1nwl7pr&quot; data-ke-size=&quot;size26&quot;&gt;리스트 (ArrayList)&lt;/h2&gt;
&lt;p data-end=&quot;1230&quot; data-start=&quot;1228&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1293&quot; data-start=&quot;1232&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1243&quot; data-start=&quot;1232&quot; data-section-id=&quot;mnrmo4&quot;&gt;&lt;b&gt;가변 길이&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1256&quot; data-start=&quot;1244&quot; data-section-id=&quot;49rw6j&quot;&gt;삽입 / 삭제 가능&lt;/li&gt;
&lt;li data-end=&quot;1270&quot; data-start=&quot;1257&quot; data-section-id=&quot;xvt6hd&quot;&gt;내부적으로 배열 기반&lt;/li&gt;
&lt;li data-end=&quot;1293&quot; data-start=&quot;1271&quot; data-section-id=&quot;cp50k1&quot;&gt;데이터 삽입 시 &lt;b&gt;평균 O(N)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895057142&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
list.add(10);
list.add(20);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1384&quot; data-start=&quot;1381&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1402&quot; data-start=&quot;1386&quot; data-section-id=&quot;1gzdvtv&quot; data-ke-size=&quot;size23&quot;&gt;배열 vs 리스트 비교&lt;/h3&gt;
&lt;div&gt;&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 36.3953%; height: 66px;&quot; border=&quot;1&quot; data-end=&quot;1497&quot; data-start=&quot;1404&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1497&quot; data-start=&quot;1436&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.9506%;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 32.4074%;&quot;&gt;배열&lt;/td&gt;
&lt;td style=&quot;width: 30.2469%;&quot;&gt;리스트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1452&quot; data-start=&quot;1436&quot;&gt;
&lt;td style=&quot;width: 33.9506%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1441&quot; data-start=&quot;1436&quot;&gt;크기&lt;/td&gt;
&lt;td style=&quot;width: 32.4074%; height: 22px;&quot; data-end=&quot;1446&quot; data-start=&quot;1441&quot; data-col-size=&quot;sm&quot;&gt;고정&lt;/td&gt;
&lt;td style=&quot;width: 30.2469%; height: 22px;&quot; data-end=&quot;1452&quot; data-start=&quot;1446&quot; data-col-size=&quot;sm&quot;&gt;가변&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1476&quot; data-start=&quot;1453&quot;&gt;
&lt;td style=&quot;width: 33.9506%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1461&quot; data-start=&quot;1453&quot;&gt;접근 속도&lt;/td&gt;
&lt;td style=&quot;width: 32.4074%; height: 22px;&quot; data-end=&quot;1468&quot; data-start=&quot;1461&quot; data-col-size=&quot;sm&quot;&gt;O(1)&lt;/td&gt;
&lt;td style=&quot;width: 30.2469%; height: 22px;&quot; data-end=&quot;1476&quot; data-start=&quot;1468&quot; data-col-size=&quot;sm&quot;&gt;O(1)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot; data-end=&quot;1497&quot; data-start=&quot;1477&quot;&gt;
&lt;td style=&quot;width: 33.9506%; height: 22px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1485&quot; data-start=&quot;1477&quot;&gt;삽입/삭제&lt;/td&gt;
&lt;td style=&quot;width: 32.4074%; height: 22px;&quot; data-end=&quot;1491&quot; data-start=&quot;1485&quot; data-col-size=&quot;sm&quot;&gt;불가능&lt;/td&gt;
&lt;td style=&quot;width: 30.2469%; height: 22px;&quot; data-end=&quot;1497&quot; data-start=&quot;1491&quot; data-col-size=&quot;sm&quot;&gt;가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1502&quot; data-start=&quot;1499&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;1516&quot; data-start=&quot;1504&quot; data-section-id=&quot;178fhf6&quot;&gt;4. HashMap&lt;/h1&gt;
&lt;p data-end=&quot;1557&quot; data-start=&quot;1518&quot; data-ke-size=&quot;size16&quot;&gt;HashMap은 &lt;b&gt;key - value 쌍을 저장하는 자료구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;1574&quot; data-start=&quot;1559&quot; data-ke-size=&quot;size16&quot;&gt;해시 테이블 기반으로 구현됨&lt;/p&gt;
&lt;p data-end=&quot;1578&quot; data-start=&quot;1576&quot; data-ke-size=&quot;size16&quot;&gt;특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1637&quot; data-start=&quot;1580&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1600&quot; data-start=&quot;1580&quot; data-section-id=&quot;wf2eia&quot;&gt;키를 통해 &lt;b&gt;빠르게 값 검색&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1620&quot; data-start=&quot;1601&quot; data-section-id=&quot;h3fj9y&quot;&gt;평균 시간복잡도 &lt;b&gt;O(1)&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;1637&quot; data-start=&quot;1621&quot; data-section-id=&quot;1baljt3&quot;&gt;&lt;b&gt;순서 보장하지 않음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1642&quot; data-start=&quot;1639&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1653&quot; data-start=&quot;1644&quot; data-section-id=&quot;kl1pyx&quot; data-ke-size=&quot;size26&quot;&gt;주요 메서드&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1790&quot; data-start=&quot;1655&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1790&quot; data-start=&quot;1678&quot;&gt;
&lt;tr data-end=&quot;1707&quot; data-start=&quot;1678&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1697&quot; data-start=&quot;1678&quot;&gt;put(key,value)&lt;/td&gt;
&lt;td data-end=&quot;1707&quot; data-start=&quot;1697&quot; data-col-size=&quot;sm&quot;&gt;데이터 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1729&quot; data-start=&quot;1708&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1721&quot; data-start=&quot;1708&quot;&gt;get(key)&lt;/td&gt;
&lt;td data-end=&quot;1729&quot; data-start=&quot;1721&quot; data-col-size=&quot;sm&quot;&gt;값 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1767&quot; data-start=&quot;1730&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1751&quot; data-start=&quot;1730&quot;&gt;containsKey(key)&lt;/td&gt;
&lt;td data-end=&quot;1767&quot; data-start=&quot;1751&quot; data-col-size=&quot;sm&quot;&gt;key 존재 여부 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1790&quot; data-start=&quot;1768&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1784&quot; data-start=&quot;1768&quot;&gt;remove(key)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1790&quot; data-start=&quot;1784&quot;&gt;삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1795&quot; data-start=&quot;1792&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1806&quot; data-start=&quot;1797&quot; data-section-id=&quot;1b7ktg7&quot; data-ke-size=&quot;size23&quot;&gt;사용 예시&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895128525&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// HashMap 초기화
HashMap&amp;lt;String, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();

// 값 삽입
map.put(&quot;a&quot;, 1);
map.put(&quot;b&quot;, 2);
map.put(&quot;c&quot;, 3);

// key 존재 여부
map.containsKey(&quot;a&quot;); // true

// 값 조회
map.get(&quot;a&quot;); // 1

// 값 수정
map.put(&quot;b&quot;, 4);

// 삭제
map.remove(&quot;a&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2069&quot; data-start=&quot;2066&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2088&quot; data-start=&quot;2071&quot; data-section-id=&quot;19vqij9&quot;&gt;5. 문자열 (String)&lt;/h1&gt;
&lt;p data-end=&quot;2116&quot; data-start=&quot;2090&quot; data-ke-size=&quot;size16&quot;&gt;String은 &lt;b&gt;Immutable 객체&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;2146&quot; data-start=&quot;2118&quot; data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;한 번 생성된 문자열은 변경할 수 없음 &lt;/b&gt;문자열을 변경하면 &lt;b&gt;새로운 객체가 생성됨&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;2178&quot; data-start=&quot;2175&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2190&quot; data-start=&quot;2180&quot; data-section-id=&quot;14jepri&quot; data-ke-size=&quot;size23&quot;&gt;문자열 예시&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895145938&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String str = &quot;Hi&quot;;

str = &quot;He&quot;;
str += &quot;llo&quot;;

System.out.println(str); // Hello

문자열 수정


str = str.replace(&quot;H&quot;, &quot;h&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;2339&quot; data-start=&quot;2336&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2375&quot; data-start=&quot;2341&quot; data-section-id=&quot;v8jva2&quot;&gt;6. StringBuilder vs StringBuffer&lt;/h1&gt;
&lt;p data-end=&quot;2412&quot; data-start=&quot;2377&quot; data-ke-size=&quot;size16&quot;&gt;문자열을 &lt;b&gt;mutable(변경 가능)&lt;/b&gt; 하게 관리하는 클래스&lt;/p&gt;
&lt;p data-end=&quot;2441&quot; data-start=&quot;2414&quot; data-ke-size=&quot;size16&quot;&gt;문자열 수정이 많을 때 String보다 효율적&lt;/p&gt;
&lt;hr data-end=&quot;2446&quot; data-start=&quot;2443&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2455&quot; data-start=&quot;2448&quot; data-section-id=&quot;1xnsnd6&quot; data-ke-size=&quot;size23&quot;&gt;차이점&lt;/h3&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2563&quot; data-start=&quot;2457&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2563&quot; data-start=&quot;2480&quot;&gt;
&lt;tr data-end=&quot;2521&quot; data-start=&quot;2480&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2495&quot; data-start=&quot;2480&quot;&gt;StringBuffer&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2521&quot; data-start=&quot;2495&quot;&gt;Thread-Safe (멀티스레드 안전)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2563&quot; data-start=&quot;2522&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2538&quot; data-start=&quot;2522&quot;&gt;StringBuilder&lt;/td&gt;
&lt;td data-end=&quot;2563&quot; data-start=&quot;2538&quot; data-col-size=&quot;sm&quot;&gt;Thread-Safe 아님 (더 빠름)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2578&quot; data-start=&quot;2565&quot; data-ke-size=&quot;size16&quot;&gt;코딩 테스트에서는 대부분&lt;/p&gt;
&lt;p data-end=&quot;2600&quot; data-start=&quot;2580&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;StringBuilder 사용&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;2605&quot; data-start=&quot;2602&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;2616&quot; data-start=&quot;2607&quot; data-section-id=&quot;1b7ktg7&quot; data-ke-size=&quot;size23&quot;&gt;사용 예시&lt;/h3&gt;
&lt;pre id=&quot;code_1772895186204&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StringBuilder sb = new StringBuilder();

sb.append(10); // &quot;10&quot;
sb.append(&quot;aaa&quot;); // &quot;10aaa&quot;

System.out.println(sb); // 10aaa

sb.deleteCharAt(3); // &quot;10aa&quot;

sb.insert(1, 2); // &quot;120aa&quot;

System.out.println(sb);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;br /&gt;- append(10)은 int지만 메서드&amp;nbsp;오버로딩&amp;nbsp;때문에&amp;nbsp;문자열로&amp;nbsp;처리됨&lt;/p&gt;
&lt;hr data-end=&quot;2906&quot; data-start=&quot;2903&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;2936&quot; data-start=&quot;2908&quot; data-section-id=&quot;1rfe9oe&quot;&gt;7. 람다식 (Lambda Expression)&lt;/h1&gt;
&lt;p data-end=&quot;2981&quot; data-start=&quot;2938&quot; data-ke-size=&quot;size16&quot;&gt;람다식은 &lt;b&gt;메서드를 하나의 식(Expression) 형태로 표현하는 방식&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;3014&quot; data-start=&quot;2983&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;익명 함수(Anonymous Function)&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895239887&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기존 방식
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println(&quot;Hello&quot;);
}
};


// 람다식
Runnable r2 = () -&amp;gt; System.out.println(&quot;Hello&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;3247&quot; data-start=&quot;3241&quot; data-section-id=&quot;1hrlj9m&quot; data-ke-size=&quot;size23&quot;&gt;특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3304&quot; data-start=&quot;3249&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3273&quot; data-start=&quot;3249&quot; data-section-id=&quot;1uqqq19&quot;&gt;&lt;b&gt;함수형 인터페이스&lt;/b&gt;에서만 사용 가능&lt;/li&gt;
&lt;li data-end=&quot;3284&quot; data-start=&quot;3274&quot; data-section-id=&quot;j8118w&quot;&gt;코드가 간결해짐&lt;/li&gt;
&lt;li data-end=&quot;3304&quot; data-start=&quot;3285&quot; data-section-id=&quot;6za9xb&quot;&gt;&lt;b&gt;함수를 값처럼 전달 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;3309&quot; data-start=&quot;3306&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;3324&quot; data-start=&quot;3311&quot; data-section-id=&quot;1jgf634&quot; data-ke-size=&quot;size23&quot;&gt;자주 사용하는 곳&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895285333&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 반복
list.forEach(x -&amp;gt; System.out.println(x));

// 정렬
Collections.sort(list, (a,b) -&amp;gt; a-b);

// Stream
list.stream()
.filter(x -&amp;gt; x &amp;gt; 10)
.map(x -&amp;gt; x * 2)
.forEach(System.out::println);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;3529&quot; data-start=&quot;3526&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3542&quot; data-start=&quot;3531&quot; data-section-id=&quot;150cubs&quot;&gt;8. 구현 노하우&lt;/h1&gt;
&lt;h2 data-end=&quot;3567&quot; data-start=&quot;3544&quot; data-section-id=&quot;1p2dma5&quot; data-ke-size=&quot;size26&quot;&gt;조기 반환 (Early Return)&lt;/h2&gt;
&lt;p data-end=&quot;3591&quot; data-start=&quot;3569&quot; data-ke-size=&quot;size16&quot;&gt;조건을 만족하면 &lt;b&gt;즉시 return &lt;/b&gt;&amp;rarr; 불필요한 중첩 if 제거&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772895298534&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public int divide(int a, int b) {
if (b == 0) {
return -1;
}
return a / b;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;3723&quot; data-start=&quot;3720&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;3748&quot; data-start=&quot;3725&quot; data-section-id=&quot;11bwhlg&quot; data-ke-size=&quot;size26&quot;&gt;보호 구문 (Guard Clause)&lt;/h2&gt;
&lt;p data-end=&quot;3767&quot; data-start=&quot;3750&quot; data-ke-size=&quot;size16&quot;&gt;잘못된 입력을 &lt;b&gt;먼저 검사&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895329350&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void printName(String name) {
if (name == null) {
throw new IllegalArgumentException(&quot;name cannot be null&quot;);
}

System.out.println(name);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;3952&quot; data-start=&quot;3949&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;3972&quot; data-start=&quot;3954&quot; data-section-id=&quot;jdkcb8&quot;&gt;9. 제네릭 (Generic)&lt;/h1&gt;
&lt;p data-end=&quot;4000&quot; data-start=&quot;3974&quot; data-ke-size=&quot;size16&quot;&gt;타입을 &lt;b&gt;미리 지정하지 않고 사용 시 결정&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;4017&quot; data-start=&quot;4002&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;타입 안정성 제공&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895339241&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();

list.add(&quot;apple&quot;);
// list.add(10); // 컴파일 에러

String value = list.get(0);&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4151&quot; data-start=&quot;4148&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;4169&quot; data-start=&quot;4153&quot; data-section-id=&quot;m7zfil&quot;&gt;10. Stream API&lt;/h1&gt;
&lt;p data-end=&quot;4201&quot; data-start=&quot;4171&quot; data-ke-size=&quot;size16&quot;&gt;컬렉션 데이터를 &lt;b&gt;선언형 방식으로 처리하는 API&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;4205&quot; data-start=&quot;4203&quot; data-ke-size=&quot;size16&quot;&gt;특징 &amp;gt; 코드 간결&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4259&quot; data-start=&quot;4207&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4220&quot; data-start=&quot;4207&quot; data-section-id=&quot;1pimsqx&quot;&gt;데이터 &lt;b&gt;필터링&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;4233&quot; data-start=&quot;4221&quot; data-section-id=&quot;tmqt9g&quot;&gt;데이터 &lt;b&gt;변환&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;4246&quot; data-start=&quot;4234&quot; data-section-id=&quot;bra3qd&quot;&gt;데이터 &lt;b&gt;정렬&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;4259&quot; data-start=&quot;4247&quot; data-section-id=&quot;bmy18p&quot;&gt;데이터 &lt;b&gt;집계&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;4274&quot; data-start=&quot;4271&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;4282&quot; data-start=&quot;4276&quot; data-section-id=&quot;1hrqnwy&quot; data-ke-size=&quot;size23&quot;&gt;예시&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;pre id=&quot;code_1772895377092&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;Integer&amp;gt; list = Arrays.asList(1,2,3,4,5);

// Stream 사용
List&amp;lt;Integer&amp;gt; result = list.stream()
.filter(n -&amp;gt; n % 2 == 0)
.map(n -&amp;gt; n * 2)
.collect(Collectors.toList());

System.out.println(result); // [4, 8]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4510&quot; data-start=&quot;4507&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;4527&quot; data-start=&quot;4512&quot; data-section-id=&quot;fef1yv&quot; data-ke-size=&quot;size23&quot;&gt;자주 사용하는 메서드&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;메서드설명
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;4651&quot; data-start=&quot;4529&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;4651&quot; data-start=&quot;4552&quot;&gt;
&lt;tr data-end=&quot;4573&quot; data-start=&quot;4552&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4563&quot; data-start=&quot;4552&quot;&gt;filter()&lt;/td&gt;
&lt;td data-end=&quot;4573&quot; data-start=&quot;4563&quot; data-col-size=&quot;sm&quot;&gt;조건 필터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4592&quot; data-start=&quot;4574&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4582&quot; data-start=&quot;4574&quot;&gt;map()&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4592&quot; data-start=&quot;4582&quot;&gt;데이터 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4610&quot; data-start=&quot;4593&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4604&quot; data-start=&quot;4593&quot;&gt;sorted()&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4610&quot; data-start=&quot;4604&quot;&gt;정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4629&quot; data-start=&quot;4611&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4623&quot; data-start=&quot;4611&quot;&gt;forEach()&lt;/td&gt;
&lt;td data-end=&quot;4629&quot; data-start=&quot;4623&quot; data-col-size=&quot;sm&quot;&gt;반복&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;4651&quot; data-start=&quot;4630&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;4642&quot; data-start=&quot;4630&quot;&gt;collect()&lt;/td&gt;
&lt;td data-end=&quot;4651&quot; data-start=&quot;4642&quot; data-col-size=&quot;sm&quot;&gt;결과 수집&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4656&quot; data-start=&quot;4653&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;4674&quot; data-start=&quot;4658&quot; data-section-id=&quot;y9qwdq&quot; data-ke-size=&quot;size23&quot;&gt;Stream 기본 구조&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;데이터 생성 &amp;rarr; 가공 &amp;rarr; 결과&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1772895386204&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;list.stream()
.mapToInt(Integer::intValue)
.toArray();&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;4781&quot; data-start=&quot;4778&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1 data-end=&quot;4787&quot; data-start=&quot;4783&quot; data-section-id=&quot;yim43j&quot;&gt;정리&lt;/h1&gt;
&lt;p data-end=&quot;4809&quot; data-start=&quot;4789&quot; data-ke-size=&quot;size16&quot;&gt;코딩 테스트에서 중요한 Java 문법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4916&quot; data-start=&quot;4811&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4835&quot; data-start=&quot;4811&quot; data-section-id=&quot;1p3ad47&quot;&gt;Primitive vs Reference&lt;/li&gt;
&lt;li data-end=&quot;4853&quot; data-start=&quot;4836&quot; data-section-id=&quot;1br5ymq&quot;&gt;배열 vs ArrayList&lt;/li&gt;
&lt;li data-end=&quot;4863&quot; data-start=&quot;4854&quot; data-section-id=&quot;j5xnnq&quot;&gt;HashMap&lt;/li&gt;
&lt;li data-end=&quot;4888&quot; data-start=&quot;4864&quot; data-section-id=&quot;qk5v8m&quot;&gt;String / StringBuilder&lt;/li&gt;
&lt;li data-end=&quot;4897&quot; data-start=&quot;4889&quot; data-section-id=&quot;1p9wgfj&quot;&gt;Lambda&lt;/li&gt;
&lt;li data-end=&quot;4907&quot; data-start=&quot;4898&quot; data-section-id=&quot;iykemx&quot;&gt;Generic&lt;/li&gt;
&lt;li data-end=&quot;4916&quot; data-start=&quot;4908&quot; data-section-id=&quot;66dwes&quot;&gt;Stream&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>내코가석자</category>
      <category>알고리즘</category>
      <category>알고리즘날먹하기</category>
      <category>코딩테스트합격자되기</category>
      <author>gani00</author>
      <guid isPermaLink="true">https://gani00.tistory.com/3</guid>
      <comments>https://gani00.tistory.com/3#entry3comment</comments>
      <pubDate>Sat, 7 Mar 2026 23:56:53 +0900</pubDate>
    </item>
  </channel>
</rss>