<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>pado0711.log</title>
    <link>https://pado0711.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 6 Apr 2026 04:23:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>lVlina</managingEditor>
    <image>
      <title>pado0711.log</title>
      <url>https://tistory1.daumcdn.net/tistory/6615655/attach/c0f77b7395454a2d9a02d67361ac7e8e</url>
      <link>https://pado0711.tistory.com</link>
    </image>
    <item>
      <title>[Do it! 알고리즘 코딩테스트 파이썬 편] 1주차</title>
      <link>https://pado0711.tistory.com/24</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[Do it! 알고리즘 코딩테스트 파이썬 편] 의 1주차 동안 학습한 내용을 정리하였습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;1. 코딩테스트의 핵심 : 시간복잡도를 고려한 알고리즘 선택&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시간 복잡도란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 주어진 문제를 해결하기 위한 &lt;b&gt;연산 횟수&lt;/b&gt;!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1초 : 2,000만 번 ~ 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;시간 복잡도를 정의하는 유형 3가지
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빅 - 오메가 : &amp;lsquo;최선의 경우&amp;rsquo;의 연산 횟수&lt;/li&gt;
&lt;li&gt;빅 - 세타 : &amp;lsquo;보통의 경우&amp;rsquo; 의 연산 횟수 (최선 - 최악의 케이스의 절반)&lt;/li&gt;
&lt;li&gt;빅 - 오 : &amp;lsquo;최악의 경우&amp;rsquo; 의 연산 횟수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;1-1 시간복잡도 표기법 알아보기&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코테에서 빅-오 표기법을 사용해야 하는 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 다양한 테스트 케이스를 수행해 모든 케이스를 통과해야만 하므로, 판단시 최악의 케이스를 염두에 둬야 한다!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;빅 - 오 표기법의 시간 복잡도&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 크기 (N) 의 증가에 따른 성능(수행 시간)ㅇ&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효율 제일 좋음 O(logN)&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;O(N)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;/td&gt;
&lt;td&gt;O(NlogN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;/td&gt;
&lt;td&gt;O(N^2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;:&lt;/td&gt;
&lt;td&gt;O(2^n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;제일 느림&lt;/td&gt;
&lt;td&gt;O(N!)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1&gt;1-2 시간 복잡도 활용하기&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제 000: 수 정렬하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;버블 정렬의 시간 복잡도: O(n^2)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;병합 정렬의 시간 복잡도: O(nlogn)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간 제한 2초 (= 1초 2,000만 번 기준, 2초에 4,000만 번 )&lt;/li&gt;
&lt;li&gt;40,000,000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;입력N개의 줄에 숫자 주어짐 ( |N| &amp;le; 백 만 번 ) - 수는 중복되지 않음&lt;/li&gt;
&lt;li&gt;1번째 줄 부터 ~ N개의 줄에 오름차순 정렬한 결과를 1줄에 1개씩 출력한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;N 개의 수가 주어졌을 대, 이를 오름차순 정렬하는 프로그램을 작성하시오&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;연산 횟수 계산 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산 횟수 = 알고리즘 시간 복잡도 n값에 데이터의 최대 크기를 대입하여 도출함&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;알고리즘 적합성 평가&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 데이터의 크기(N)를 단서로 사용해야하는 알고리즘 추측 가능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버블 정렬 = (1,000,000)^2 = 1,000,000,000,000 (약 1조) &amp;gt; 40,000,00 &amp;rarr; 부적합 알고리즘!&lt;/li&gt;
&lt;li&gt;병합 정렬 = $1000000\log_{2}{1000000}$ $\approx$ 200,000,000 &amp;lt; 40,000,00 &amp;rarr; 적합! 알고리즘$\log_{2}{10} \approx 3.322$&lt;/li&gt;
&lt;li&gt;[참고!]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시간 복잡도 바탕으로 코드 로직 개선하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step1. 가장 먼저, 코드의 시간 복잡도를 도출한다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 그러려면 시간복잡도 도출 기준을 알아야 함!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도출 기준 고려해야한다!&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;상수는 시간 복잡도 계산에서 제외한다&lt;/b&gt;코드에 반복문이 3개가 각각 있어서 연산 횟수가 3N이 되더라도,&lt;/li&gt;
&lt;li&gt;상수를 무시하고 둘 다 시간 복잡도는 O(n) 으로 같음!&lt;/li&gt;
&lt;li&gt;&amp;rarr; 반복문 하나의 연산 횟수는 N번&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다&lt;/b&gt;이중 for문 1개로 인한 N^2 이다!&lt;/li&gt;
&lt;li&gt;&amp;rarr; 일반 for문이 10개, 이중 for 문이 1개 있다고 하면, 여기에서의 시간 복잡도는&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Step2. 연산이 가장 큰 부분을 찾아서 연산에 더욱 효율적인 구조로 수정!&lt;/h3&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;2. 코드의 논리오류 잡는 법: 디버깅&lt;/h1&gt;
&lt;h1&gt;2-1. 디버깅이 중요한 이유&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디버깅이란&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;debugging : 프로그램에서 발생하는 문법 오류나 논리 오류를 찾아 바로잡는 과정!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문법 오류는 컴파일러가 자동으로 찾아줌, 주로 논리 오류를 찾기 위함이다!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디버깅은 코딩 테스트에 필요한 기술이고, 그냥 알아 두기만 하면 되는 것이 아니라, 문제를 풀면서 반드시 해야하는 과정이다!&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방법&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;코드에서 디버깅하고자 하는 줄에 중단점(breakpoint)을 설정한다&lt;/li&gt;
&lt;li&gt;IDE의 디버깅 기능을 실행하면, 코드를 1줄씩 실행하거나 , 다음 중단점까지 실행 가능!&lt;/li&gt;
&lt;li&gt;(이 과정에서 추적할 변숫값도 지정 가능!), 변수의 값 변화 따라가면서 파악하기&lt;/li&gt;
&lt;li&gt;변수값 이외에도 원하는 수식을 입력해 논리 오류 파악 가능!&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;2-2. 디버깅 활용 사례 살피기&lt;/h1&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;&amp;rarr; 모든 변수가 정상적으로 초기화 되고 있는지, 디버깅을 이용해 확인해보기&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 반복문 인덱스 범위 넘어가지 않았는지 체크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 반복문에서 반복 범위를 잘못 지정하거나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 연산자를 잘못 사용하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열 인덱스가 0부터 시작하는 사실을 간과하거나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 N까지 반복하도록 설정해야 하는데, 비교 연산자를 잘못 입력하여 N-1 까지 반복하도록 설정하는 때도 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 사용할 때 마다, 범위와 시작 인덱스를 꼼꼼하게 확인하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 모를 입력 실수를 대비해 디버깅하는 습관을 들일 것!&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;3. 잘못된 변수 사용 체크&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 파이썬 자동 형 변환 체크&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;/ 연산: 나눗셈의 결과값을 float 형으로 출력 &amp;rarr; 소수점의 결과까지 보여준다!&lt;/li&gt;
&lt;li&gt;// 연산: 나눗셈을 한 결괏값을 int 형으로 출력 &amp;rarr; 몫의 결과만 보여준다!&lt;/li&gt;
&lt;li&gt;% 연산: 나눗셈을 한 후 나눈 나머지 값을 보여준다!&amp;nbsp;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;Chapter 2 목표: 다양한 알고리즘에 관련된 핵심 이론과, 이를 바탕으로 실전 문제를 해결하는 방법 알아보기&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;미리 보는 코딩 테스트 오답 노트&lt;/h1&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;h2 data-ke-size=&quot;size26&quot;&gt;1. 시간 초과의 원인을 찾아 해결하기&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;p data-ke-size=&quot;size16&quot;&gt;해당 방식이 시간 복잡도를 고려하여 제한 시간 범위 내에 들어가는지를 먼저 체크하고 들어가야함!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 시간 복잡도가 너무 높다면 풀이 알고리즘 자체를 수정해야할 필요가 있다&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법 2. 입/출력 최적화!&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입출력 최적화 방법:sys.stdin.readline() 과 sys.stdout.write()를 활용하면 &lt;b&gt;처리 속도를 크게 향상시킬 수 있다!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;input() , print() 대신,&lt;/li&gt;
&lt;li&gt;이걸 쓰면 얼만큼 시간을 단축시킬 수 있는지?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1,000,000개의 정수 입출력 시간 차이 비교 표방식 입력 속도(초) 출력 속도(초) 총 소요 시간(초)
&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;input()과 print()&lt;/td&gt;
&lt;td&gt;1.8&lt;/td&gt;
&lt;td&gt;1.2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sys.stdin.readline()과 sys.stdout.write()&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;&amp;rarr; 총 소요시간에서 큰 차이가 생긴다! (실제 환경에 따라 달라질 순 있음)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;각각의 작동 원리 차이[비교]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;input() 은 호출될 때 마다 한 줄을 읽어 &amp;rarr; 끝의 개행 문자를 제거한 문자열을 반환&lt;/li&gt;
&lt;li&gt;(숫자 변환 등 추가 파싱은 직접 처리해야함!)&lt;/li&gt;
&lt;li&gt;print()는 기본적으로 출력 내용을 버퍼에 모았다가 상황에 따라 비운다&lt;/li&gt;
&lt;li&gt;&amp;rarr; 반복 호출이 많으면 작은 단위의 잦은 쓰기로 인해 성능이 저하될 수 있음!&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;sys.stdin.readline() 은 입력 버퍼에서 한 줄 전체를 그대로 읽음&lt;/li&gt;
&lt;li&gt;&amp;rarr; 대량 입력에서 더 빠른 성능을 낼 수 있다!&lt;/li&gt;
&lt;li&gt;sys.stdout.write() : 개행 문자를 자동으로 붙이지 않음!&lt;b&gt;(문자열만 출력할 수 있으므로, 정수는 str() 로 변환하여 출력!)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; 여러 출력을 모아 한 번에 출력하면 큰 속도향상 가능!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 인덱스에 의미 부여하여 풀어 보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인덱스의 역할&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;몇 번째 데이터인지 나타내는 역할&lt;/li&gt;
&lt;li&gt;인덱스를 순서가 아니라, 해당 숫잣값 자체에 의미를 부여하여 사용하는 방식!&lt;/li&gt;
&lt;li&gt;&amp;rarr; 해싱 개념을 적용하자!&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인덱스에 해싱 개념 적용&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적용 예시A[1] : A라는 배열의 1번 인덱스의 값을 나타낼 수도 있지만,&lt;b&gt;1이라는 값이 몇 개 있는지를 저장한다고도 사용가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A[1] = 2, 1이라는 값이 2개 있다는 뜻으로 사용 가능0 1 2 3 4&amp;nbsp;
&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;5&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;인덱스를 순서가 아니라, 해당 숫잣값 자체에 의미를 부여하는 상황을 가장 자주 사용한다&lt;/li&gt;
&lt;li&gt;&amp;rarr; 숫자값으로 의미를 부여한 경우,&lt;/li&gt;
&lt;li&gt;언제 적용하면 좋은가?&amp;rarr; 1초 안에 정렬이 어렵다&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱스를 값 자체로 활용하면, 계수 정렬과 같은 방식으로 제한 시간 내에 정렬할 수 있다!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;예) 1000보다 작은 자연수 10,000,000개를 1초 안에 정렬해야 하는 상황,&lt;/li&gt;
&lt;li&gt;인덱스에 의미를 부여한 대표 사례 - [계수 정렬]&amp;rarr; 여기서 count 리스트의값은 해당 숫자의 등장 횟수!&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱스는 숫자 자체&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;import sys N = int(sys.stdin.readline()) count = [0]* 1001 numbers = list(map(int, sys.stdin.readline().split())) for number in numbers: **count[number] += 1 #인덱스에 숫자값으로 의미를 부여하여 데이터를 저장!** for i in range(1001): #0~1000 중에 if count[i] != 0: #i값이 0개인 수면 for _ in range(count[i]): #0부터 count[i]의 개수-1까지 sys.stdout.write(str(i)+ ' ')&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 연산을 따로 하지 않아도 10,000,000개의 숫자를 1초 안에 빠르게 정렬할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 코테 상황에서는, 요구 사항에 따라 인덱스에 적절한 의미를 직접 부여해야 하는 문제도 자주 출제되므로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; 인덱스를 단순히 &amp;lsquo;몇 번째 순서&amp;rsquo; 로만 생각하지 말고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 상황에 따라 다양한 의미로 변환해 보는 연습이 중요하다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 나머지 연산의 중요성 알아보기&lt;/h2&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정답을 OO으로 나눈 나머지를 출력해라 &amp;rarr; 나머지 연산을 언제 하느냐가 속도 차이를 만든다!&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;b&gt;분배 법칙 활용&lt;/b&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;h3 data-ke-size=&quot;size23&quot;&gt;나머지 연산이 자주 활용되는 분배 법칙&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;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;덧셈의 분배 법칙 : (A+B) % C = (A%C + B%C)%C&lt;/li&gt;
&lt;li&gt;뺄셈의 분배 법칙 : (A-B) % C = (A%C - B%C)%C&lt;/li&gt;
&lt;li&gt;곱셈의 분배 법칙 : (A*B)%C = (A%C * B%C) %C&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 나눗셈은 나머지 연산의 분배 법칙이 성립하지 않는다. 나머지(덧셈, 뺄셈, 곱셈은 성립)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;큰 값을 한 번에 나머지 연산 하면 시간 초과의 위험이 있다! &amp;rarr; 분배 법칙을 잘 활용하자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서는 int형이 자동으로 확장되므로, 정수 오버플로는 발생하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 숫자가 매우 커지면, 계산 속도가 급격히 느려지고, 시간 초과에 걸릴 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막에만 %연산을 적용해도 정답 계산이 가능하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채점 서버에서는 시간 초과로 처리되어 오답이 될 수 있다!&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;활용 예시 : [1부터 100,000까지 곱한 값을 1,000,000,007로 나눈 나머지를 구하시오]&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;julia&quot;&gt;&lt;code&gt;import time

MOD = 1000000007
answer = 1
start = time.time()

&quot;&quot;&quot;
for i in range(1,100001):
	answer *= i 

result = answer % 1000000007 #곱한 결과를 한 번에 나머지 연산 하기보다는,
&quot;&quot;&quot;
**for i in range(1,100001):
	answer = (answer *i)%MOD**
# 반복문 한 숫자 마다 곱셉, 나머지 연산을 하는 것이 훨씬 속도 향상된다
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;정답을 OO으로 나눈 나머지를 출력해라 에서 정답을 구한 후 마지막에 나머지 연산을 구하는 경우 , 시간 초과의 위험이 있다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;rArr; 분배 법칙을 통해, 곱셈, 덧셈 등 중간 계산을 할 때 마다 나머지 연산을 적용하는 습관이 필수이다!&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 정렬 기초 다지기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬 기초를 다져야 하는 이유?
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;이진 탐색 과 같은 특정 알고리즘은 정렬된 데이터에만 적용될 수 있기 때문!&lt;/li&gt;
&lt;li&gt;또한, 정렬은 그리디 알고리즘, 투 포인터, 우선순위 큐 문제에서도 전처리 시 반드시 해야함!&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오름차순 정렬 : 작은 값 to 큰 값&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;방식1: 파이썬 .sort() 이용한 정렬!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;#원본 리스트 선언
A = [5,3,2,4,1]

# 방식1 : list.sort() : 리스트 자체를 정렬 (in-place)
A.sort()
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;= &lt;b&gt;리스트(원본) 자체를 정렬! (in-place 정렬) : 반환값 None&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;방식2 : 파이썬 sorted() 이용한 정렬!
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;#원본 리스트 선언
A = [5,3,2,4,1]

# 방식2 : sorted(list) : 리스트의 정렬된 복사본을 반환 (원본은 유지)
B = sorted(A)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;= 정렬된 복사본을 반환!&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;내림차순 정렬 : 큰 값 to 작은 값&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;reverse=True 옵션 추가해서 내림차순 정렬 구현!&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;#원본 리스트 선언
A = [5,3,2,4,1]

# 방식1에 내림차순 옵션 추가
A.sort**(reverse=True)**
print(&quot;내림차순 결과:&quot;,A)

# 정렬된 복사본 반환(원본 유지)
B = sorted**(A, reverse=True)**
print(&quot;내림차순 복사본:&quot;,B)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추가) 정렬 함수를 직접 제어할 수 없는 경우 : 부호를 일시적으로 반전!&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;#원본 리스트 선언
A = [5,3,2,4,1]

**#부호를 반전시키고, 오름차순으로 정렬한 후, 다시 부호 되돌리기!**
A = [-x for x in A] #부호 반전 : [-5,-3,-2,-4,-1]
A.sort() # 이때의 A는 [-5,-4,-3,-2,-1]

A = [-x for x in A] # 부호 반전 : [5,4,3,2,1] -&amp;gt; 내림차순!이 됨
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 다중 조건 정렬 익히기&lt;/h2&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;h3 data-ke-size=&quot;size23&quot;&gt;튜플 기반 정렬&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;데이터를 튜플로 구성 후&amp;rarr; .sort() 나 sorted() 의 key인자에 lambda를 사용해 정렬 기준을 지정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;튜플 형태로 하는 이유?&lt;/li&gt;
&lt;li&gt;정렬 기준을 튜플로 묶으면, &lt;b&gt;앞에 있는 조건부터 차례로 여러 조건을 적용할 수 있음!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;예시 - 영어 점수 내림차순 정렬, 동점인게 있으면 수학점수 내림차수도 고려하는 정렬
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;socres.sort(key=lambda x: (-x[0], -x[1]))
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;key=lambda x:튜플의 각 요소를 x 라고 부르고,&lt;/li&gt;
&lt;li&gt;그 x를 어떻게 변형한 값을 기준으로 정렬할지 정해준다!&lt;/li&gt;
&lt;li&gt;&amp;rarr; 정렬 기준을 커스텀(사용자 정의) 하겠다는 의미!&lt;/li&gt;
&lt;li&gt;(-x[0], -x[1])-x[0] : 첫 번째 요소에 마이너스 붙여서 정렬&amp;lt;aside&amp;gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;영어는 내림차순(높은 순) &amp;rarr; 수학은 오름차순(낮은 순) 으로 정렬하고 싶다면?&lt;/li&gt;
&lt;li&gt;scores.sort(key=lambda x: (-x[0], x[1]))&lt;/li&gt;
&lt;/ul&gt;
&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;-x[1] : 두 번째 요소에 마이너스 붙여서 정렬!&lt;/li&gt;
&lt;li&gt;기본 정렬은 오름차순인데, 마이너스를 붙여서 순서를 뒤집음!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;# 영어, 수학 순서로 튜플 데이터 저장 scores = [ (80,100), (100,50), (70,100), (80,90), ] #1순위: 영어 내림차순 -&amp;gt; 동점인게 있으면 2순위: 수학 내림차순 **scores.sort(key=lambda x: (-x[0],-x[1]))** for s in scores: print(f&quot;english={s[0]}, math={s[1]}&quot;)&lt;/li&gt;
&lt;li&gt;추가) 람다 함수 lambda 이해하기! : 람다 함수는 정렬시 참고하기 위한 기준만 보기 위함임!sort(key=...)&amp;nbsp;함수에서&amp;nbsp;key에 전달하는 람다 함수는&lt;b&gt;정렬할 때만 참고하는 '임시 기준값'을 만드는 역할을 합니다.&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;기준표 작성&lt;/b&gt;: 파이썬이 정렬하기 전에 각 요소 옆에 포스트잇을 하나씩 붙인다고 상상해 보세요.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(80, 100)&amp;nbsp;옆에는&amp;nbsp;(-80, -100)이라는 포스트잇을 붙입니다.&lt;/li&gt;
&lt;li&gt;(100, 50)&amp;nbsp;옆에는&amp;nbsp;(-100, -50)이라는 포스트잇을 붙입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;순서 정하기&lt;/b&gt;: 파이썬은&amp;nbsp;&lt;b&gt;실제 데이터가 아니라, 이 포스트잇에 적힌 숫자들을 비교&lt;/b&gt;해서 오름차순으로 순서를 정합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;100이&amp;nbsp;80보다 작으므로,&amp;nbsp;100&amp;nbsp;포스트잇이 붙은 데이터가 가장 앞으로 갑니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과 출력&lt;/b&gt;: 순서가 다 정해지면&amp;nbsp;&lt;b&gt;포스트잇은 떼어버리고&lt;/b&gt;, 원래 있던&amp;nbsp;&lt;b&gt;실제 데이터(100, 50&amp;nbsp;등)만 남겨서&lt;/b&gt;&amp;nbsp;리스트를 재배치합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;파이썬 내부에서&amp;nbsp;sort가 돌아갈 때의 논리 구조는 다음과 같습니다:결국&amp;nbsp;lambda&amp;nbsp;함수는 &quot;어떤 기준으로 줄 세울까?&quot;라는 질문에 답하기 위해 잠깐 계산해 보는 식일 뿐,&amp;nbsp;&lt;b&gt;원본 데이터를 수정(Modify)하는 명령이 아닙니다!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;# 내부적인 가상의 동작 과정 temp_keys = [] for x in scores: temp_keys.append((-x[0], -x[1])) # 정렬을 위한 &quot;임시 키&quot; 생성 # 이 temp_keys를 기준으로 전체 데이터의 순서를 결정 (실제 데이터는 변하지 않음) # 순서 결정 완료 후 리스트 재배치`&lt;/li&gt;
&lt;li&gt;작동 원리를 비유로 설명하면 이렇습니다:&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실제 리스트의 값을 바꾸는 것이 아니라,&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;aside&amp;gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;딕셔너리 기반 정렬&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;데이터를 딕셔너리로 구성 후&amp;rarr; .sort() 나 sorted() 의 key인자에 lambda를 사용해 정렬 기준을 지정&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;딕셔너리 형태로 하는 이유?&lt;/li&gt;
&lt;li&gt;정렬 기준을 딕셔너리 형태로 묶으면, &lt;b&gt;키(key)의 이름으로 값을 찾기 때문에, 데이터에 새로운 항목이 추가되거나 순서가 바뀌어도 정렬 코드를 고칠 필요가 없다!&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;예시 - 수학 점수 내림차순 정렬, 동점인게 있으면 영어 점수 내림차수도 고려하는 정렬
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;socres.sort(key=lambda x: (-x[0], -x[1]))
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;key=lambda x:튜플의 각 요소를 x 라고 부르고,&lt;/li&gt;
&lt;li&gt;그 x를 어떻게 변형한 값을 기준으로 정렬할지 정해준다!&lt;/li&gt;
&lt;li&gt;&amp;rarr; 정렬 기준을 커스텀(사용자 정의) 하겠다는 의미!&lt;/li&gt;
&lt;li&gt;(-x[0], -x[1])-x[0] : 첫 번째 요소에 마이너스 붙여서 정렬&amp;lt;aside&amp;gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;영어는 내림차순(높은 순) &amp;rarr; 수학은 오름차순(낮은 순) 으로 정렬하고 싶다면?&lt;/li&gt;
&lt;li&gt;scores.sort(key=lambda x: (-x[0], x[1]))&lt;/li&gt;
&lt;/ul&gt;
&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;-x[1] : 두 번째 요소에 마이너스 붙여서 정렬!&lt;/li&gt;
&lt;li&gt;기본 정렬은 오름차순인데, 마이너스를 붙여서 순서를 뒤집음!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;# 영어, 수학 순서로 튜플 데이터 저장 scores = [ {'english':80, 'math':100 }, {'english':100 , 'math': 50}, {'english':70, 'math': 100}, {'english':80, 'math': 90}, ] #1순위: 영어 내림차순 -&amp;gt; 동점인게 있으면 2순위: 수학 내림차순 **scores.sort(key=lambda x: (-x['math'],-x['english']))** for s in scores: print(s)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;두 정렬 방식의 차이&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;&amp;rarr; 조건이 많아지면, 딕셔너리로 해야 가독성이 더 좋음!&lt;/li&gt;
&lt;li&gt;&lt;b&gt;튜플 기반 정렬: 적은 조건일 때!, (단순 계산용), 단순 입력처리 일 때!&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 이차원 리스트 제대로 다루기&lt;/h2&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;&amp;rarr; 코테 문제에서는 그래프 관련 알고리즘이 많이 등장하는데, &lt;b&gt;이 때 그래프의 구조를 표현하는데 많이 사용하는 것이 이차원 리스트이다!&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이차원 리스트를 이용한 그래프 구현 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Step 1. 이차원 리스트 선언과 초기화]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&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;보통 노드 번호는 1번부터 시작 하므로, 인덱스 0 사용x, N+1 크기로 리스트 초기화 한다&lt;/li&gt;
&lt;li&gt;# 정점이 3개 있다고 가정 (1~3번 사용!) N =3 **graph = [[] for _ in range(N+1)]**&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이렇게 만든 graph[1], graph[2], graph[3] 각각이 각 정점의 인접 리스트 역할을 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Step 2. 그래프 데이터 저장하기]&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;문제 예시) 아래의 간단한 그래프에 입력값 저장하기&amp;lt;aside&amp;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;
3 4 (&amp;rarr; 노드가 3개, 에지가 4개인 그래프)2 1 103 2 6
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그래프 데이터를 이차원 리스트 자료구조를 이용하여 저장하기
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;# 정점 수와 간선 수 입력
N,E = map(int, input().split()) #정점=3, E 간선(edge)=4

# 간선 정보를 입력받아 저장
for _ in range(E): #저장할 에지의 개수만큼 반복 (1~4까지)
	s,e,w = map(int,input().split())
	**graph[s].append((e,w)) #이차원 리스트에 그래프 데이터 저장!	
			# (e,w) 는 (도착 노드, 가중치) 임!**
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;연결 정보는 (도착 노드, 가중치) 형태의 튜플로 저장한다&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;실제 이차원 리스트에 데이터 저장 형태[1] &amp;rarr; [2,4] [3,7][3] &amp;rarr; [2,6]&lt;/li&gt;
&lt;li&gt;[2] &amp;rarr; [1,10]&lt;/li&gt;
&lt;li&gt;[시작노드] &amp;rarr; [도착노드, 가중치] 형태!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;lt;/aside&amp;gt;&lt;/li&gt;
&lt;li&gt;1 3 7&lt;/li&gt;
&lt;li&gt;1 2 4 ( 1번 노드에서 2번 노드로 가는 가중치 4의 에지가 있음 )&lt;/li&gt;
&lt;li&gt;flowchart LR 1 -- 7 --&amp;gt; 3 3 -- 6 --&amp;gt; 2 1 -- 4 --&amp;gt; 2 2 -- 10 --&amp;gt; 1&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Step 3. 그래프 데이터 가져오기]&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;1번 노드에서 시작되는 에지 데이터를 가져오기!이 코드를 사용하면&lt;/li&gt;
&lt;li&gt;[2,4] 랑 [3,7] 의 2개의 에지 데이터를 가져올 수 있다&lt;/li&gt;
&lt;li&gt;for nextNode, weight in graph[1]: print(f&quot;next Node {nextNode}, weight= {weight}&quot;)&lt;/li&gt;
&lt;/ul&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> 도서</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/24</guid>
      <comments>https://pado0711.tistory.com/24#entry24comment</comments>
      <pubDate>Sun, 1 Mar 2026 23:44:33 +0900</pubDate>
    </item>
    <item>
      <title>[문자열 압축]</title>
      <link>https://pado0711.tistory.com/23</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FJTSU/btsKX3LIBUT/kk9HYng3iXEMPKTjw3WLm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FJTSU/btsKX3LIBUT/kk9HYng3iXEMPKTjw3WLm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FJTSU/btsKX3LIBUT/kk9HYng3iXEMPKTjw3WLm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFJTSU%2FbtsKX3LIBUT%2Fkk9HYng3iXEMPKTjw3WLm0%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;500&quot; height=&quot;501&quot; data-origin-width=&quot;1112&quot; data-origin-height=&quot;1114&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1732700481701&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Main {

    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();

        StringBuilder sb = new StringBuilder();

        //charAt(i) = charAt(i+1) 같으면
        for(int i=0; i &amp;lt;=str.length();i++){
            sb.append(str.charAt(i)); 
           if(i==str.length()-1){  
               break;
           }else{
               if(str.charAt(i) == str.charAt(i+1)) {
                   int repeatedCount =1;
                   while(str.charAt(i) == str.charAt(i+1)){
                       repeatedCount++;
                       i++;
                   }
                   sb.append(repeatedCount);
               }
           }
        }

        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception{
        new Main().solution();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 이렇게 실했했더니 런타임 에러가 뜸&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조금 더 간단한 방식을 생각해 봐야 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxkLhk/btsKZ49UfxI/vm1Pk1U9ztMzaI8VjZpM80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxkLhk/btsKZ49UfxI/vm1Pk1U9ztMzaI8VjZpM80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxkLhk/btsKZ49UfxI/vm1Pk1U9ztMzaI8VjZpM80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxkLhk%2FbtsKZ49UfxI%2Fvm1Pk1U9ztMzaI8VjZpM80%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;200&quot; height=&quot;296&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1732706188555&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        StringBuilder sb = new StringBuilder();
        int cnt=1;
        for(int i=0; i &amp;lt; str.length()-1;i++){
            if(str.charAt(i)==str.charAt(i+1)) cnt++;
            else {
                sb.append(str.charAt(i));
                if(cnt&amp;gt;1) sb.append(String.valueOf(cnt));
            }
        }

        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception{
        new Main().solution();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/23</guid>
      <comments>https://pado0711.tistory.com/23#entry23comment</comments>
      <pubDate>Wed, 27 Nov 2024 20:19:56 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security in Action] 1장</title>
      <link>https://pado0711.tistory.com/22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;읽계 된 계기:&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 기능을 구현하면서 로그인이 어떻게 이루어지는지를 이해하고 싶어서 학교 도서관에서 이 책을 빌렸다!&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;1장 내용 요약&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;* 스프링 시큐리티의 개념과 이를 이용해 해결할 수 있는 문제&lt;br /&gt;* 소프트웨어 애플리케이션에서 보안의 의미&lt;br /&gt;* 소프트웨어 보안이 중요한 이유와 관심을 가져야 하는 이유&lt;br /&gt;* 애플리케이션 수준의 일반적인 취약성&lt;/blockquote&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[소프트웨어의 비기능적 요구사항의 중요성]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 개발자는 애플리케이션의 목적이 비즈니스 문제를 해결하는 것임을 배우는 것으로 시작한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 이러한 소프트웨어 개발의 관점에는 프로세스의 관행이 잘 드러나지 않는다는 문제가 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능, 확장성, 가용성, 보안과 같은 소프트웨어의 비기능적 특징은 시간이 지남에 따라 단기적 영향과 장기적 영향을 미칠 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프르웨어의 비기능적 특징들을 무시하면 DDos(분산 서비스 거부) 공격에 원치 않게 참여하는 등, 다른 시스템 오류도 발생할 수 있다. 비기능적 요구사항의 숨겨진 측면 (누락되거나 숨겨진 것을 찾기 어려움) 때문에 이러한 문제는 더 위험하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 시스템을 다룰 때는 여러 비기능적 측면을 고려해야 한다. 이러한 비기능적 측면도 모두 중요하며 소프트웨어 개발 프로세스에서 책임감 있게 다뤄야 한다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1.1 스프링 시큐리티 : 개념과 장점]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 스프링 시큐리티와 스프링 간의 관계 알아보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://spring.io/projects/spring-security&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://spring.io/projects/spring-security&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1731405399083&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;Spring Security&quot; data-og-description=&quot;Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz&quot; data-og-host=&quot;spring.io&quot; data-og-source-url=&quot;https://spring.io/projects/spring-security&quot; data-og-url=&quot;https://spring.io/projects/spring-security&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/br4pzU/hyXwtXXKtu/hyPGtitF31KgfHOEtOqHL1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/iLAVO/hyXwubsHni/gW01xF2TV18mzxSxuZzqp1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://spring.io/projects/spring-security&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://spring.io/projects/spring-security&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/br4pzU/hyXwtXXKtu/hyPGtitF31KgfHOEtOqHL1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/iLAVO/hyXwubsHni/gW01xF2TV18mzxSxuZzqp1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;Spring Security&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;spring.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 애플리케이션에서 애플리케이션 수준의 보안을 구현할 때, 가장 우선적인 선택이며 인증, 권한 부여 및 일반적인 공격에 대한 방어를 구현하는 세부적인 맞춤 구성 방법을 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-security/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/spring-projects/spring-security/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[스프링 시큐리티 소스 코드]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 시큐리티는 스프링 애플리케이션에서 애플리케이션 수준 보안을 구현하기 위핸 사실상의 표준이다. 하지만 스프링 시큐리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 이용해도 애플리케이션이 자동으로 보호되는 것은 아니다. -&amp;gt; 애플리케이션의 필요에 맞게 스프링 시큐리티를 구성하고 맞춤 구성하는 방법을 알아야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링 애플리케이션에 스프링 시큐리티를 어떻게 이용하면 좋을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 일반적으로 애플리케이션 수준에서 가장 흔한 보안의 활용 사례는 누가 작업을 수행할 수 있는지, 특정 데이터를 이용할 수 있는지를 결정하는 것이다. 구성을 기반으로 요청을 가로채고 권한을 가진 사용자만 보호된 리소스에 접근할 수 있도록 스프링 시큐리티 구성 요소를 작성한다. 개발자는 원하는 것을 정확하게 수행하도록 구성 요소를 구성한다. (집(애플리케이션)에 경보시스템을 설치한다면 문에만 설치하고 끝낼 것이 아니라 창문에도 설치하는 것이 개발자의 역할!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1.2 소프트웨어 보안이란?]&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;현재의 소프트웨어 시스템은 특히 GDPR(General Data Protection Regulations; 일반 데이터 보호 규정) 요구사항을 고려할 때 상당 부분이 민감한 정보일 수 있는 대량의 데이터를 관리한다. 사용자가 개인적이라고 생각하는 모든 정보는 소프트웨어 애플리케이션에서 민감한 정보가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;민감한 정보에는 전화번호, 이메일 주소 또는 식별 번호와 같은 무해한 정보도 있지만, 유출됐을 때 위험성이 높은 신용 카드 정보 등의 정보는 더 중요하게 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션은 이러한 정보에 접근, 변경 또는 가로챌 기회가 없게 해야 하며 의도된 사용자 이외의 대상은 어떤 식으로든 데이터와 상호 작용할 수 없게 해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안은 계층별로 적용해야 하며, 각 계층에 다른 접근 방식이 필요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해커는 앱이 보호하는 리소스를 획득하기 위해 여러 장애물을 통과해야 한다. 각 계층을 더 잘 보호할수록 악의적인 대상이 데이터에 접근하거나 무단 작업을 수행할 가능성이 낮아진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 시스템에서 보안은 애플리케이션 수준에만 적용되는 것이 아니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 예) 네트워킹의 경우 여러 문제를 고려하고 특정한 관행을 적용해야 하며 스토리지에도 완전히 다른 사항이 적용된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보안 수준이 무엇이고 어떤 의미가 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션 수준 보안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 애플리케이션이 실행되는 환경과 애플리케이션이 처리하고 저장하는 데이터를 보호하기 위해 해야 하는 모든 것을 나타낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션에 사용되고 영향을 받는 데이터에만 국한되는 문제가 아니다. 애플리케이션에 악의적인 개인이 전체 시스템에 영향을 줄 수 있는 취약성이 있을 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Qggs/btsKFKrQVkk/59AVsBfg5vBRkJ9bwOEMx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Qggs/btsKFKrQVkk/59AVsBfg5vBRkJ9bwOEMx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Qggs/btsKFKrQVkk/59AVsBfg5vBRkJ9bwOEMx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Qggs%2FbtsKFKrQVkk%2F59AVsBfg5vBRkJ9bwOEMx1%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;500&quot; height=&quot;582&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;1048&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안은 각 계층에 적용되고 각 계층은 그 아래의 계층에 의존한다. 스프링 시큐리티 -&amp;gt; 최상층에서 애플리케이션 수준의 보안을 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힌 계층의 보안 문제를 해결할 때에는 되도록 위 계층이 존재하지 않는다고 가정하는 것이 바람직하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[스프링 시큐리티 인증 프로세스]&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;대부분의 시스템에서는 회원을 관리하고 있고, 그에 따른 인증(Authentication) 과 인가(Authorization) 에 대한 처리를 해야한다!&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;** 인증(Authentication) : 해당 사용자가 본인이 맞는지 확인하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;** 인가(Authorization) : 해당 사용자가 요청하는 자원을 실행할 수 있는 권한이 있는가를 확인하는 과정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QiSWw/btsKI3khyRq/fEmxQhVBZRTNSkXCyk6weK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QiSWw/btsKI3khyRq/fEmxQhVBZRTNSkXCyk6weK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QiSWw/btsKI3khyRq/fEmxQhVBZRTNSkXCyk6weK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQiSWw%2FbtsKI3khyRq%2FfEmxQhVBZRTNSkXCyk6weK%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;1680&quot; height=&quot;940&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;940&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qKEkp/btsKKigoDkV/XkO5DFRBfm9PgbwtktCIjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKEkp/btsKKigoDkV/XkO5DFRBfm9PgbwtktCIjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKEkp/btsKKigoDkV/XkO5DFRBfm9PgbwtktCIjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKEkp%2FbtsKKigoDkV%2FXkO5DFRBfm9PgbwtktCIjK%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;300&quot; height=&quot;211&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[자세한 내용은 조금 더 공부한 후에 설명하도록 하겠습니다!!]&lt;/p&gt;</description>
      <category> 도서</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/22</guid>
      <comments>https://pado0711.tistory.com/22#entry22comment</comments>
      <pubDate>Thu, 14 Nov 2024 18:17:54 +0900</pubDate>
    </item>
    <item>
      <title>[ 중복문자제거 ]</title>
      <link>https://pado0711.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P4F6D/btsKH9xFz0R/4jKKA7PjO2zTCH8cNboC0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P4F6D/btsKH9xFz0R/4jKKA7PjO2zTCH8cNboC0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P4F6D/btsKH9xFz0R/4jKKA7PjO2zTCH8cNboC0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP4F6D%2FbtsKH9xFz0R%2F4jKKA7PjO2zTCH8cNboC0K%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;1548&quot; height=&quot;938&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1731493303342&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        //charAt()활용
        String answer =&quot;&quot;;
        for(int i=0; i&amp;lt;input.length();i++){
            if(input.indexOf(input.charAt(i))==i) answer += input.charAt(i);
        }
        System.out.println(answer);
    }

    public static void main(String[] args) throws Exception{
        new Main().solution();
    }
}&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;.indexOf() 메서드 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;+) HashSet 사용&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;문자열의 길이가 길어질수록 시간 복잡도가 크게 증가하며, 중복된 문자가 많을 경우에는 중복 체크로 인해 불필요한 반복이 발생하게 된다. =&amp;gt; 중복을 허용하지 않는 HashSet 사용하여 효과적으로 제거 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Set이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; Set 인터페이스 구현 클래스에서는 객체를 중복해서 저장할 수 없으며, 하나의 null 값만 저장할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 중복을 자동으로 제공해준다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Set는 비선형구조이다!&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Heap 영역에 존재하며, 비선형구조이기 때문에 순서의 개념과 인덱스가 존재하지 않는다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 때문에 값을 추가/삭제 하는 경우, &lt;b&gt;set 내부에 해당 값을 검색하&lt;/b&gt;여 해당 기능을 수행해야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 처리 속도가 &lt;b&gt;List 구조에 비해 느리다는 단점이 있다&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;size18&quot;&gt;&lt;b&gt;HashSet 이란?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; Set 인터페이스에서 지원하는 구현 클래스이다 (Set의 성질 그대로 상속받음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 다음의 성질을 가진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. HashSet은 중복된 값을 허용하지 않는다&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;2. List 등과는 다르게 저장한 순서가 보장되지 않는다&amp;nbsp; (저장 순서를 유지하려면 LinkedHashSet 사용)&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;3. null을 값으로 허용한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731494145142&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 타입을 지정 가능
HashSet&amp;lt;String&amp;gt; animals1 = new HashSet&amp;lt;String&amp;gt;();

// 타입을 생략하여 사용 가능 -&amp;gt; 빈 HashSet생성 시 사용
HashSet&amp;lt;String&amp;gt; animals2 = new HashSet&amp;lt;&amp;gt;();  

// 초기 용량(Capacity) 설정
HashSet&amp;lt;String&amp;gt; animals3 = new HashSet&amp;lt;&amp;gt;(10); 

 // animal의 모든 값을 가진 HashSet 생성 
HashSet&amp;lt;String&amp;gt; animals4 = new HashSet&amp;lt;&amp;gt;(animals1);

//초기값 지정 가능
HashSet&amp;lt;String&amp;gt; animals5 = new HashSet&amp;lt;&amp;gt;(Arrays.asList(&quot;tiger&quot;, &quot;lion&quot;, &quot;fox&quot;));&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;HashSet 요소에 add() 메소드를 호출하여 값을 추가 가능하다!&lt;/p&gt;
&lt;pre id=&quot;code_1731494256806&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HashSet&amp;lt;String&amp;gt; animals = new HashSet&amp;lt;&amp;gt;()
	animals.add(&quot;tiger&quot;);
    animals.add(&quot;lion&quot;);
    animals.add(&quot;fox&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HashSet은 저장 순서가 보장되지 않기에 특정 위치에 값을 추가하거나 할 수 없다!!&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;b&gt;입력되는 값이 HashSet내부에 존재하지 않으면, 값을 HashSet에 추가한 후 true 반환 / 내부에 존재한다면 false를 반환한다&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;b&gt;size() 메소드를 사용하여 Hash의 크기를 구할 수 있다&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1731494446648&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HashSet&amp;lt;Integer&amp;gt; set = new HashSet&amp;lt;Integer&amp;gt;(Arrays.asList(1,2,3));

//set 크기 : 3
System.out.println(set.size());&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;remove(), clear() 메소드를 사용하여 Hash값을 제거할 수 있다&lt;/p&gt;
&lt;pre id=&quot;code_1731494538694&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HashSet&amp;lt;Integer&amp;gt; set = new HashSet&amp;lt;Integer&amp;gt;(Arrays.asList(1,2,3));

//값1 제거
set.remove(2);

//모든 값을 제거

set.clear();&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 값에 대해 contains(value) 메소드를 통해 Hash 내부에 존재하는지 확인이 가능하다&lt;/p&gt;
&lt;pre id=&quot;code_1731494650423&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HashSet&amp;lt;Integer&amp;gt; set = new HashSet&amp;lt;Integer&amp;gt;(Arrays.asList(1,2,3));

//set 내부에 값 1이 있다면 -&amp;gt; true/ 없다면 false 출력
System.out.println(set.contains(1));&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HashSet 을 적용해서 바꾼 코드&lt;/h4&gt;
&lt;pre id=&quot;code_1731495126921&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
    public void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();

        StringBuilder sb = new StringBuilder();
        Set&amp;lt;Character&amp;gt; set = new HashSet&amp;lt;&amp;gt;();

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

            char c = str.charAt(i);

            if (!set.contains(c)) {
                sb.append(c);
                set.add(c);
            }
        }
        System.out.println(sb);
    }

    public static void main(String[] args) throws Exception{
        new Main().solution();
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/21</guid>
      <comments>https://pado0711.tistory.com/21#entry21comment</comments>
      <pubDate>Wed, 13 Nov 2024 19:53:07 +0900</pubDate>
    </item>
    <item>
      <title>자바(Java) 알고리즘 문제풀이 입문 10. 문자거리</title>
      <link>https://pado0711.tistory.com/20</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRKq8/btsJT6BMp80/t0vEOQMTCq7fkblmL4Xnkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRKq8/btsJT6BMp80/t0vEOQMTCq7fkblmL4Xnkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRKq8/btsJT6BMp80/t0vEOQMTCq7fkblmL4Xnkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRKq8%2FbtsJT6BMp80%2Ft0vEOQMTCq7fkblmL4Xnkk%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;1736&quot; height=&quot;966&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[문제 분석]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 문자열 s (길이 100이하)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 문자 t&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;예시 입력1에서, 문자열 s = teachermode , 문자열 t = e&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;예시 출력 1&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// s[0] = t 와 s[1] = e 사이의 거리 = 1&lt;br /&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// s[1] = e와 s[1] = e 사이의 거리 = 0&lt;br /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[2] = a 와 s[1] = e 사이의 거리 = 1&lt;br /&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[3] = c 와 s[1] = e 사이의 거리 = 2&lt;br /&gt;&lt;b&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[4] = h 와 s[5] = e 사이의 거리 = 1&lt;/b&gt;&lt;br /&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[5] = e와 s[5] = e 사이의 거리 = 0&lt;br /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[6] = r 와 s[5] = e 사이의 거리 = 1&lt;br /&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[7] = m 와 s[5] = e 사이의 거리 = 2&lt;br /&gt;&lt;b&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[8] = o 와 s[10] = e 사이의 거리 = 2&lt;/b&gt;&lt;br /&gt;&lt;b&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[9] = d 와 s[10] = e 사이의 거리 = 1&lt;/b&gt;&lt;br /&gt;&lt;b&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; // s[10] = e 와 s[10] = e 사이의 거리 = 0&lt;/b&gt;&lt;/blockquote&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 data-ke-size=&quot;size16&quot;&gt;문자간의 최소 거리를 구하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;탐색을 할 때, 해당 문자열의 앞에 있는 'e' 와의 거리 와, 문자열 뒤에 있는 'e'와의 거리를 비교해서 최소한의 거리를 구해야함&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;1. for 문&amp;nbsp; &amp;gt;&amp;nbsp; 해당 문자열의 앞에있는 e 와의 거리 구하기&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;2. for문 &amp;gt; 문자열 뒤에 있는 'e'와의 거리와 비교해서 더 적은 값&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;pre id=&quot;code_1727866245626&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public void solution() throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        String s = st.nextToken();
        char t = st.nextToken().charAt(0); // Convert the string token to a char


        int[] answer = new int[s.length()];
        int p = 1000;   //일단 처음 값을 1000으로 두기
        for (int i = 0; i &amp;lt; s.length(); i++) {
            if (s.charAt(i) == t) {
                p = 0;
                answer[i] = p;
            } else {
                p++;
                answer[i] = p;
            }
        }

        p = 1000;
        for (int i = s.length() - 1; i &amp;gt;= 0; i--) {
            if (s.charAt(i) == t) {
                p = 0;
            } else {
                p++;
                answer[i] = Math.min(answer[i], p);
            }
        }

        for (int i : answer) {
            System.out.print(i + &quot; &quot;);
        }
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}&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>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/20</guid>
      <comments>https://pado0711.tistory.com/20#entry20comment</comments>
      <pubDate>Wed, 2 Oct 2024 20:10:57 +0900</pubDate>
    </item>
    <item>
      <title>[INFCON 2024] 첫 인프콘 서포터즈 후기</title>
      <link>https://pado0711.tistory.com/19</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 참가 계기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매번 신청하지만 참가해본 적은 없는 인프콘..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 인프런 워밍업 클럽에서 백엔드 스터디를 참여한 이후 처음으로 인프콘 2024 서포터로써 활동할 기회가 생겼다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현업 개발자의 세션을 들을 수 있다니..나에겐 정말 흔치 않은 좋은 기회라고 생각하고 광주에서 새벽 5시 기차를 타고 이동했다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 서포터 준비&lt;/b&gt;&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;1층 인프런 존에는 각 기업 파트너 부스와 인프런 존에서 진행하는 이벤트를 참여할 수 있고, 네트워킹을 위한 사전예약을 할 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 1층에서 각 트랙의 세션이 진행된 후에는, 2층 201호에서 각 세션 스피커와 질의응답을 진행할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오후에는 세션 스피커 이외에 라이트닝 토크로 짧은 시간동안 개인 세션을 진행할 수 있고, 현업 개발자와의 네트워킹 파티에도 참여할 수 있었다! 이번에 서포터 활동으로는&lt;u&gt; 각 세션장과 발표 질의응답 위주로 돌아다닐 예정이였다&lt;/u&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&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/bB3CdS/btsITWAu6ZW/eyK7BqhAzp7Im2GA9pbGvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB3CdS/btsITWAu6ZW/eyK7BqhAzp7Im2GA9pbGvK/img.png&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;642&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.309%; margin-right: 10px;&quot; data-widthpercent=&quot;45.84&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB3CdS/btsITWAu6ZW/eyK7BqhAzp7Im2GA9pbGvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB3CdS%2FbtsITWAu6ZW%2FeyK7BqhAzp7Im2GA9pbGvK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1050&quot; height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkEZwz/btsIUwVDAwD/2Q0yFf9ZyQ8pGNevbd9JD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkEZwz/btsIUwVDAwD/2Q0yFf9ZyQ8pGNevbd9JD0/img.png&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;590&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.5282%;&quot; data-widthpercent=&quot;54.16&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkEZwz/btsIUwVDAwD/2Q0yFf9ZyQ8pGNevbd9JD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkEZwz%2FbtsIUwVDAwD%2F2Q0yFf9ZyQ8pGNevbd9JD0%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;1140&quot; height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/div&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;&amp;nbsp;&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;&lt;b&gt; 인프콘을 제대로 즐기기 위한 준비&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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/bPfUPL/btsITl8Cn89/Zhjgek390H65avddypOpfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPfUPL/btsITl8Cn89/Zhjgek390H65avddypOpfk/img.png&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; width=&quot;300&quot; height=&quot;649&quot; style=&quot;width: 47.4932%; margin-right: 10px;&quot; data-widthpercent=&quot;48.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPfUPL/btsITl8Cn89/Zhjgek390H65avddypOpfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPfUPL%2FbtsITl8Cn89%2FZhjgek390H65avddypOpfk%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;666&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyTfLl/btsISNLfREO/khQDGpiOLUazjykLu26LyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyTfLl/btsISNLfREO/khQDGpiOLUazjykLu26LyK/img.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;1088&quot; data-is-animation=&quot;false&quot; width=&quot;300&quot; height=&quot;600&quot; style=&quot;width: 51.344%;&quot; data-widthpercent=&quot;51.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyTfLl/btsISNLfREO/khQDGpiOLUazjykLu26LyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyTfLl%2FbtsISNLfREO%2FkhQDGpiOLUazjykLu26LyK%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;544&quot; height=&quot;1088&quot;/&gt;&lt;/span&gt;&lt;/div&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;b&gt;인프콘 2024 홈페이지에서 서포터로 참여하게 될 세션의 개요&lt;/b&gt;를 미리 볼 수 있고, 이를 토대로 &lt;b&gt;시간표를 작성&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;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;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;&amp;nbsp;&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; &lt;b&gt;인프콘 서포터 ot&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTTkR2/btsIViiiyjL/NRFI1krtXeOmMTqGqUFPWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTTkR2/btsIViiiyjL/NRFI1krtXeOmMTqGqUFPWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTTkR2/btsIViiiyjL/NRFI1krtXeOmMTqGqUFPWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTTkR2%2FbtsIViiiyjL%2FNRFI1krtXeOmMTqGqUFPWK%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;500&quot; height=&quot;667&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘 서포터 OT를 위해 오프닝 시간보다 2시간 전에 모였다!!&amp;nbsp; 서포터 한정 굿즈와 귀여운 인프런 사탕,서포터 티셔츠까지 받았다!! 이번 티셔츠 디자인이 너무 예뻐서 만족!! 사탕은 먹기 아까워서 소장하는걸로 &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfv714/btsIUKsCt3G/t6uWitnhLLoVQWNLug69N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfv714/btsIUKsCt3G/t6uWitnhLLoVQWNLug69N1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfv714/btsIUKsCt3G/t6uWitnhLLoVQWNLug69N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfv714%2FbtsIUKsCt3G%2Ft6uWitnhLLoVQWNLug69N1%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;600&quot; height=&quot;354&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 서포터 활동 OT 및 안내사항을 숙지한 후,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본격적으로 서포터 활동 시간표에 따라서 이동!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&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/cC7brs/btsITaM3I0i/q7oATr5qJ3sydLSvq5ljzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC7brs/btsITaM3I0i/q7oATr5qJ3sydLSvq5ljzK/img.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;590&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; width=&quot;350&quot; height=&quot;442&quot; style=&quot;width: 50.7498%; margin-right: 10px;&quot; data-widthpercent=&quot;51.35&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC7brs/btsITaM3I0i/q7oATr5qJ3sydLSvq5ljzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC7brs%2FbtsITaM3I0i%2Fq7oATr5qJ3sydLSvq5ljzK%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;467&quot; height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blTkJl/btsIVEyGd8L/oRRTsRbvKjGrPBNn5NXRy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blTkJl/btsIVEyGd8L/oRRTsRbvKjGrPBNn5NXRy1/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; width=&quot;350&quot; height=&quot;467&quot; style=&quot;width: 48.0874%;&quot; data-widthpercent=&quot;48.65&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blTkJl/btsIVEyGd8L/oRRTsRbvKjGrPBNn5NXRy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblTkJl%2FbtsIVEyGd8L%2FoRRTsRbvKjGrPBNn5NXRy1%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/div&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;b&gt;서포터 활동의 또 다른 장점??&lt;/b&gt; &lt;b&gt; &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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 부스 투어&lt;/b&gt;&lt;/h3&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/OlI5t/btsIUl04JEj/JzzjppxJhPpVv4ttgnPMN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OlI5t/btsIUl04JEj/JzzjppxJhPpVv4ttgnPMN1/img.png&quot; data-origin-width=&quot;1041&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; width=&quot;500&quot; height=&quot;692&quot; style=&quot;width: 48.5099%; margin-right: 10px;&quot; data-widthpercent=&quot;49.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OlI5t/btsIUl04JEj/JzzjppxJhPpVv4ttgnPMN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOlI5t%2FbtsIUl04JEj%2FJzzjppxJhPpVv4ttgnPMN1%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;1041&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6z4jC/btsISTxQvCE/KLIjlAYDkmaG85z2h5pqzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6z4jC/btsISTxQvCE/KLIjlAYDkmaG85z2h5pqzK/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.3273%;&quot; data-widthpercent=&quot;50.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6z4jC/btsISTxQvCE/KLIjlAYDkmaG85z2h5pqzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6z4jC%2FbtsISTxQvCE%2FKLIjlAYDkmaG85z2h5pqzK%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠르게 기업 부스 돌아보기!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업 부스에서 이벤트를 참여하고 각종 굿즈들을 쓸어올 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&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/QIAKc/btsITnFkgT7/nAXajU2umh0HZGiF4PuUkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QIAKc/btsITnFkgT7/nAXajU2umh0HZGiF4PuUkk/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; width=&quot;350&quot; height=&quot;467&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QIAKc/btsITnFkgT7/nAXajU2umh0HZGiF4PuUkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQIAKc%2FbtsITnFkgT7%2FnAXajU2umh0HZGiF4PuUkk%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKmeqA/btsIUu4CeTj/IakS1wkqUsPCvFhawY0Qe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKmeqA/btsIUu4CeTj/IakS1wkqUsPCvFhawY0Qe0/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; width=&quot;350&quot; height=&quot;467&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKmeqA/btsIUu4CeTj/IakS1wkqUsPCvFhawY0Qe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKmeqA%2FbtsIUu4CeTj%2FIakS1wkqUsPCvFhawY0Qe0%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 참여하는 기업에서 네트워킹 타임 테이블도 볼 수 있다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;네트워킹에 참여하고 싶다면 인프런 존에서 &lt;u&gt;네트워킹 사전예약을 한 이후&lt;/u&gt;에 참여할 수 있다&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cobloa/btsIUCuK6uq/FiQqFDLWXDUYBmfkYLV3L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cobloa/btsIUCuK6uq/FiQqFDLWXDUYBmfkYLV3L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cobloa/btsIUCuK6uq/FiQqFDLWXDUYBmfkYLV3L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcobloa%2FbtsIUCuK6uq%2FFiQqFDLWXDUYBmfkYLV3L0%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;500&quot; height=&quot;667&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람이 몰리기 전 인프런 존에서 세컷 사진도 찍었다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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 contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 인프콘 2024 오프닝&lt;/b&gt;&lt;/h3&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/Xksxb/btsITWN650h/kgleFY3ihJs4VkfHkqUXqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xksxb/btsITWN650h/kgleFY3ihJs4VkfHkqUXqK/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xksxb/btsITWN650h/kgleFY3ihJs4VkfHkqUXqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXksxb%2FbtsITWN650h%2FkgleFY3ihJs4VkfHkqUXqK%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AzXwC/btsISMyJvs6/Zh3rjX2ia0VAKja7pafcz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AzXwC/btsISMyJvs6/Zh3rjX2ia0VAKja7pafcz1/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AzXwC/btsISMyJvs6/Zh3rjX2ia0VAKja7pafcz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAzXwC%2FbtsISMyJvs6%2FZh3rjX2ia0VAKja7pafcz1%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘 오프닝에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프런의 비전, 성장과정, 인프콘에서 새롭게 적용된 기술들을 엿볼 수 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 신기했던 부분은 &lt;u&gt;더빙 다국어 기능&lt;/u&gt;이였다!! 김영한 님의 목소리로 영어 더빙을 들을 수 있다니..정말 신기했다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글로벌 온라인 교육 플랫폼으로써의 도약이 기대되는 인프런의 오프닝 세션이였다 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z6Kxr/btsIS8n76XL/OJMLKjTqU8iXfsYzz5Tu6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z6Kxr/btsIS8n76XL/OJMLKjTqU8iXfsYzz5Tu6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z6Kxr/btsIS8n76XL/OJMLKjTqU8iXfsYzz5Tu6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ6Kxr%2FbtsIS8n76XL%2FOJMLKjTqU8iXfsYzz5Tu6k%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;500&quot; height=&quot;667&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프닝이 끝난 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 아셈볼룸에는 인프콘을 찾아온 많은 사람들로 북적였다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기업 부스는 한가할 때 충분히 돌아봤으므로 , 서포터 활동 전에 미리 짜온 시간표대로 세션을 하나 듣기로 했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 세션 참여&lt;/b&gt;&lt;/h3&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/b3eDpW/btsIS8hkvna/CqDveZ4hYkViBMwTvrCwAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3eDpW/btsIS8hkvna/CqDveZ4hYkViBMwTvrCwAK/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3eDpW/btsIS8hkvna/CqDveZ4hYkViBMwTvrCwAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3eDpW%2FbtsIS8hkvna%2FCqDveZ4hYkViBMwTvrCwAK%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eFCblD/btsIVGiXXi2/x50dzA2hXyvOgW45OAXeB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eFCblD/btsIVGiXXi2/x50dzA2hXyvOgW45OAXeB1/img.png&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eFCblD/btsIVGiXXi2/x50dzA2hXyvOgW45OAXeB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeFCblD%2FbtsIVGiXXi2%2Fx50dzA2hXyvOgW45OAXeB1%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;1080&quot; height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘 세션을 참여하면서 인프콘 발표자들의 문제 해결에 대한 열정과 노력을 느낄 수 있었다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인 시스템, 데이터를 활용한 ux 전략, 바이트 플러그 만들기 등 다양한 분야의 세션을 들었는데 하나같이 개발자로서 견문을 넓히는데에 도움이 되는 분야라고 생각이 들었고, 발표자들의 개발에 대한 열정에 자극을 받을 수 있었던 시간이였다&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1081&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsJxyj/btsIS7pai3x/oedg82uLamiXkZg3vOqPD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsJxyj/btsIS7pai3x/oedg82uLamiXkZg3vOqPD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsJxyj/btsIS7pai3x/oedg82uLamiXkZg3vOqPD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsJxyj%2FbtsIS7pai3x%2Foedg82uLamiXkZg3vOqPD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1440&quot; height=&quot;1081&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1081&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 인프콘 세션에서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목적 조직 구조 안에서 개발팀이 어떻게 일하는지도 알아볼 수 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소규모의 인원들로 진행되는 프로젝트 안에서 각자가 하나의 목표를 가지고 열정적으로 임하는 모습을 볼 수 있었다&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&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;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 질의응답존&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiuMJW/btsIVbXNuDS/PoG1tNsKQH34QhG96i2tFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiuMJW/btsIVbXNuDS/PoG1tNsKQH34QhG96i2tFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiuMJW/btsIVbXNuDS/PoG1tNsKQH34QhG96i2tFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiuMJW%2FbtsIVbXNuDS%2FPoG1tNsKQH34QhG96i2tFK%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;500&quot; height=&quot;667&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&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;&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; &lt;b&gt;참여 후기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 오프라인 세션에 참여할 수 있다는 것 만으로도 충분히 코엑스까지 올 가치가 있다고 생각했는데, 각 세션을 들으면서 얻은 개발에 대한 조언과 인사이트들을 통해 개발자로 성장하는데에 큰 도움이 될 것 같다고 느꼇다!! 일반 참가자가 아닌 인프런 서포터로 참여하는 좋은 기회가 생긴 덕분에 인프콘을 200% 즐길 수 있었다고 생각했다✨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정상 네트워킹에는 참여할 수 없었지만, 내년에 또 서포터로 참여할 수 있는 기회가 주어진다면 네트워킹에도 참여해보고 싶다 &lt;b&gt;벌써 인프콘 2025가 기대된다!!&lt;/b&gt;&lt;/p&gt;</description>
      <category> 인사이트</category>
      <category>인프런</category>
      <category>인프런워밍업클럽</category>
      <category>인프콘2024</category>
      <category>인프콘2024서포터</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/19</guid>
      <comments>https://pado0711.tistory.com/19#entry19comment</comments>
      <pubDate>Wed, 14 Aug 2024 10:24:49 +0900</pubDate>
    </item>
    <item>
      <title>[2018] - 수들의 합 5 : 투 포인터</title>
      <link>https://pado0711.tistory.com/18</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKUYTX/btsIDICF5Wg/VPLU4yfLkKbQkA75knqZg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKUYTX/btsIDICF5Wg/VPLU4yfLkKbQkA75knqZg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKUYTX/btsIDICF5Wg/VPLU4yfLkKbQkA75knqZg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKUYTX%2FbtsIDICF5Wg%2FVPLU4yfLkKbQkA75knqZg1%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;1158&quot; height=&quot;812&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문제설명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간제한 2초&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자연수 N(1&amp;lt;=N&amp;lt;=백만) N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하는 자연수는 N 이하여야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) 15 -&amp;gt; 15, 7+8, 1+2+3+4+5 (4가지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10 -&amp;gt; 10, 1+2+3+4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구간합 이용?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ 1 2 3&amp;nbsp; 4&amp;nbsp; 5&amp;nbsp; 6 7 8 9 10 11 12 13 14 15 ]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 문제 분석&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;문제에 주어진 시간은 2초인데, N의 최댓값은 10,000,000으로 매우 크게 잡혀있다 =&amp;gt; 이런 상황에서는 O(NlogN) 의 시간 복잡도 알고리즘을 사용하면 제한 시간을 초과하므로 O(N)의 시간 복잡도 알고리즘을 사용해야 한다&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속된 자연수의 합을 구하는 것이 문제이므로, 시작 인덱스와 종료 인덱스를 지정하여 연속된 수를 표현할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;투 포인터 이동 원칙을 활용해 배열의 끝까지 탐색하면서 합이 N이 될 경우의 수를 구한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;start_index를 오른쪽으로 한 칸 이동하는 것은 연속된 자연수에서 왼쪽 값을 삭제하는 것과 효과가 같으며, end_index를 오른쪽으로 한 칸 이동하는 것은 연속된 자연수의 범위를 한칸 더 확장하는 의미이다. 같을 때는 경우의 수를 1 증가시키고, end_index를 오른쪽으로 이동시킨다&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;투 포인터 이동 원칙&lt;/b&gt;&lt;br /&gt;&lt;b&gt;* sum &amp;gt; N :&amp;nbsp; &amp;nbsp;sum = sum- start_index;&amp;nbsp; start_index++;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;* sum &amp;lt; N :&amp;nbsp; &amp;nbsp;end_index++; sum= sum + end_index;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;* sum == N : end_index++; sum = sum + end_index; count++;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 수도 코드&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;N 변수 저장&lt;br /&gt;사용 변수 초기화 (coutn =1, start_index=1; end_index = 1; sum=1)&lt;br /&gt;whlie(end_index != N){&lt;br /&gt;&amp;nbsp; &amp;nbsp; if(sum==N) count 증가, end_index 증가, sum 값 변경&lt;br /&gt;&amp;nbsp; &amp;nbsp; else if(sum &amp;gt; N ) sum 값 변경, start_index 증가&lt;br /&gt;&amp;nbsp; &amp;nbsp; else if(sum &amp;lt; N ) end_index 증가 , sum 값 변경&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;count 값 출력하&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 코드 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723446685995&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;

public class Main {

    public void solution()  throws Exception {
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       int N = Integer.parseInt(br.readLine());
       int count =1;
       int start_index = 1;
       int end_index =1;
       int sum =1;

       while(end_index !=N){
           if (sum == N){
               count++; end_index++; sum += end_index;
           } else if (sum &amp;gt; N) {
               sum -= start_index;
           } else {
               end_index++; sum += end_index;
           }
       }
        System.out.println(count);

    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}&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;
&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;b&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=SrMk-EdWRUE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=SrMk-EdWRUE&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignLeft&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=SrMk-EdWRUE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cSd7Mr/hyWKwoiWGB/aSLcQJqe07ibgMXXOUTKu1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;500&quot; data-video-height=&quot;281&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;코딩테스트 필수 테크닉, 투 포인터 기법&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/SrMk-EdWRUE&quot; width=&quot;500&quot; height=&quot;281&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> 알고리즘 피드백/백준</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/18</guid>
      <comments>https://pado0711.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 12 Aug 2024 16:32:50 +0900</pubDate>
    </item>
    <item>
      <title>[ Do it! 알고리즘 코딩테스트 with JAVA ] - 구간합</title>
      <link>https://pado0711.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[부분 합 (Partial sum)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 부분 합이란 구간 합과 달리 처음부터 특정 인덱스까지의 합을 의미한다 (Array[i] 부터 Array[j]까지의 합)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[구간 합(Prefix sum)]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;gt; 합 배열을 이용하여 시간복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보통 1차원 배열에서 i~k 인덱스 사이의 값들의 합을 구하는데 사용한다&lt;/b&gt;&lt;/p&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;&amp;nbsp;&lt;/p&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;&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;[합 배열 S의 정의]&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;S[i] = A[0] + A[1] + A[2] + ... + A[i-1] + A[i]&amp;nbsp; &amp;nbsp;//A[0] 부터 A[i] 까지의 합&lt;/blockquote&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;이렇게 합 배열을 미리 구해놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N)에서 O(1)로 감소한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38bNe/btsIwruGO2E/GKZsug0Dxi9csocL6NvwXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38bNe/btsIwruGO2E/GKZsug0Dxi9csocL6NvwXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38bNe/btsIwruGO2E/GKZsug0Dxi9csocL6NvwXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38bNe%2FbtsIwruGO2E%2FGKZsug0Dxi9csocL6NvwXK%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;600&quot; height=&quot;232&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어서,&amp;nbsp; S(t)&amp;nbsp; = 배열A의 A[0] + A[1] + A[2] + A[3] + A[4] 의 값이다.&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;A[i] 부터 A[j]까지의 배열 합을 합 배열 없이 구하는 경우, 최악의 경우는 i가 0이고, j가 N인 경우로, 시간 복잡도는 O(N)이다. =&amp;gt; 합 배열을 사용하면 O(1) 안에 답을 구할 수 있음&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;[합 배열 S를 만드는 공식]&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;S[i] = S[i-1] + A[i]&lt;/blockquote&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;blockquote data-ke-style=&quot;style3&quot;&gt;S[j] - S[i-1]&amp;nbsp; &amp;nbsp; //i에서 j까지의 구간 합&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ8XfT/btsIwr9iW5v/4qosKkmfFBte0Ccww6S9FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ8XfT/btsIwr9iW5v/4qosKkmfFBte0Ccww6S9FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ8XfT/btsIwr9iW5v/4qosKkmfFBte0Ccww6S9FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ8XfT%2FbtsIwr9iW5v%2F4qosKkmfFBte0Ccww6S9FK%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;540&quot; height=&quot;274&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[A[2] 부터 A[5]까지의 구간 합을 합 배열로 구하는 과정]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S[5] = A[0] + A[1] + A[2] + A[3] + A[4]+ A[5]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S[1] = A[0] + A[1]&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S[5] - S[1] = A[2] + A[3] + A[4]+ A[5]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@leeeeeyeon/%EA%B5%AC%EA%B0%84-%ED%95%A9-%EB%B6%80%EB%B6%84-%ED%95%A9-%EB%88%84%EC%A0%81-%ED%95%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@leeeeeyeon/%EA%B5%AC%EA%B0%84-%ED%95%A9-%EB%B6%80%EB%B6%84-%ED%95%A9-%EB%88%84%EC%A0%81-%ED%95%A9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723439600684&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;구간 합, 부분 합, 누적 합&quot; data-og-description=&quot;배열의 일부 구간에 대한 합을 매우 빠르게 구해보자&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@leeeeeyeon/%EA%B5%AC%EA%B0%84-%ED%95%A9-%EB%B6%80%EB%B6%84-%ED%95%A9-%EB%88%84%EC%A0%81-%ED%95%A9&quot; data-og-url=&quot;https://velog.io/@leeeeeyeon/구간-합-부분-합-누적-합&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNsCvN/hyWKFFzGBm/Navplkle4wfPAN1IiKBMD0/img.jpg?width=1031&amp;amp;height=580&amp;amp;face=0_0_1031_580,https://scrap.kakaocdn.net/dn/cPfYri/hyWKDnrhpN/XmmTbuWoAW4CuEssMAWBQk/img.jpg?width=1031&amp;amp;height=580&amp;amp;face=0_0_1031_580,https://scrap.kakaocdn.net/dn/bx43jS/hyWOiaQCvU/OZpUxBWlhPLj21eccDwky1/img.png?width=1240&amp;amp;height=1182&amp;amp;face=0_0_1240_1182&quot;&gt;&lt;a href=&quot;https://velog.io/@leeeeeyeon/%EA%B5%AC%EA%B0%84-%ED%95%A9-%EB%B6%80%EB%B6%84-%ED%95%A9-%EB%88%84%EC%A0%81-%ED%95%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@leeeeeyeon/%EA%B5%AC%EA%B0%84-%ED%95%A9-%EB%B6%80%EB%B6%84-%ED%95%A9-%EB%88%84%EC%A0%81-%ED%95%A9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNsCvN/hyWKFFzGBm/Navplkle4wfPAN1IiKBMD0/img.jpg?width=1031&amp;amp;height=580&amp;amp;face=0_0_1031_580,https://scrap.kakaocdn.net/dn/cPfYri/hyWKDnrhpN/XmmTbuWoAW4CuEssMAWBQk/img.jpg?width=1031&amp;amp;height=580&amp;amp;face=0_0_1031_580,https://scrap.kakaocdn.net/dn/bx43jS/hyWOiaQCvU/OZpUxBWlhPLj21eccDwky1/img.png?width=1240&amp;amp;height=1182&amp;amp;face=0_0_1240_1182');&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;배열의 일부 구간에 대한 합을 매우 빠르게 구해보자&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> 알고리즘 피드백/코테 관련 강좌</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/17</guid>
      <comments>https://pado0711.tistory.com/17#entry17comment</comments>
      <pubDate>Mon, 12 Aug 2024 15:00:59 +0900</pubDate>
    </item>
    <item>
      <title>[ Do it! 알고리즘 코딩테스트 with JAVA ] - 시간복잡도</title>
      <link>https://pado0711.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;[시간복잡도]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;-&amp;gt; 알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;일반적으로 수행 시간은 &lt;b&gt;1억번의 연산을 1초의 시간&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;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;[시간복잡도 유형]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;* 빅-오메가 : 최선일 때(best case)의 연산 횟수를 나타낸 표기법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;* 빅- 세타 : 보통일 때(average case)의 연산 횟수를 나타낸 표기법&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;* 빅 - 오: 최악일 때(worst case)의 연산 횟수를 나타낸 표기법&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;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;예제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;- 0~99사이의 무작윗값을 찾아 출력하는 코드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #495057; text-align: start;&quot;&gt;빅- 오메가 표기법의 시간복잡도는 1번 , 빅-세타 표기법의 시간 복잡도는 2/N 번 , 빅 - 오 표기법의 시간 복잡도는 N번이다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720665462990&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class timeComplexityEx {
	public static void main(String[] args){
    	// 1~100 사이의 랜덤 값 선택
        int findNum = (int)(Math.random() * 100); //여기서 N = 100
        for(int i=0; i&amp;lt;100;i++){
        	if(i==findNum){
            	System.out.println(i);
                break;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 N= 100이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균적으로 50번만에 문제를 해결 가능 -&amp;gt; 빅-세타는 N/2&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;99번째까지 값을 찾지 못하고, 마지막에서야 값을 찾는 경우(최악의 경우) -&amp;gt; 빅 오는 N (100)&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;b&gt;할 때에는 3가지 유형 중 빅-오(최악의 경우)를 생각해야한다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;-&amp;gt; 코딩테스트의 test set은 input이 여러 케이스가 있기 때문에 항상 가장 최악의 경우를 염두해두어야한다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WPieg/btsIvOB2G2y/gry03ZAe5EJQXZuidxXNm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WPieg/btsIvOB2G2y/gry03ZAe5EJQXZuidxXNm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WPieg/btsIvOB2G2y/gry03ZAe5EJQXZuidxXNm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWPieg%2FbtsIvOB2G2y%2Fgry03ZAe5EJQXZuidxXNm0%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;1070&quot; height=&quot;586&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;&lt;b&gt;logN 의 시간복잡도를 가진 연산은&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;100번 이 필요하다고 할 때 ... 2^6 = 64, 2^7 = 128, 즉 7번 만에 값을 찾을 수 있다&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[시간복잡도 활용하기]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예) N개의 수가 주어졌을 때 이를 오름차순 정렬하는 프로그램을 작성하시오&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;- 입력: 1번째 줄에 수의 개수 N&lt;b&gt;(1 &amp;lt;= N &amp;lt;= 1,000,000)&lt;/b&gt;, 2번째 줄부터는 N개의 줄에 숫자가 주어진다. 이 수는 절대값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다(시간제한 2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 테스트 케이스의 숫자범위가 작을지라도, 백만까지의 수를 염두해두고 풀어야한다&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;시간제한이 2초이므로, 이 조건을 만족하려면 2억번 이하의 연산 횟수로 문제를 해결해야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 문제에서 주어진 시간 제한과 데이터 크기를 바탕으로 어떤 정렬 알고리즘을 사용해야 할 것인지르 판단할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(연산 횟수는 1초에 1억번 연산하는 것을 기준으로 생각하기, 시간 복잡도는 항상 최악일때,= 데이터의 크기가 가장 클 때를 기준으로 합니다)&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;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;nbsp; &lt;b&gt;&amp;nbsp; 연산 횟수 = 알고리즘 시간 복잡도 X 데이터의 크기&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 알고리즘 적합성 평가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; * &lt;b&gt;버블 정렬(N^2)&lt;/b&gt; = (1,000,000)^2 = 1,000,000,000,000 &amp;gt; 2,000,000,000&amp;nbsp; =&amp;gt; 부적합 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;b&gt;* 병합 정렬(NlogN)&lt;/b&gt; = 1,000,000 log(1,000,000) = 약 6,000,000 &amp;lt; 200,000,000 =&amp;gt; 적합 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[시간 복잡도 도출 고려사항 ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상수는 시간 복잡도 계산에서 제외한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준이 된다&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;- 연산 횟수가 N인 경우&lt;/p&gt;
&lt;pre id=&quot;code_1720674890918&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class 시간복잡도_판별원리1 {
	public static void main(String){
    	int N = 100000;
        int count =0;
        for(int i=0; i&amp;lt;N; i++){
        	System.out.println(&quot;연산 횟수:&quot;, cnt++);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 이 코드의 시간복잡도는 O(N)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720675403410&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public static void main(String[] args){
        int N  = 100000;
        int count =0;

        for(int i=0; i&amp;lt;N; i++){
            System.out.println(&quot;연산 횟수: &quot;+ count++);
        }
        for(int i=0; i&amp;lt;N; i++){
            System.out.println(&quot;연산 횟수: &quot;+ count++);
        }
        for(int i=0; i&amp;lt;N; i++){
            System.out.println(&quot;연산 횟수: &quot;+ count++);
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 일차원 for문을 3번 돌림 -&amp;gt; 시간복잡도 O(3N)&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;그런데 시간복잡도 상으로 O(N) 과 O(3N) 은 별로 차이가 나지 않는다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 시간복잡도는 O(N)으로 똑같다고 본다&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;그런데, 이중 for문의 경우 연산 횟수가 N X N =&amp;gt; 연산 횟수가 N^2 이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt;&lt;b&gt; 시간복잡도는 가장 많이 중첩된 반복문을 기준으로 도출&lt;/b&gt;하므로 이 코드에서는 이중 for문이 전체 코드의 시간 복잡도 기준이 된다. 만약 일반 for문이 10개 더 있다 하더라도 도출 원리의 기준에 따라 시간 복잡도의 변화 없이 N^2 으로 유지된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 자신이 작성한 코드의 시간 복잡도를 노출할 수 있다면, 실제 코딩테스트에서 시간 초과가 발생했을 때, 이 원리를 바탕으로 문제가 되는 코드 부분은 도출할 수 있고, 이 부분을 연산에 더욱 효율적인 구조로 수정하는 작업으로 문제를 해결할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> 알고리즘 피드백/코테 관련 강좌</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/16</guid>
      <comments>https://pado0711.tistory.com/16#entry16comment</comments>
      <pubDate>Mon, 12 Aug 2024 14:10:32 +0900</pubDate>
    </item>
    <item>
      <title>차세대 프로젝트  :   회사의 중요한 업무 시스템을 외부 회사에 개발을 맡겨서 완전히 새롭게 만드는 일</title>
      <link>https://pado0711.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[용어가 쓰인 부분]&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;br /&gt;차세대 프로젝트가 실패하는 이유&lt;br /&gt;(중략)&lt;br /&gt;&amp;nbsp;생각이 미친 김에 다시 한번 글을 빌어 왜 차세대 프로젝트를 하지 말아야 하는지 말씀드리려고 한다.&lt;br /&gt;&lt;b&gt;차세대 프로젝트는 외부인력이 주도하여 문제를 파악하고 시스템을 완전히 새로 만드는 방법을 취한다&lt;/b&gt;. 하지만, 현재 존재하는 시스템에 깊이 침투하여 문제 자체를 명확하게 학습하지 못하면, 해결책을 얻을 수 없다. 문제를 모르는데, 어떻게 해결한다는 말인가? 한국에서 지난 10여년 상식처럼 여겨졌던 차세대 프로젝트는 열심히 하고 못하고를 떠나, 차세대 프로젝트를 한다는 그 자체로 이미 잘못된 길을 가는 것이다. Solution-First라고 불러도 좋을 외산 방법론(CBD, MDD 방법론, MDM 등)이나 솔루션(SAP, Oracle, 미들웨어 등) 납품을 우선해서 시스템을 구축하는 과거의 접근은 문제 파악에는 아무런 도움이 되지 않는다. 어떤 솔루션을 도입했는지에 관계 없이 문제 파악을 충분히 하지 않고, 다시 만들면 문제를 지극히 피상적[3]으로만 파악한 후 해답을 찾으려하여, 결과적으로 도리어 문제를 회피하는 효과를 낳는다.&lt;br /&gt;외산 기술을 빠르게 모방하는 소프트웨어 후진국의 과오를 빨리 인지하고, 이제는 우리의 문제를 정확히 인지하고&amp;nbsp;자신들의 노하우를 소프트웨어 형태로 축적하는 방법을 익혀야 한다. 그런 이들만이 과거를 빠져나와 후진을 면할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&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;a href=&quot;https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1722847732980&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;다양한 아기발걸음으로 배우기 | Popit&quot; data-og-description=&quot;지난 주에 있던 일이다. 동료 중국 개발자에게 모듈 개념 구현을 설명하기 위해 코드 리뷰를 했다. 코드를 보며 다룬 대화의 내용을 대략 묘사하면 아래 그림과 같다. [caption id=&amp;quot;attachment_13446&amp;quot; align&quot; data-og-host=&quot;www.popit.kr&quot; data-og-source-url=&quot;https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/&quot; data-og-url=&quot;http://www.popit.kr/다양한-아기발걸음으로-배우기/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bigG5s/hyWKAXaMVO/IFmegLZy9tHmHlFKZzYoc1/img.png?width=472&amp;amp;height=280&amp;amp;face=0_0_472_280,https://scrap.kakaocdn.net/dn/dp8lwB/hyWKESPK57/mU45cuKoCoOBHVx451dK31/img.png?width=472&amp;amp;height=280&amp;amp;face=0_0_472_280,https://scrap.kakaocdn.net/dn/couzsw/hyWKDl5nyS/E03PTIhYSUrcEkLCsQteBK/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot;&gt;&lt;a href=&quot;https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.popit.kr/%EB%8B%A4%EC%96%91%ED%95%9C-%EC%95%84%EA%B8%B0%EB%B0%9C%EA%B1%B8%EC%9D%8C%EC%9C%BC%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EA%B8%B0/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bigG5s/hyWKAXaMVO/IFmegLZy9tHmHlFKZzYoc1/img.png?width=472&amp;amp;height=280&amp;amp;face=0_0_472_280,https://scrap.kakaocdn.net/dn/dp8lwB/hyWKESPK57/mU45cuKoCoOBHVx451dK31/img.png?width=472&amp;amp;height=280&amp;amp;face=0_0_472_280,https://scrap.kakaocdn.net/dn/couzsw/hyWKDl5nyS/E03PTIhYSUrcEkLCsQteBK/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600');&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;다양한 아기발걸음으로 배우기 | Popit&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 주에 있던 일이다. 동료 중국 개발자에게 모듈 개념 구현을 설명하기 위해 코드 리뷰를 했다. 코드를 보며 다룬 대화의 내용을 대략 묘사하면 아래 그림과 같다. [caption id=&quot;attachment_13446&quot; align&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.popit.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;</description>
      <category> 개발 용어집</category>
      <author>lVlina</author>
      <guid isPermaLink="true">https://pado0711.tistory.com/15</guid>
      <comments>https://pado0711.tistory.com/15#entry15comment</comments>
      <pubDate>Mon, 5 Aug 2024 17:50:06 +0900</pubDate>
    </item>
  </channel>
</rss>