<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자P의 코딩일기</title>
    <link>https://developer-p.tistory.com/</link>
    <description>개발자를 꿈꾸는, 개발자P의 IT이야기입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 13 Apr 2026 17:16:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>개발자P</managingEditor>
    <image>
      <title>개발자P의 코딩일기</title>
      <url>https://tistory1.daumcdn.net/tistory/3841775/attach/36306a80ab8347e18945e4f2bab43a7d</url>
      <link>https://developer-p.tistory.com</link>
    </image>
    <item>
      <title>앱스토어 개인정보처리방침 - Track Pod</title>
      <link>https://developer-p.tistory.com/219</link>
      <description>&lt;h1 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;Privacy Policy&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Last updated: May 17, 2025&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.freeprivacypolicy.com/free-privacy-policy-generator/&quot;&gt;Free Privacy Policy Generator&lt;/a&gt;.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Interpretation and Definitions&lt;/h2&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Interpretation&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Definitions&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;For the purposes of this Privacy Policy:&lt;/p&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&gt;&lt;b&gt;Account&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;means a unique account created for You to access our Service or parts of our Service.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Affiliate&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;means an entity that controls, is controlled by or is under common control with a party, where &quot;control&quot; means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Application&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;refers to Track Pod, the software program provided by the Company.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Company&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(referred to as either &quot;the Company&quot;, &quot;We&quot;, &quot;Us&quot; or &quot;Our&quot; in this Agreement) refers to Track Pod.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Country&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;refers to: South Korea&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Device&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;means any device that can access the Service such as a computer, a cellphone or a digital tablet.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Personal Data&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;is any information that relates to an identified or identifiable individual.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Service&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;refers to the Application.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Service Provider&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Usage Data&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;You&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Collecting and Using Your Personal Data&lt;/h2&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Types of Data Collected&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Personal Data&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:&lt;/p&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&gt;Usage Data&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Usage Data&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Usage Data is collected automatically when using the Service.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Information Collected while Using the Application&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;While using Our Application, in order to provide features of Our Application, We may collect, with Your prior permission:&lt;/p&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&gt;Pictures and other information from your Device's camera and photo library&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We use this information to provide features of Our Service, to improve and customize Our Service. The information may be uploaded to the Company's servers and/or a Service Provider's server or it may be simply stored on Your device.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You can enable or disable access to this information at any time, through Your Device settings.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Use of Your Personal Data&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Company may use Personal Data for the following purposes:&lt;/p&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&gt;&lt;b&gt;To provide and maintain our Service&lt;/b&gt;, including to monitor the usage of our Service.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To manage Your Account:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For the performance of a contract:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To contact You:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To provide You&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;To manage Your requests:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;To attend and manage Your requests to Us.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For business transfers:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For other purposes&lt;/b&gt;: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We may share Your personal information in the following situations:&lt;/p&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&gt;&lt;b&gt;With Service Providers:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;For business transfers:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;With Affiliates:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;With business partners:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;We may share Your information with Our business partners to offer You certain products, services or promotions.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;With other users:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;With Your consent&lt;/b&gt;: We may disclose Your personal information for any other purpose with Your consent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Retention of Your Personal Data&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Transfer of Your Personal Data&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to &amp;mdash; and maintained on &amp;mdash; computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Delete Your Personal Data&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Our Service may give You the ability to delete certain information about You from within the Service.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Disclosure of Your Personal Data&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Business Transactions&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Law enforcement&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Other legal requirements&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:&lt;/p&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&gt;Comply with a legal obligation&lt;/li&gt;
&lt;li&gt;Protect and defend the rights or property of the Company&lt;/li&gt;
&lt;li&gt;Prevent or investigate possible wrongdoing in connection with the Service&lt;/li&gt;
&lt;li&gt;Protect the personal safety of Users of the Service or the public&lt;/li&gt;
&lt;li&gt;Protect against legal liability&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Security of Your Personal Data&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Children's Privacy&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Links to Other Websites&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Changes to this Privacy Policy&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the &quot;Last updated&quot; date at the top of this Privacy Policy.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;Contact Us&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;If you have any questions about this Privacy Policy, You can contact us:&lt;/p&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&gt;By email:&lt;span&gt;&amp;nbsp;&lt;/span&gt;float@kakao.com&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>iOS | 앱 개발</category>
      <category>ios</category>
      <category>ios 앱스토어</category>
      <category>개인정보</category>
      <category>개인정보처리방침</category>
      <category>앱스토어</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/219</guid>
      <comments>https://developer-p.tistory.com/219#entry219comment</comments>
      <pubDate>Sat, 17 May 2025 22:34:37 +0900</pubDate>
    </item>
    <item>
      <title>'그래프 탐색' 문제 풀이(DFS, BFS) | 백준 Swift 2606번, 1260번</title>
      <link>https://developer-p.tistory.com/218</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;이제는 메인 문제 타입 중 하나인 DFS, BFS를 풀 차례다.&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25.02.12 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25.02.16 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래&amp;nbsp;&lt;b&gt;깃허브&lt;/b&gt;&amp;nbsp;주소에서&amp;nbsp;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739368558272&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/emnQ9j/hyYaiWr1lb/L6XcHSuX7GKTDWZpK5LMNK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cdF1HK/hyYfPyc0ge/rk50C7ulm8KXgIqy67uFA0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/emnQ9j/hyYaiWr1lb/L6XcHSuX7GKTDWZpK5LMNK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cdF1HK/hyYfPyc0ge/rk50C7ulm8KXgIqy67uFA0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2606번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2606번(DFS)
let M = Int(readLine()!)!
let N = Int(readLine()!)!

var board: [[Int]] = Array(repeating: Array(repeating: 0, count: M + 1), count: M + 1)
var visited = Array(repeating: false, count: M + 1)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (y, x) = (input[0], input[1])
    
    board[y][x] = 1
    board[x][y] = 1
}

func dfs(_ index: Int) {
    
    for next in 1...M {
        if board[index][next] == 1 &amp;amp;&amp;amp; visited[next] == false {
            visited[next] = true
            dfs(next)
        }
    }
}

dfs(1) // 1번컴퓨터 감염 시작
visited[1] = false // 1번컴퓨터는 제외
print(visited.filter{$0 == true}.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1260번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DFS, BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1260번(DFS, BFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, V) = (input[0], input[1], input[2])

var board: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)
var visited: [Bool] = Array(repeating: false, count: N + 1)
//var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (y, x) = (input[0], input[1])
    board[y][x] = 1
    board[x][y] = 1
}

var answerDFS: [Int] = [V] // V는 무조건 첫방문

func dfs(_ index: Int) {
    visited[index] = true
    
    for next in 1...N {
        if board[index][next] == 1 &amp;amp;&amp;amp; visited[next] == false { // 연결되어 있고, 미방문이면,
            visited[next] = true
            answerDFS.append(next)
            
            dfs(next)
        }
    }
}
dfs(V)

class Deque&amp;lt;T&amp;gt; {
    var enQue: [T]
    var deQue: [T] = []
    
    var count: Int {
        return enQue.count + deQue.count
    }
    
    var isEmpty: Bool {
        return enQue.isEmpty &amp;amp;&amp;amp; deQue.isEmpty
    }
    
    init(_ que: [T]) {
        self.enQue = que
    }
    
    func pushFirst(_ element: T) {
        deQue.append(element)
    }
    
    func pushLast(_ element: T) {
        enQue.append(element)
    }
    
    func popFirst() -&amp;gt; T {
        if deQue.isEmpty {
            deQue = enQue.reversed()
            enQue.removeAll()
        }
        return deQue.popLast()!
    }
    
    func popLast() -&amp;gt; T {
        if enQue.isEmpty {
            enQue = deQue.reversed()
            deQue.removeAll()
        }
        return enQue.popLast()!
    }
}

visited = Array(repeating: false, count: N + 1)
var myDeque = Deque([V])
var answerBFS: [Int] = []

func BFS(_ index: Int) {
    visited[index] = true
    
    while !myDeque.isEmpty {
        let currentY = myDeque.popFirst()
        answerBFS.append(currentY)
        
        for next in 1...N {
            if board[currentY][next] == 1 &amp;amp;&amp;amp; visited[next] == false {
                myDeque.pushLast(next)
                visited[next] = true
            }
        }
    }
}

BFS(V)
print(answerDFS.map{String($0)}.joined(separator: &quot; &quot;))
print(answerBFS.map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>BFS</category>
      <category>DFS</category>
      <category>SWIFT</category>
      <category>문제풀이</category>
      <category>백준</category>
      <category>코테</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/218</guid>
      <comments>https://developer-p.tistory.com/218#entry218comment</comments>
      <pubDate>Wed, 12 Feb 2025 22:57:16 +0900</pubDate>
    </item>
    <item>
      <title>'수학' 문제 풀이 모음 | 백준 Swift 2581번, 22864번, 1978번, 2745번, 5618번, 1110번, 11653번, 1934번, 2609번, 5347번, 1747번</title>
      <link>https://developer-p.tistory.com/217</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;span style=&quot;color: #000000;&quot;&gt;PS 문제를 다시 시작한다. 한동안 안풀었더니 다 까먹었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;매일매일 조금씩 실력을 갈고 닦아야 좋은 기회가 왔을 때 잡을 수 있으니...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;블로그도 겸사겸사 다시 작성한다는 마음으로 시작하니까 부담은 적은 것 같다. 시작이 반이라는 말이 있으니깐.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선은 오늘은 감을 익히기 위해 '수학' 파트를 풀려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 매일매일은 아니더라도, 꾸준히 문제를 풀 예정이다. DP, DFS, BFS ... KMP 까지도 가야 한다.&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;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25.01.11 업데이트&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25.01.18 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;25.02.09 업데이트&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래&amp;nbsp;&lt;b&gt;깃허브&lt;/b&gt;&amp;nbsp;주소에서&amp;nbsp;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736587102256&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7jQv0/hyXWApCzwR/kjSz02nppQpIF6lYxbpoB0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Fd5c3/hyXWAiR4fw/fW7RkKK710mvOWkk0CnGt0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7jQv0/hyXWApCzwR/kjSz02nppQpIF6lYxbpoB0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Fd5c3/hyXWAiR4fw/fW7RkKK710mvOWkk0CnGt0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2581번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;'에라토스테네스의 체' 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;단, 숫자가 커지면 메모리때문에 단일 숫자 소수 체크 사용하여야 함. (for i in 2..&amp;lt;&lt;b&gt;Int(Sqrt(Double(n)) + 1&lt;/b&gt;)&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2581번
import Foundation

let M = Int(readLine()!)!
let N = Int(readLine()!)!

var isPrimary = [0] + Array(repeating: 0, count: N)

if N == 1 {
    print(-1)
    exit(0)
}

for i in 2...N {
    isPrimary[i] = i
}

for i in 2...N {
    if isPrimary[i] == 0 {
        continue
    }
    for j in stride(from: i*2, through: N, by: i) {
        isPrimary[j] = 0
    }
}

let sum = Array(isPrimary[M...N]).filter{$0 != 0}.reduce(0, +)
if sum == 0 {
    print(-1)
}
else {
    print(sum)
    let min = Array(isPrimary[M...N]).filter{$0 != 0}.first!
    print(min)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 22864번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 22864번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B, C, M) = (input[0], input[1], input[2], input[3])

var (tired, worked) = (0, 0)

for _ in 1...24 {
    if (tired + A) &amp;lt;= M { // 일 가능
        tired += A
        worked += B
    }
    else { // 일 불가능
        tired -= C
        if tired &amp;lt; 0 { tired = 0 } // 단, 피로도가 음수가 될 순 없음.
    }
}

print(worked)&lt;/code&gt;&lt;/pre&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;백준 Swift 1978번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1978번
import Foundation
let N = Int(readLine()!)!
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

func isPrimary(_ n: Int) -&amp;gt; Bool {
    if n &amp;lt; 2 {
        return false
    }
    for i in 2..&amp;lt;Int(sqrt(Double(n)) + 1) {
        if n % i == 0 {
            return false
        }
    }
    return true
}

//func isPrimary(_ num: Int) -&amp;gt; Bool {
//    if num &amp;lt; 4 {
//        return num == 1 ? false : true
//    }
//    for i in 2...Int(sqrt(Double(num))) {
//        if num % i == 0 {
//            return false
//        }
//    }
//    return true
//}

print(input.filter{isPrimary($0) == true}.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 2745번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈 2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2745번
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (N, B) = (input[0], input[1])

let result = Int(N, radix: Int(B)!)! // B진수 -&amp;gt; 10진수로 변환
print(result)&lt;/code&gt;&lt;/pre&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;백준 Swift 5618번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5618번
let n = Int(readLine()!)!
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
let lastNum = input.first!

var answer: [Int] = []

for i in 1...lastNum {
    var isCd = true // 공약수 체크 플래그
    for num in input {
        if num % i != 0 {
            isCd = false
            break
        }
    }
    if isCd {
        answer.append(i)
    }
}

for ans in answer {
    print(ans)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1110번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1110번
var N = Int(readLine()!)!
let originalN = N
var count: Int = 0

while true {
    if N &amp;lt; 10 { // 한자리 수
        N = N * 10 + N
    }
    else { // 두자리 수
        let (A, B) = (N / 10, N % 10)
        N = (B * 10) + ((A + B) % 10)
    }
    count += 1
    
    if N == originalN {
        print(count)
        break
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11653번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11653번
var N = Int(readLine()!)!

for i in stride(from: 2, to: N, by: 1) {
    while N % i == 0 { // i로 계속 나눠줌.
        N = N / i
        print(i)
    }
}

if N != 1 { // 맨 마지막이 소수라면 출력해줘야 함. ex) 7
    print(N)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1934번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1934번(최소공배수)
let T = Int(readLine()!)!
for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;gt;)
    let (A, B) = (input[0], input[1])
    
    print(lcm(A, B))
}


func gcd(_ a: Int, _ b: Int) -&amp;gt; Int { // 최대공약수
    return b == 0 ? a : gcd(b, a % b)
}

func lcm(_ a: Int, _ b: Int) -&amp;gt; Int { // 최소공배수
    return a * b / gcd(a, b)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2609번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 수학&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2609번(최대공약수, 최소공배수)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;gt;)
let (A, B) = (input[0], input[1])

print(gcd(A, B))
print(lcm(A, B))

func gcd(_ a: Int, _ b: Int) -&amp;gt; Int {
    return b == 0 ? a : gcd(b, a % b)
}

func lcm(_ a: Int, _ b: Int) -&amp;gt; Int {
    return a * b / gcd(a, b)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5347번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : LCM&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5347번(LCM)
let n = Int(readLine()!)!

for _ in 0..&amp;lt;n {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (a, b) = (input[0], input[1])
    
    let answer = LCM(a, b)
    print(answer)
}

func GCD(_ a: Int, _ b: Int) -&amp;gt; Int {
    return b == 0 ? a : GCD(b, a % b)
}

func LCM(_ a: Int, _ b: Int) -&amp;gt; Int {
    return a * b / GCD(a, b)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1747번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 소수 &amp;amp; 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1747번(소수 &amp;amp; 팰린드롬)
import Foundation
var N = Int(readLine()!)!

while true {
    if isPrime(N) &amp;amp;&amp;amp; isPalindrom(N) {
        print(N)
        break
    }
    N = N + 1
}

func isPrime(_ num: Int) -&amp;gt; Bool {
    if num &amp;lt; 4 {
        return num == 1 ? false : true
    }
    
    for i in 2...Int(sqrt(Double(num))) {
        if num % i == 0 {
            return false
        }
    }
    
    return true
}

func isPalindrom(_ num: Int) -&amp;gt; Bool {
//    let numArray = Array(String(num))
    let numArray = String(num).map{$0}
    let length: Int = numArray.count
    var flag: Bool = true
    
    for i in 0..&amp;lt;length/2 {
        if numArray[i] != numArray[length - i - 1] {
            flag = false
            break
        }
    }
    
    
    return flag
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 브론즈 - 문제 풀이</category>
      <category>SWIFT</category>
      <category>Swift 문제풀이</category>
      <category>swift 브론즈 문제</category>
      <category>백준</category>
      <category>백준 PS</category>
      <category>백준 Swift</category>
      <category>백준 브론즈</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/217</guid>
      <comments>https://developer-p.tistory.com/217#entry217comment</comments>
      <pubDate>Sat, 11 Jan 2025 22:02:48 +0900</pubDate>
    </item>
    <item>
      <title>앱스토어 개인정보처리방침</title>
      <link>https://developer-p.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Privacy Policy&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;This privacy policy applies to the 쿠키타워 app (hereby referred to as &quot;Application&quot;) for mobile devices that was created by Sumin Park (hereby referred to as &quot;Service Provider&quot;) as a Free service. This service is intended for use &quot;AS IS&quot;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Information Collection and Use&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Application collects information when you download and use it. This information may include information such as&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Your device's Internet Protocol address (e.g. IP address)&lt;/li&gt;
&lt;li&gt;The pages of the Application that you visit, the time and date of your visit, the time spent on those pages&lt;/li&gt;
&lt;li&gt;The time spent on the Application&lt;/li&gt;
&lt;li&gt;The operating system you use on your mobile device&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Application does not gather precise information about the location of your mobile device.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Service Provider may use the information you provided to contact you from time to time to provide you with important information, required notices and marketing promotions.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;For a better experience, while using the Application, the Service Provider may require you to provide us with certain personally identifiable information. The information that the Service Provider request will be retained by them and used as described in this privacy policy.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Third Party Access&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Only aggregated, anonymized data is periodically transmitted to external services to aid the Service Provider in improving the Application and their service. The Service Provider may share your information with third parties in the ways that are described in this privacy statement.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Service Provider may disclose User Provided and Automatically Collected Information:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;as required by law, such as to comply with a subpoena, or similar legal process;&lt;/li&gt;
&lt;li&gt;when they believe in good faith that disclosure is necessary to protect their rights, protect your safety or the safety of others, investigate fraud, or respond to a government request;&lt;/li&gt;
&lt;li&gt;with their trusted services providers who work on their behalf, do not have an independent use of the information we disclose to them, and have agreed to adhere to the rules set forth in this privacy statement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Opt-Out Rights&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;You can stop all collection of information by the Application easily by uninstalling it. You may use the standard uninstall processes as may be available as part of your mobile device or via the mobile application marketplace or network.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Data Retention Policy&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Service Provider will retain User Provided data for as long as you use the Application and for a reasonable time thereafter. If you'd like them to delete User Provided Data that you have provided via the Application, please contact them at float@kakao.com and they will respond in a reasonable time.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Children&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Service Provider does not use the Application to knowingly solicit data from or market to children under the age of 13.&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The Service Provider does not knowingly collect personally identifiable information from children. The Service Provider encourages all children to never submit any personally identifiable information through the Application and/or Services. The Service Provider encourage parents and legal guardians to monitor their children's Internet usage and to help enforce this Policy by instructing their children never to provide personally identifiable information through the Application and/or Services without their permission. If you have reason to believe that a child has provided personally identifiable information to the Service Provider through the Application and/or Services, please contact the Service Provider (float@kakao.com) so that they will be able to take the necessary actions. You must also be at least 16 years of age to consent to the processing of your personally identifiable information in your country (in some countries we may allow your parent or guardian to do so on your behalf).&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Security&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;The Service Provider is concerned about safeguarding the confidentiality of your information. The Service Provider provides physical, electronic, and procedural safeguards to protect information the Service Provider processes and maintains.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;This Privacy Policy may be updated from time to time for any reason. The Service Provider will notify you of any changes to the Privacy Policy by updating this page with the new Privacy Policy. You are advised to consult this Privacy Policy regularly for any changes, as continued use is deemed approval of all changes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;This privacy policy is effective as of 2024-09-09&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Your Consent&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;By using the Application, you are consenting to the processing of your information as set forth in this Privacy Policy now and as amended by us.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Contact Us&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;If you have any questions regarding privacy while using the Application, or have questions about the practices, please contact the Service Provider via email at float@kakao.com.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4a4a4a; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;This privacy policy page was generated by&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://app-privacy-policy-generator.nisrulz.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;App Privacy Policy Generator&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <category>iOS | 앱 개발/iOS 앱 개발</category>
      <category>ios</category>
      <category>ios 개인정보처리방침</category>
      <category>ios앱스토어</category>
      <category>개인정보처리방침</category>
      <category>앱스토어</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/216</guid>
      <comments>https://developer-p.tistory.com/216#entry216comment</comments>
      <pubDate>Mon, 9 Sep 2024 23:53:15 +0900</pubDate>
    </item>
    <item>
      <title>Xcode 14.3 ver | &amp;ldquo;ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64&amp;rdquo; 오류</title>
      <link>https://developer-p.tistory.com/215</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;현생이 바쁘다는 핑계로, 막상 쓰면 좋아할 걸 알면서도 귀찮아서 쓰지 않았던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘은 미뤄왔던 SwiftUI를 해보고 있다. 좀 더 미리 했으면 좋았을텐데...&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;아무튼, 회사에서 간단한 앱을 새롭게 만들어야 해서, 겸사겸사 SwiftUI로 프로젝트를 만들었다.&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;호기롭게 Xcode 14.3으로 시작후, 빌드했더니 아래와 같은 &lt;b&gt;오류 로그&lt;/b&gt;를 맞이했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&amp;ldquo;ld: building for iOS Simulator, but linking in dylib built for iOS, file for architecture arm64&amp;rdquo;&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;Xcode 14.3을 Rosetta로 돌리면 해결될 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 다른 구버전의 Xcode들처럼 Xcode 앱 정보 들어가서 'Rosetta를 켜려'했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;없어서 찾아보니 &lt;b&gt;Xcode 14.3부턴 Rosetta로 실행하기 버튼이 사라졌다고 한다...&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;gt; 다른 해결방법을 찾아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;[해결법]&lt;/b&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Excluded Architectures 를 arm64로 세팅&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;상세 방법&lt;br /&gt;&lt;/span&gt;: 프로젝트 TARGET &amp;gt; Build Settings &amp;gt; Excluded Architectures&lt;br /&gt;&amp;gt; Debug &amp;gt; Any iOS Simulator SDK를 &lt;b&gt;arm64로 설정&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-filename=&quot;해결법1.jpg&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3reCW/btsIX6PZc8e/MNOP67wy9mPiRPVP3KgGRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3reCW/btsIX6PZc8e/MNOP67wy9mPiRPVP3KgGRk/img.jpg&quot; data-alt=&quot;해결 단계 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3reCW/btsIX6PZc8e/MNOP67wy9mPiRPVP3KgGRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3reCW%2FbtsIX6PZc8e%2FMNOP67wy9mPiRPVP3KgGRk%2Fimg.jpg&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;1188&quot; height=&quot;263&quot; data-filename=&quot;해결법1.jpg&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해결 단계 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료: &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://velog.io/@manpkh95/ld-building-for-iOS-Simulator-but-linking-in-dylib-built-for-iOS-file-for-architecture-arm64&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@manpkh95/ld-building-for-iOS-Simulator-but-linking-in-dylib-built-for-iOS-file-for-architecture-arm64&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Pod파일 수정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 방법&lt;br /&gt;: 아래와 같이 pod 내용 추가 후 &amp;gt; pod install&lt;/p&gt;
&lt;pre id=&quot;code_1723038041756&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;post_install do |installer|
   installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
         config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
      end
   end
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;해결 단계 2.jpg&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY75AP/btsIWG56fm7/jYlEkRbg8JJCzlltKVEekk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY75AP/btsIWG56fm7/jYlEkRbg8JJCzlltKVEekk/img.jpg&quot; data-alt=&quot;해결 단계 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY75AP/btsIWG56fm7/jYlEkRbg8JJCzlltKVEekk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY75AP%2FbtsIWG56fm7%2FjYlEkRbg8JJCzlltKVEekk%2Fimg.jpg&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;562&quot; height=&quot;405&quot; data-filename=&quot;해결 단계 2.jpg&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해결 단계 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료: &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://velog.io/@jee/Xcode-%EB%B9%8C%EB%93%9C%EC%97%90%EB%9F%AC-Architecture-arm64&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@jee/Xcode-%EB%B9%8C%EB%93%9C%EC%97%90%EB%9F%AC-Architecture-arm64&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 2번까지 하면 된다는 사람들이 있는데, 난 3번까지 해야만 오류가 해결됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나처럼 안되는 사람들은 3번까지 진행해보면 될 것이다..!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 'Show Rosetta Destinations' 켜기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 방법&lt;br /&gt;: Xcode14.3 상단 &amp;gt; Product &amp;gt; Destination &amp;gt; Destination Architectures &amp;gt; &lt;b&gt;Show Rosetta Destinations&lt;/b&gt; 선택.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 설정하고 나면, 시뮬레이터 이름들이 (Rosetta) 가 붙으면서 정상적으로 빌드가 될 것이다. (아래 사진 참고)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;해결 단계 3.jpg&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3u9Yy/btsIWwJgNU1/cM4G7Q5Wf3jc9uFqV4OVS1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3u9Yy/btsIWwJgNU1/cM4G7Q5Wf3jc9uFqV4OVS1/img.jpg&quot; data-alt=&quot;해결 단계 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3u9Yy/btsIWwJgNU1/cM4G7Q5Wf3jc9uFqV4OVS1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3u9Yy%2FbtsIWwJgNU1%2FcM4G7Q5Wf3jc9uFqV4OVS1%2Fimg.jpg&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;1156&quot; height=&quot;965&quot; data-filename=&quot;해결 단계 3.jpg&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해결 단계 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료: &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sarunw.com/posts/open-using-rosetta-in-xcode-14-3/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 단계 1 ~ 단계 3까지 진행하고 난 뒤, 다시 빌드 해보면 정상적으로 될 거예요.&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;</description>
      <category>SwiftUI/환경설정</category>
      <category>arm64 오류</category>
      <category>swiftUI</category>
      <category>swiftui 빌드 오류</category>
      <category>xcode 14.3 arm64</category>
      <category>xcode swiftui 빌드 오류 해결</category>
      <category>xcode 빌드 오류</category>
      <category>Xcode 오류</category>
      <category>xcode14</category>
      <category>Xcode14.3</category>
      <category>빌드 오류</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/215</guid>
      <comments>https://developer-p.tistory.com/215#entry215comment</comments>
      <pubDate>Wed, 7 Aug 2024 23:00:30 +0900</pubDate>
    </item>
    <item>
      <title>Proportional UIView | UIView를 StackView에서 원하는 비율로 배분하는 방법(StackView Trick, Fill Proportionally, To allocate UIViews to the desired proportions in StackView)</title>
      <link>https://developer-p.tistory.com/214</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에서 내려주는 데이터를 비율에 맞게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;UIView를 StackView에서 동적으로 그려야 하는 상황&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;b&gt;StackView의 &quot;&lt;/b&gt;&lt;u&gt;&lt;b&gt;Fill Proportionally&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&quot;&lt;/b&gt;&lt;b&gt; &lt;/b&gt;를 활용한 게시글이 거의 없어서 도움이 되었으면 좋겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;1650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/belXQJ/btr6Nwzlu6d/GPbHmXz8F1UrhANKVsmgY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/belXQJ/btr6Nwzlu6d/GPbHmXz8F1UrhANKVsmgY0/img.png&quot; data-alt=&quot;최종 결과물 - Proportional UIView in StackView&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/belXQJ/btr6Nwzlu6d/GPbHmXz8F1UrhANKVsmgY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbelXQJ%2Fbtr6Nwzlu6d%2FGPbHmXz8F1UrhANKVsmgY0%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;641&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;1650&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종 결과물 - Proportional UIView in StackView&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서버에서 내려오는 데이터를 통해 뷰의&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;&lt;b&gt;비율을 계산하는 로직&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;에 대해 설명하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 비율 커스텀 UIView&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;(&lt;b&gt;Proportional UIView&lt;/b&gt;)를 StackView에 그리는 방법&lt;/u&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;1번은 코딩테스트 문제같은 곳에서 볼 수 있을 것 같기도 하고, 나와 비슷한 상황의 사람에게 도움이 될 것 같아 겸사 겸사 정리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(오직 &lt;b&gt;Proportional UIView&lt;/b&gt;만 궁금하신 분은 글 중하단으로 내려가길 바란다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;관련 &lt;b&gt;샘플 소스 프로젝트&lt;/b&gt;는 글 최하단에서 다운 받을 수 있습니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;0. 큰 틀&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;테이블뷰의 cell에 있는 StackView에,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;흔히 생각하는 엑셀 표(UIView)를 비율에 맞게 동적&lt;/b&gt;으로 그린다고 생각하면 될 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;1. 서버에서 제공되는 데이터&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. 열의 개수(=column)를 줌.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. 데이터를 열의 개수에 맞게 줌. (&lt;/span&gt;&lt;span&gt;단, 병합되어야 하는 열이면 데이터를 &quot;merge&quot; 라고 준다.)&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&gt;예를 들어, 아래처럼 서버에서 데이터가 내려온다고 가정하자.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680100159173&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;column = 4
data: [String] = [&quot;40&quot;, &quot;merge&quot;, &quot;37&quot;, &quot;99&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그렇다면 StackView의 UIView들은 아래의 그림처럼 그려져야 할 것이다.&lt;/span&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;960&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTMki6/btr6OZgn65g/zfeeA2xB9Ugz4la3dIH8wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTMki6/btr6OZgn65g/zfeeA2xB9Ugz4la3dIH8wK/img.png&quot; data-alt=&quot;예시 설명 (2 : 1 : 1)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTMki6/btr6OZgn65g/zfeeA2xB9Ugz4la3dIH8wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTMki6%2Fbtr6OZgn65g%2FzfeeA2xB9Ugz4la3dIH8wK%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;400&quot; height=&quot;190&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시 설명 (2 : 1 : 1)&lt;/figcaption&gt;
&lt;/figure&gt;
&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;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;2. 비율 계산 로직&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;어떻게 그려져야 할지는 알겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그렇다면 &lt;/span&gt;&lt;span&gt;&lt;b&gt;몇&lt;/b&gt;대 &lt;b&gt;몇&lt;/b&gt;대 &lt;b&gt;몇&lt;/b&gt;인지는... 어떻게 구현해야 할까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 상황을 정리해보자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 열(=column)의 개수를 전달받고 있고,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;merge&quot;를 만나면 앞의 인덱스와 합쳐져야 한다.&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;계산 로직&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 각 열의 비율을 저장할 배열을 생성한다. &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;/span&gt; proportionalValues = [1.0, 1.0, 1.0, 1.0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. for문을 &lt;b&gt;거꾸로 접근&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 만약 데이터가 &quot;merge&quot;라면, &lt;b&gt;앞의 인덱스에 본인의 비율값을 넘겨주고 본인은 0.0&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;[1.0, 1.0, 1.0, &lt;b&gt;1.0&lt;/b&gt;] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr; [1.0, 1.0, &lt;b&gt;1.0&lt;/b&gt;, 1.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr; &lt;/span&gt;[2.0, &lt;b&gt;0.0&lt;/b&gt;, 1.0, 1.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr; &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;[&lt;b&gt;2.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0&lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;, 1.0, 1.0]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, [2.0, 0.0, 1.0, 1.0]이 되는 것이다.&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;(0값은 필터를 걸어주면) &lt;u&gt;&lt;b&gt;최종 비율 2 : 1 : 1&lt;/b&gt;&lt;/u&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;pre id=&quot;code_1680101463084&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var proportionalValues: [Double] = Array(repeating: 1.0, count: column) // 비율값 저장 배열.

for i in stride(from: column - 1, through: 0, by: -1) { // merge를 위해 역순으로 참조.
    if data[i] == &quot;merge&quot; {
        proportionalValues[i - 1] += proportionalValues[i] // 이전 열에 비중 합침.
        proportionalValues[i] = 0.0
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위 로직을 사용&lt;/b&gt;하면, 이런 case가 아니더라도  1:3:2 등 &lt;b&gt;모든 case에 적용이 된다.&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;만약 내려오는 data = [&quot;a&quot;, &quot;q&quot;, &quot;merge&quot;, &quot;merge&quot;, &quot;YY&quot;, &quot;merge&quot;] 라면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;[1.0, 1.0, 1.0, 1.0, 2.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;0.0&lt;/b&gt;&lt;span&gt;]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;span&gt; &lt;span&gt;[1.0, 1.0, 1.0, 1.0, &lt;b&gt;2.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[1.0, 1.0, 2.0, &lt;b&gt;0.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[1.0, 3.0, &lt;b&gt;0.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[1.0, &lt;b&gt;3.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0] &lt;span style=&quot;background-color: #ffffff; color: #4d5156;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[&lt;b&gt;1.0&lt;/b&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;3.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;2.0,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;0.0]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;span style=&quot;color: #4d5156;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(0값은 필터를 걸어주면)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;&lt;b&gt;최종 비율 1 : 3 : 2&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;3. &lt;u&gt;&lt;b&gt;Proportional UIView&lt;/b&gt;를 StackView에 그리는 방법&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ProportionalUIView를 만드는 법은 간단하다.&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;u&gt;&lt;b&gt;아래의 커스텀 UIView를 생성 및 상속&lt;/b&gt;&lt;/u&gt;받고, (ProportionalUIView)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;아래의 함수들을 호출&lt;/b&gt;&lt;/u&gt;해서, ( calculateProportional(), drawProportionalView() )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StackView 안에 들어가는 subView의 비율들만 지정해서 넣어주면 된다.&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;커스텀 UIView 생성(ProportionalUIView)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680102406973&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import UIKit

class ProportionalUIView: UIView {

    var width = 1.0
    
    override var intrinsicContentSize: CGSize {
        return CGSize(width: width, height: 1.0)
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;비율 계산 함수 호출(calculateProportional)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680104828698&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func calculateProportional(_ column: Int, _ data: [String]) -&amp;gt; [Double] { // 비율 계산 함수
    var proportionalValues: [Double] = Array(repeating: 1.0, count: data.count)

    for i in stride(from: column - 1, through: 0, by: -1) { // merge를 위해 역순으로 참조.
        if data[i] == &quot;merge&quot; {
            proportionalValues[i - 1] += proportionalValues[i] // 이전 열에 비중 합침.
            proportionalValues[i] = 0.0
        }
    }
    return proportionalValues
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;stackview에 uiview 그리는 함수 호출(drawProportionalView)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1680104920584&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func drawProportionalView(_ column: Int, _ proportionalValues: [Double]) {
    var proportionalSubViews: [ProportionalUIView] = [] // 비율대로 생성할 subViews 저장 배열.

    for i in 0..&amp;lt;column {
        let tempView: ProportionalUIView = ProportionalUIView()
        tempView.width = proportionalValues[i] // 비율만큼 비중 세팅.

        tempView.backgroundColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0) // view 구분을 위해, 랜덤배경색 추가.

        proportionalSubViews.append(tempView) // 비율에 맞게 세팅된 tempView들 우선 저장.
    }

    let _ = proportionalSubViews.map { // 스택뷰에 tempView추가.
        stackView.addArrangedSubview($0)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;주의!&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StackView의 설정 &amp;gt; Distribution &amp;gt; &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;u&gt;&lt;b&gt;Fill Proportionally&lt;/b&gt;&lt;/u&gt;&lt;/span&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;4562&quot; data-origin-height=&quot;2190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbWskl/btr6QUeAYrJ/8Nt0R9vPSKIK5DOqdaZO31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbWskl/btr6QUeAYrJ/8Nt0R9vPSKIK5DOqdaZO31/img.png&quot; data-alt=&quot;StackView 설정 - Fill Equally 설정.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbWskl/btr6QUeAYrJ/8Nt0R9vPSKIK5DOqdaZO31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbWskl%2Fbtr6QUeAYrJ%2F8Nt0R9vPSKIK5DOqdaZO31%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;288&quot; data-origin-width=&quot;4562&quot; data-origin-height=&quot;2190&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;StackView 설정 - Fill Equally 설정.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지 않으면 아래의 사진처럼 &lt;b&gt;다 깨진다&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;2126&quot; data-origin-height=&quot;2090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TTRFv/btr6OmbWLZI/VCgSH23DctIV4PmBDGY9hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TTRFv/btr6OmbWLZI/VCgSH23DctIV4PmBDGY9hk/img.png&quot; data-alt=&quot;StackView 설정 - Fill 설정 시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TTRFv/btr6OmbWLZI/VCgSH23DctIV4PmBDGY9hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTTRFv%2Fbtr6OmbWLZI%2FVCgSH23DctIV4PmBDGY9hk%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;400&quot; height=&quot;393&quot; data-origin-width=&quot;2126&quot; data-origin-height=&quot;2090&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;StackView 설정 - Fill 설정 시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Proportional View 최종 결과물&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StackView에서, (1 : 3 : 1) 의 원하는 비율대로 잘 나오는걸 확인할 수 있다.&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;4372&quot; data-origin-height=&quot;2330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deur52/btr6GWk7kam/d4Kvvj325DarMyyt4VHTQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deur52/btr6GWk7kam/d4Kvvj325DarMyyt4VHTQ1/img.png&quot; data-alt=&quot;Proportional View in StackView 최종 결과물 / 1 : 3 : 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deur52/btr6GWk7kam/d4Kvvj325DarMyyt4VHTQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdeur52%2Fbtr6GWk7kam%2Fd4Kvvj325DarMyyt4VHTQ1%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;4372&quot; height=&quot;2330&quot; data-origin-width=&quot;4372&quot; data-origin-height=&quot;2330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proportional View in StackView 최종 결과물 / 1 : 3 : 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명 겸 정리를 위해 만든 &lt;b&gt;샘플 프로젝트 소스&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;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bLRevZ/btr6N6mRED8/4Zfr6hEJ4F3ktPKhKMKZkk/ProportionalUIVIewSampleProject.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ProportionalUIVIewSampleProject.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.07MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;참고 자료1:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://spin.atomicobject.com/2017/02/07/uistackviev-proportional-custom-uiviews/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://spin.atomicobject.com/2017/02/07/uistackviev-proportional-custom-uiviews/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 자료2: &lt;a href=&quot;https://stackoverflow.com/questions/46253248/uistackview-proportional-layout-with-only-intrinsiccontentsize&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/46253248/uistackview-proportional-layout-with-only-intrinsiccontentsize&lt;/a&gt;&lt;/p&gt;</description>
      <category>iOS | 앱 개발/iOS 앱 개발</category>
      <category>Fill Proportionally</category>
      <category>Proportional UIView</category>
      <category>Proportional View in StackView</category>
      <category>stackview</category>
      <category>stackview fill proportionally</category>
      <category>StackView Trick</category>
      <category>Swift StackView 비율</category>
      <category>스택뷰 커스텀</category>
      <category>스택뷰 커스텀 비율</category>
      <category>스택뷰에 비율대로 뷰 그리기</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/214</guid>
      <comments>https://developer-p.tistory.com/214#entry214comment</comments>
      <pubDate>Thu, 30 Mar 2023 01:11:15 +0900</pubDate>
    </item>
    <item>
      <title>구글포토 내보내기 날짜 안 뜰 때 | 구글포토 .json 메타데이터 연동하기(맥 ver.)  | (Google Photo Takeout Metadata json)</title>
      <link>https://developer-p.tistory.com/213</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구글 Photo&lt;/b&gt;의 용량이 슬슬 차기도 하고, 클라우드를 옮겨보고자 &lt;b&gt;&quot;구글포토 내보내기&quot;&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;u&gt;&lt;b&gt;50기가&lt;/b&gt;&lt;/u&gt;로 내보내기를 걸어두고 며칠을 기다렸다. (약 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;이 글에 찾아왔다면 나와 같은 상황일 것이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;u&gt;&lt;b&gt;모든 사진의 정보가 날라갔다!!&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히는, &lt;b&gt;모든 사진 &amp;amp; 영상&lt;/b&gt;의 정보(&lt;b&gt;메타데이터&lt;/b&gt;)가 추출일자(혹은 다운일자)로 되어 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;.json 파일과 함께...&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;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;지금부터 구글포토 사진의 .json파일을 이용해서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;각 사진에 원본 데이터를 적용시키는 방법&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;을 소개한다. (&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Mac 버전&lt;/b&gt;&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 자료가 많지 않았다. 최신자료가 없기도 했고, &lt;b&gt;Step by Step 설명&lt;/b&gt;은 아니었어서 내가 사용한 방법을 정리하고자 글을 쓴다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 구글포토에서 내보내기를 한다.&lt;/h4&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;u&gt;&lt;b&gt;50기가로 내보내기&lt;/b&gt;&lt;/u&gt;를 한다. 구글포토 내보내기 하는 방법은 다른 글이 많으니 참고. ( &lt;a href=&quot;https://takeout.google.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://takeout.google.com/&lt;/a&gt; )&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 깃허브에 들어가서 &lt;b&gt;소스 파일&lt;/b&gt;을&lt;b&gt; 다운&lt;/b&gt;받는다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/google-metadata-matcher&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/google-metadata-matcher&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674988582637&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/google-metadata-matcher: Google Photos takeout metada merger&quot; data-og-description=&quot;Google Photos takeout metada merger. Contribute to SuminPark-developer/google-metadata-matcher development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/google-metadata-matcher&quot; data-og-url=&quot;https://github.com/SuminPark-developer/google-metadata-matcher&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYI29Y/hyRq5V0sQs/XzFK0lQ0Y6aYLHK0U1JelK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/google-metadata-matcher&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/google-metadata-matcher&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYI29Y/hyRq5V0sQs/XzFK0lQ0Y6aYLHK0U1JelK/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;GitHub - SuminPark-developer/google-metadata-matcher: Google Photos takeout metada merger&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Google Photos takeout metada merger. Contribute to SuminPark-developer/google-metadata-matcher development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;깃허브 다운로드 스크린샷.png&quot; data-origin-width=&quot;2240&quot; data-origin-height=&quot;1022&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W6fpr/btrXpcJACVd/UPsSW0ZFCe9YxrWvA6wqy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W6fpr/btrXpcJACVd/UPsSW0ZFCe9YxrWvA6wqy0/img.png&quot; data-alt=&quot;깃허브 - 코드 다운로드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W6fpr/btrXpcJACVd/UPsSW0ZFCe9YxrWvA6wqy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW6fpr%2FbtrXpcJACVd%2FUPsSW0ZFCe9YxrWvA6wqy0%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;400&quot; height=&quot;183&quot; data-filename=&quot;깃허브 다운로드 스크린샷.png&quot; data-origin-width=&quot;2240&quot; data-origin-height=&quot;1022&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;깃허브 - 코드 다운로드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;깃허브 접속 - Code - Download ZIP 클릭&quot; &lt;/b&gt;하면 코드를 다운받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.reddit.com/r/googlephotos/comments/svv751/download_google_photos_with_all_metadata_at_once/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.reddit.com/r/googlephotos/comments/svv751/download_google_photos_with_all_metadata_at_once/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;윈도우 버전 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://github.com/anderbggo/GooglePhotosMatcher&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/anderbggo/GooglePhotosMatcher&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 분할된 압축파일들을 &lt;u&gt;하나의 폴더에 옮긴다.&lt;/u&gt;&lt;/h4&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;3-1. 데스크탑에 &lt;b&gt;googlePhotoResult 폴더&lt;/b&gt;와 &lt;b&gt;googlePhotos 폴더&lt;/b&gt;를 &lt;b&gt;생성&lt;/b&gt;한다.&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;(google-metadata-matcher-master는 설명2번을 제대로 진행했다면 생성되어 있을 것이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3-2.&amp;nbsp;데스크탑 - googlePhotos 폴더에 아래 사진과 같이 &lt;b&gt;압축파일들을 옮긴다.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;단, 주의사항! 압축 해제를 위한 넉넉한 용량이 있어야 한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmqksV/btrXwjVcsYH/4lbeqtI1hcRvA4JOrjXrck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmqksV/btrXwjVcsYH/4lbeqtI1hcRvA4JOrjXrck/img.png&quot; data-alt=&quot;데스크탑 - googlePhotos 폴더 - 압축파일들 옮김.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmqksV/btrXwjVcsYH/4lbeqtI1hcRvA4JOrjXrck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmqksV%2FbtrXwjVcsYH%2F4lbeqtI1hcRvA4JOrjXrck%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;116&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;데스크탑 - googlePhotos 폴더 - 압축파일들 옮김.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. Terminal 앱 실행 - googlePhotos 폴더로 이동 - ditto 명령어 입력&lt;/h4&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-1. &lt;b&gt;Terminal 앱을 실행&lt;/b&gt;한다. &lt;br /&gt;Terminal 앱은 커맨드+스페이스 -&amp;gt; Terminal을 입력하면 실행시킬 수 있다.&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;4-2. Terminal 앱에서 &lt;b&gt;googlePhotos 폴더로 이동&lt;/b&gt;한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674989895261&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd [googlePhotos_폴더_디렉토리]
// 대괄호 []는 제외
// cd와 [디렉토리] 사이에 공백 있음.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;cd + 스페이스 바 + Finder에서 googlePhotos폴더를 drag&amp;amp;drop&lt;/b&gt;&lt;/u&gt; 하면 바로 입력할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&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;4-3. 아래 &lt;b&gt;ditto 명령어를 입력&lt;/b&gt;한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674990067545&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ditto -x -k *.zip ./takeout_photos&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정 시간이 지나면 아래 사진처럼 &lt;b&gt;'Google 포토'&lt;/b&gt; 하나의 폴더에 압축이 해제되었을 것이다.&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;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch1Jkw/btrXrTQjCQs/ykC81jgStPe3PGQIBi7Sc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch1Jkw/btrXrTQjCQs/ykC81jgStPe3PGQIBi7Sc0/img.png&quot; data-alt=&quot;ditto 명령어 - 결과.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch1Jkw/btrXrTQjCQs/ykC81jgStPe3PGQIBi7Sc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch1Jkw%2FbtrXrTQjCQs%2FykC81jgStPe3PGQIBi7Sc0%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;94&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ditto 명령어 - 결과.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. Terminal 앱 -&amp;gt; &lt;b&gt;google-metadata-matcher-master 폴더&lt;/b&gt;로 &lt;b&gt;이동&lt;/b&gt;한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5-1. 4-2와 같은 방법으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;cd + 스페이스 바 + Finder에서 google-metadata-matcher-master 폴더를 drag&amp;amp;drop&lt;/b&gt;&lt;/u&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하면 바로 입력할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1674990392419&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd [google-metadata-matcher-master_폴더_디렉토리]
// 대괄호 []는 제외
// cd와 [디렉토리] 사이에 공백 있음.&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;5-2. 아래 &quot;requirements.txt&quot; 설치 명령어를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1674990469080&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip3 install -r requirements.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wQV0T/btrXrUhnDBg/qZkpQGkjyD0KnLsReeKDHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wQV0T/btrXrUhnDBg/qZkpQGkjyD0KnLsReeKDHk/img.png&quot; data-alt=&quot;&amp;quot;requirements.txt&amp;quot; 설치.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wQV0T/btrXrUhnDBg/qZkpQGkjyD0KnLsReeKDHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwQV0T%2FbtrXrUhnDBg%2FqZkpQGkjyD0KnLsReeKDHk%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;400&quot; height=&quot;142&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&quot;requirements.txt&quot; 설치.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. 파이썬 코드를 실행하는 명령어를 입력한다.&lt;/h4&gt;
&lt;pre id=&quot;code_1674990922495&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python3 src/merge_metadata.py [Google 포토_폴더_디렉토리] [googlePhotoResult_폴더_디렉토리]
// 대괄호 []는 제외
// 공백 넣어야 함.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 설명했던 4-2와 같은 방법으로 디렉토리를 입력해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리와 디렉토리 사이에 &lt;u&gt;&lt;b&gt;공백을 넣어야 하는 것&lt;/b&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;제대로 입력했다면 아래 이미지와 같이 진행될 것이다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;파일 1개씩 진행되기 때문에, 오랜 시간이 걸리니 켜두고 다른 일을 하는 걸 추천한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2116&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIS1lU/btrXnJahYXM/nBYBDcCKwKKyKTkAXwEbz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIS1lU/btrXnJahYXM/nBYBDcCKwKKyKTkAXwEbz0/img.png&quot; data-alt=&quot;파이썬 코드 - 진행중&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIS1lU/btrXnJahYXM/nBYBDcCKwKKyKTkAXwEbz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIS1lU%2FbtrXnJahYXM%2FnBYBDcCKwKKyKTkAXwEbz0%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;400&quot; height=&quot;177&quot; data-origin-width=&quot;2116&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파이썬 코드 - 진행중&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. 진행 완료!&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Failed가 많아보이지만... 실제론 &lt;b&gt;거의 모든 데이터를 복구했다!&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qSAlg/btrXo5wUWqM/VY9pNvLr6XxzZ3sknbIHi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qSAlg/btrXo5wUWqM/VY9pNvLr6XxzZ3sknbIHi0/img.png&quot; data-alt=&quot;파이썬 코드 - 진행 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qSAlg/btrXo5wUWqM/VY9pNvLr6XxzZ3sknbIHi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqSAlg%2FbtrXo5wUWqM%2FVY9pNvLr6XxzZ3sknbIHi0%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;258&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파이썬 코드 - 진행 완료.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 &lt;b&gt;구글 포토 내보내기 이미지&lt;/b&gt;들의 &lt;u&gt;&lt;b&gt;날짜 데이터들을 복구하는 방법&lt;/b&gt;&lt;/u&gt;에 대해서 알아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사진 &amp;amp; 영상의 메타데이터를 복구할 수 있었고, 생각보다 더 오랜 시간이 걸리는 작업이었다.&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;div id=&quot;dicLayer&quot; style=&quot;width: 400px; height: 150px; display: block; left: 416px; top: 4729px;&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;b&gt;python3 src/merge_metadata.py [Google 포토_폴더_디렉토리] [googlePhotoResult_폴더_디렉토리] // 대괄호 []는 제외 // 공백 넣어야 함.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;python3 src/merge_metadata.py [Google 포토_폴더_디렉토리] [googlePhotoResult_폴더_디렉토리] // 대괄호 []는 제외 // 공백 넣어야 함.&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt; &amp;lt;body&amp;gt; &amp;lt;script src=&quot;lib/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script src=&quot;background.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot; class=&quot;&quot; style=&quot;top: 4709px; left: 416px;&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>각종 Program 설치 | 꿀팁/유용한 사이트 소개 및 설치</category>
      <category>Google Photo 내보내기</category>
      <category>구글 포토</category>
      <category>구글 포토 내보내기</category>
      <category>구글 포토 이미지 데이터 복구</category>
      <category>구글포토 json 데이터 연동</category>
      <category>구글포토 json파일</category>
      <category>구글포토 영상 데이터 날라감</category>
      <category>구글포토 이미지 정보 날라감</category>
      <category>구글포토 이미지 정보 삭제</category>
      <category>이미지 데이터 사라짐</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/213</guid>
      <comments>https://developer-p.tistory.com/213#entry213comment</comments>
      <pubDate>Sun, 29 Jan 2023 20:45:14 +0900</pubDate>
    </item>
    <item>
      <title>DFS, BFS | Graph Traversal(그래프 탐색) 문제 풀이 모음 | 2606번, 11725번, 2178번, 2667번, 14940번, 7576번,</title>
      <link>https://developer-p.tistory.com/212</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DFS, BFS 문제&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;풀면서 틈틈이 구현(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;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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.24 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.26 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.29 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.30 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.12.05 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1669292061878&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MxOoL/hyQGr6DnOm/xd69zrRfVgYOo1D2X7KGUk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MxOoL/hyQGr6DnOm/xd69zrRfVgYOo1D2X7KGUk/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/graph_traversal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/graph_traversal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;2830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmAw7M/btrR1ovWEbb/8G5uEvYKYUUAVvxH3KvSPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmAw7M/btrR1ovWEbb/8G5uEvYKYUUAVvxH3KvSPK/img.png&quot; data-alt=&quot;그래프 탐색 문제 리스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmAw7M/btrR1ovWEbb/8G5uEvYKYUUAVvxH3KvSPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmAw7M%2FbtrR1ovWEbb%2F8G5uEvYKYUUAVvxH3KvSPK%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;400&quot; height=&quot;754&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;2830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그래프 탐색 문제 리스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2606번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 그래프 탐색(DFS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2606번
let N = Int(readLine()!)!
let M = Int(readLine()!)!

var board: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)
var visited: [Bool] = Array(repeating: false, count: N + 1)

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (y, x) = (input[0], input[1])
    board[y][x] = 1
    board[x][y] = 1
}

var count: Int = 0

func dfs(_ index: Int) { // 재귀
    for next in 1...N {
//        if next != index &amp;amp;&amp;amp; board[index][next] == 1 &amp;amp;&amp;amp; visited[next] == false { // 자기 자신 X, 인접하고, 미방문 시
        if board[index][next] == 1 &amp;amp;&amp;amp; visited[next] == false { // 인접하고, 미방문 시
            visited[next] = true
            count += 1
            dfs(next)
        }
    }
}

visited[1] = true
dfs(1)
print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 11725번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 트리, DFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[큐 풀이]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11725번(참고 : https://t.ly/T01a)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}


let N = Int(readLine()!)!
var adj: [[Int]] = Array(repeating: [], count: N + 1) // 인접리스트

for _ in 0..&amp;lt;N-1 {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (a, b) = (input[0], input[1])
    
    adj[a].append(b)
    adj[b].append(a)
}

var parents = Array(repeating: -1, count: N + 1) // -1이면 미방문.
var myDeq: Dequeue&amp;lt;Int&amp;gt; = Dequeue([1])


while !myDeq.isEmpty {
    let index = myDeq.popFirst()
    
    for next in adj[index] {
        if parents[next] == -1 {
            parents[next] = index
            myDeq.pushLast(next)
        }
    }
}

for parent in parents[2...] {
    print(parent)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[DFS 풀이]&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669390195964&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11725번(DFS) // 참고 : https://t.ly/fvs-T
let N = Int(readLine()!)!
var adj: [[Int]] = Array(repeating: [], count: N + 1) // 인접행렬

for _ in 0..&amp;lt;N-1 {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (a, b) = (input[0], input[1])
    
    adj[a].append(b)
    adj[b].append(a)
}

var parents: [Int] = Array(repeating: -1, count: N + 1) // -1은 미방문.

func dfs(_ index: Int, _ p: Int) {
    parents[index] = p
//    print(parents)
    
    for next in adj[index] {
        if parents[next] == -1 {
            dfs(next, index)
        }
    }
}

dfs(1, 0)

for parent in parents[2...] {
    print(parent)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2178번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 최단거리 길찾기(BFS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2178번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var board: [[Int]] = Array(repeating: [], count: N + 1)
var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: M + 1), count: N + 1)

for i in 1...N {
    board[i] = [0] + readLine()!.map{Int(String($0))!}
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= N) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= M)
}

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true // 시작점 방문
    let q = Dequeue([(startY, startX, 1)])
    
    while !q.isEmpty {
        let (y, x, d) = q.popFirst()
        
        if y == N &amp;amp;&amp;amp; x == M { // 목적지에 도달 시,
            return d
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            let nd = d + 1
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 1 { // 유효 범위이고, 미방문이고, 길이면,
                visited[ny][nx] = true
                q.pushLast((ny, nx, nd))
            }
            
        }
    }
    return -1 // 여기 올 일은 없음.
}

let answer = bfs(1, 1)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2667번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DFS / BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;BFS 풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2667번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let N = Int(readLine()!)!
var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: N), count: N)
var board: [[Int]] = []
for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX)])
    var count: Int = 1
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 1 { // 유효범위고, 미방문상태고, 주택이 있으면, (유효범위부터 체크해야 index 에러 안생김.)
                visited[ny][nx] = true
                count += 1
                q.pushLast((ny, nx))
            }
        }
    }
    return count
}


var answers: [Int] = []
for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if board[y][x] == 1 &amp;amp;&amp;amp; !visited[y][x] { // 집이 있고, 미방문이면,
            let answer = bfs(y, x)
            answers.append(answer)
        }
    }
}

answers.sort(by: &amp;lt;)
print(answers.count)
print(answers.map{String($0)}.joined(separator: &quot;\n&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;size14&quot;&gt;&lt;b&gt;DFS 풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1669724663355&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2667번(DFS)
let N = Int(readLine()!)!
var board: [[Int]] = []
board.append(Array(repeating: 0, count: N + 1))
var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append([0] + input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= N) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= N)
}

var count: Int = 0
let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
func dfs(_ y: Int, _ x: Int) {
    visited[y][x] = true
    count += 1
    
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; board[ny][nx] == 1 &amp;amp;&amp;amp; !visited[ny][nx] {
            dfs(ny, nx)
        }
        
    }
    
    
}


var answers: [Int] = []
for y in 1...N {
    for x in 1...N {
        if board[y][x] == 1 &amp;amp;&amp;amp; !visited[y][x] {
            dfs(y, x)
            answers.append(count)
            count = 0
        }
    }
}

answers.sort(by: &amp;lt;)
print(answers.count)
for answer in answers {
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 12940번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;호기롭게 풀었는데 시간초과가 났다. 왜 그런지 고민해봐도 잘 모르겠어서 다른 풀이를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;각 인덱스 -&amp;gt; 목표지점&lt;/b&gt;&lt;/u&gt;까지 BFS를 돌렸었는데, 그렇게 하면 시간초과가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;반대로&lt;/b&gt;&lt;/span&gt; &lt;u&gt;&lt;b&gt;목표지점 -&amp;gt; 각 인덱스&lt;/b&gt;&lt;/u&gt;로 BFS를 돌리면 된다!&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14940번(BFS / 참고 : https://www.acmicpc.net/source/49390198)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])

var board: [[Int]] = []
board.append(Array(repeating: 0, count: m + 1))

var goal: (y: Int, x: Int) = (0, 0)
for y in 1...n {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    board.append([0] + input)
    for (x, num) in input.enumerated() {
        if num == 2 {
            goal = (y, x + 1) // 목표위치 저장.
        }
    }
}

var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: m + 1), count: n + 1)

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= n) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= m)
}

var answers: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
func bfs(_ startY: Int, _ startX: Int) {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX, 0)])
    
    while !q.isEmpty {
        let (y, x, count) = q.popFirst()
        answers[y-1][x-1] = count
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; (board[ny][nx] == 1 || board[ny][nx] == 2) &amp;amp;&amp;amp; !visited[ny][nx] { // 유효 범위고, 갈 수 있는 땅이고, 미방문이면,
                visited[ny][nx] = true
                q.pushLast((ny, nx, count + 1))
            }
        }
    }
}

bfs(goal.y, goal.x) // goal을 기준으로 bfs를 돌림.

for y in 1...n {
    for x in 1...m {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == 1 { // 원래 갈 수 있는 땅인데 도달할 수 없는 위치면,
            answers[y-1][x-1] = -1
        }
    }
}

for answer in answers {
    let temp = answer.map{String($0)}.joined(separator: &quot; &quot;)
    print(temp)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;BFS 초기 풀이(시간초과)&lt;/p&gt;
&lt;pre id=&quot;code_1669818286658&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14940번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])

var board: [[Int]] = []
board.append(Array(repeating: 0, count: m + 1))

for _ in 0..&amp;lt;n {
    board.append([0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!})
}

var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: m + 1), count: n + 1)

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= n) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= m)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX, 0)])
    
    if board[startY][startX] == 0 { // 원래 갈 수 없는 땅인 위치면,
        return 0
    }
    
    while !q.isEmpty {
        let (y, x, count) = q.popFirst()
        
        if board[y][x] == 2 {
            return count
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; (board[ny][nx] == 1 || board[ny][nx] == 2) &amp;amp;&amp;amp; !visited[ny][nx] { // 유효 범위고, 갈 수 있는 땅이고, 미방문이면,
                visited[ny][nx] = true
                q.pushLast((ny, nx, count + 1))
            }
        }
    }
    return -1 // 원래 갈 수 있는 땅인데 도달할 수 없으면 -1
}

var answers: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)
for y in 1...n {
    for x in 1...m {
        if board[y][x] == 2 || board[y][x] == 0 { // bfs돌 필요 없음.
            answers[y-1][x-1] = 0 // 결과값 저장.
        }
        else {
            answers[y-1][x-1] = bfs(y, x) // 결과값 저장.
            visited = Array(repeating: Array(repeating: false, count: m + 1), count: n + 1) // 방문기록 초기화.
        }
    }
}

for answer in answers {
    let temp = answer.map{String($0)}.joined(separator: &quot; &quot;)
    print(temp)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 7576번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 7576번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N) = (input[0], input[1])
var board: [[Int]] = []
var visited: [[Int]] = Array(repeating: Array(repeating: -1, count: M), count: N)

for _ in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; M)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
let q: Dequeue&amp;lt;(Int, Int)&amp;gt; = Dequeue([])

func bfs() {
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; board[ny][nx] == 0 &amp;amp;&amp;amp; visited[ny][nx] == -1 { // 유효범위고, 토마토가 있고, 미방문상태면
                visited[ny][nx] = visited[y][x] + 1
                q.pushLast((ny, nx))
            }
        }
    }
}

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;M {
        if board[y][x] == 1 {
            visited[y][x] = 0
            q.pushLast((y, x))
        }
        else if board[y][x] == -1 { // 애초에 방문할 수 없는 곳이면,
            visited[y][x] = -2 // 미방문과 애초에 방문할 수 없는 곳 구분을 위해 -2로 저장. : 예제 input3.
        }
    }
}

bfs()

let visitedTemp = visited.flatMap{$0}
if visitedTemp.contains(-1) { // 미방문한 곳이 있다면,
    print(-1)
}
else { // 모두 방문했다면,
    print(visitedTemp.max()!) // 전부 익는데까지 걸리는 시간 = 최대값.
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>BFS</category>
      <category>DFS</category>
      <category>DFS &amp;amp; BFS</category>
      <category>Graph Traversal</category>
      <category>Swift BFS</category>
      <category>Swift DFS</category>
      <category>그래프 탐색</category>
      <category>그래프 탐색 문제 풀이 모음</category>
      <category>백준 그래프 탐색</category>
      <category>백준 그래프 탐색 문제</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/212</guid>
      <comments>https://developer-p.tistory.com/212#entry212comment</comments>
      <pubDate>Thu, 24 Nov 2022 22:08:15 +0900</pubDate>
    </item>
    <item>
      <title>구현(2) 문제 풀이 모음 | 20546번, 2578번, 4396번, 1244번, 10994번, 20436번, 1913번, 12933번, 20291번, 17413번, 22858번, 17276번, 15787번, 2615번, 16926번, 20207번</title>
      <link>https://developer-p.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구현(1)에 이어서 구현(2)를 풀 생각이다. 감을 조금씩 찾는 것 같긴 한데, 아직 어색하긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP, BFS, DFS 등 한창 공부했다가 지금 거의 다 휘발된 것 같다. 얼른 구현유형으로 익숙해지고, 나머지 다른 유형들도 감 되찾아야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.15 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.23 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1668087267136&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brDBWJ/hyQxKc4dSh/0bUM4GKeTpsuRswqwF74jK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brDBWJ/hyQxKc4dSh/0bUM4GKeTpsuRswqwF74jK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 리스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/implementation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/implementation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/taa8S/btrQSEUbpvC/Po1v8fIuHNjMC02kbyzGzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/taa8S/btrQSEUbpvC/Po1v8fIuHNjMC02kbyzGzk/img.png&quot; data-alt=&quot;문제 리스트 - 구현(2) 파트(실버)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/taa8S/btrQSEUbpvC/Po1v8fIuHNjMC02kbyzGzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftaa8S%2FbtrQSEUbpvC%2FPo1v8fIuHNjMC02kbyzGzk%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;400&quot; height=&quot;463&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1422&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문제 리스트 - 구현(2) 파트(실버)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 20546번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실버5인데 뭔가 잘 안풀렸다... 좀 더 잘 생각해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;인덱스가 벗어날 것 같으면, 미리 인덱스를 더 가서 for문을 돌리면 됨!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20546번
let money = Int(readLine()!)!
let stocks: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

var updown: [String] = [&quot;=&quot;]
for i in 1..&amp;lt;stocks.count {
    if stocks[i] &amp;gt; stocks[i - 1] {
        updown.append(&quot;+&quot;)
    }
    else if stocks[i] &amp;lt; stocks[i - 1] {
        updown.append(&quot;-&quot;)
    }
    else {
        updown.append(&quot;=&quot;)
    }
}
//print(updown)

var (junMoney, seoungMoney) = (money, money)
var (junCount, seoungCount) = (0, 0)

for stock in stocks {
    junCount += junMoney / stock
    junMoney = junMoney % stock
}

for i in 2..&amp;lt;stocks.count {
//    if stocks[i] &amp;gt; seoungMoney { // 성민이 - 빚내서 주식하지 않음.
//        continue
//    }
    
    if updown[i] == &quot;=&quot; {
        continue
    }
    
    if updown[i] == &quot;+&quot; &amp;amp;&amp;amp; updown[i - 1] == &quot;+&quot; &amp;amp;&amp;amp; updown[i - 2] == &quot;+&quot; { // 전량매도
        seoungMoney += seoungCount * stocks[i]
        seoungCount = 0
    }
    else if updown[i] == &quot;-&quot; &amp;amp;&amp;amp; updown[i - 1] == &quot;-&quot; &amp;amp;&amp;amp; updown[i - 2] == &quot;-&quot; { // 전량매수
        seoungCount += seoungMoney / stocks[i]
        seoungMoney = seoungMoney % stocks[i]
    }
//    print(i, seoungMoney, seoungCount)
}

var (junSum, seoungSum) = (0, 0)
junSum = junMoney + junCount * stocks.last!
seoungSum = seoungMoney + seoungCount * stocks.last!

if junSum &amp;gt; seoungSum {
    print(&quot;BNP&quot;)
}
else if junSum &amp;lt; seoungSum {
    print(&quot;TIMING&quot;)
}
else {
    print(&quot;SAMESAME&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2578번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2578번
var board: [[Int]] = []
var bingo: [[Bool]] = Array(repeating: Array(repeating: false, count: 5), count: 5)

for _ in 0..&amp;lt;5 {
    board.append(readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!})
}

var calls: [Int] = []
for _ in 0..&amp;lt;5 {
    let temp: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    calls += temp
}

func findIndex(_ num: Int) -&amp;gt; (Int, Int) {
    for y in 0..&amp;lt;5 {
        for x in 0..&amp;lt;5 {
            if board[y][x] == num {
                return (y, x)
            }
        }
    }
    return (-1, -1) // 여기는 올 일 없음.
}

func bingoCount() -&amp;gt; Int {
    var lineCount: Int = 0
    
    for y in 0..&amp;lt;5 { // 가로줄 빙고 체크.
        var tempCount: Int = 0
        for x in 0..&amp;lt;5 {
            if bingo[y][x] == false {
                break
            }
            else {
                tempCount += 1
            }
            
            if tempCount == 5 { // 빙고면,
                lineCount += 1
            }
        }
    }
    
    for x in 0..&amp;lt;5 { // 세로줄 빙고 체크.
        var tempCount: Int = 0
        for y in 0..&amp;lt;5 {
            if bingo[y][x] == false {
                break
            }
            else {
                tempCount += 1
            }
            
            if tempCount == 5 { // 빙고면,
                lineCount += 1
            }
        }
    }
    
    if (bingo[0][0] == true) &amp;amp;&amp;amp; (bingo[1][1] == true) &amp;amp;&amp;amp; (bingo[2][2] == true) &amp;amp;&amp;amp; (bingo[3][3] == true) &amp;amp;&amp;amp; (bingo[4][4] == true) {
        lineCount += 1
    }
    
    if (bingo[0][4] == true) &amp;amp;&amp;amp; (bingo[1][3] == true) &amp;amp;&amp;amp; (bingo[2][2] == true) &amp;amp;&amp;amp; (bingo[3][1] == true) &amp;amp;&amp;amp; (bingo[4][0] == true) {
        lineCount += 1
    }
    
    return lineCount
}

var count: Int = 0
for call in calls {
    count += 1
    
    let (y, x) = findIndex(call)
    bingo[y][x] = true
    
    if bingoCount() &amp;gt;= 3 {
        print(count)
        break
    }
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>Swift 구현</category>
      <category>Swift 백준</category>
      <category>Swift 백준 문제풀이</category>
      <category>백준 Swift 실버 구현문제</category>
      <category>백준 구현문제</category>
      <category>백준 구현문제 모음</category>
      <category>백준 문제풀이</category>
      <category>백준 실버</category>
      <category>백준 실버 문제풀이</category>
      <category>실버 백준 Swift</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/211</guid>
      <comments>https://developer-p.tistory.com/211#entry211comment</comments>
      <pubDate>Tue, 15 Nov 2022 23:55:11 +0900</pubDate>
    </item>
    <item>
      <title>구현(1) 문제 풀이 모음 | 백준 Swift 2753번, 5597번, 20053번, 1212번, 21918번, 14467번</title>
      <link>https://developer-p.tistory.com/210</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;정말 오랜만에 글을 쓰는 것 같다. PS공부를 꾸준히 하기로 해놓고선... 감을 다 잃었을까봐 두렵다. 빠르게 훑으면서, 실력을 다시 쌓아보자!&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.05 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.09 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.11.10 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1667657170466&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bY3ZK1/hyQtoO8STj/W0juJHtqUyNhHoWdkQ1wF1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bY3ZK1/hyQtoO8STj/W0juJHtqUyNhHoWdkQ1wF1/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 리스트&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/implementation&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/implementation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kzdMT/btrQuIgEQ3t/aemnIi35WZSrKp9t3tnh0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kzdMT/btrQuIgEQ3t/aemnIi35WZSrKp9t3tnh0k/img.png&quot; data-alt=&quot;문제 리스트 - 구현 파트(브론즈)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kzdMT/btrQuIgEQ3t/aemnIi35WZSrKp9t3tnh0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkzdMT%2FbtrQuIgEQ3t%2FaemnIi35WZSrKp9t3tnh0k%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;400&quot; height=&quot;179&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문제 리스트 - 구현 파트(브론즈)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2753번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2753번
let year = Int(readLine()!)!

if (year % 4 == 0 &amp;amp;&amp;amp; year % 100 != 0) || year % 400 == 0 {
    print(&quot;1&quot;)
}
else {
    print(&quot;0&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5597번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5597번
var students: [Int] = [-1] + Array(repeating: 0, count: 30)

for _ in 0..&amp;lt;28 {
    let N = Int(readLine()!)!
    students[N] = 1
}

for (index, attendance) in students.enumerated() {
    if attendance == 0 {
        print(index)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 20053번 - 시간초과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20053번(시간초과 - FileIO사용해야함)
let T = Int(readLine()!)!
for _ in 0..&amp;lt;T {
    let _ = Int(readLine()!)!
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    print(input.min()!, input.max()!)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1212번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://jeong9216.tistory.com/416&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://jeong9216.tistory.com/416&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1668004067473&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1212번(참고 : https://jeong9216.tistory.com/416)
import Foundation
let NArray = readLine()!.map{String($0)}

var answer: String = String(Int(NArray.first!)!, radix: 2)

for ch in NArray[1...] {
    let binaryNum = String(Int(ch)!, radix: 2)
    let threeCh = String(format: &quot;%03d&quot;, Int(binaryNum)!)
    answer += threeCh
}

print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런타임 오류 코드&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1212번(런타임오류)
let N: String = readLine()! // 8진수
let temp = Int(N, radix: 8)! // 8진수 -&amp;gt; 10진수
let answer = String(temp, radix: 2) // 10진수 -&amp;gt; 2진수
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 21918번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21918번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var tempBulbs: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!} // 전구상태 임시 저장.
var bulbs: [Bool] = [false] // 전구상태 저장.(인덱스 0은 채움.)
for bulb in tempBulbs {
    bulbs.append(bulb == 1 ? true : false)
}

func command(_ num: Int, _ b: Int, _ c: Int) -&amp;gt; Void { // 명령어 함수
    switch num {
    case 1: // 특정값으로 변경
        bulbs[b] = (c == 1 ? true : false)
    case 2: // 토글
        for index in b...c {
            bulbs[index].toggle()
        }
    case 3: // 끄기
        for index in b...c {
            bulbs[index] = false
        }
    case 4: // 켜기
        for index in b...c {
            bulbs[index] = true
        }
    default:
        print(&quot;default는 없음.&quot;)
    }
}

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (a, b, c) = (input[0], input[1], input[2])
    command(a, b, c) // 명령어 호출
}

var answer: [String] = bulbs.map{$0 == true ? &quot;1&quot; : &quot;0&quot;}
print(answer[1...].joined(separator: &quot; &quot;)) // 0번째 인덱스는 제외.&lt;/code&gt;&lt;/pre&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;백준 Swift 14467번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14467번
let N = Int(readLine()!)!
var answer: Int = 0
var cows: [Int] = [-2] + Array(repeating: -1, count: 10)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (num, location) = (input[0], input[1])
    
//    if cows[num] == -1 { // 첫 등장이면,
//        cows[num] = location
//    }
//    else {
//        if cows[num] != location { // 위치가 달라졌다면,
//            answer += 1
//            cows[num] = location
//        }
//    }
    
    if cows[num] != -1 &amp;amp;&amp;amp; cows[num] != location { // 첫 등장이 아니고 + 위치가 달라졌으면,
        answer += 1
    }
    cows[num] = location
    
}
print(answer)&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 브론즈 - 문제 풀이</category>
      <category>SWIFT</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>구현</category>
      <category>구현문제</category>
      <category>백준 Swift PS</category>
      <category>백준 구현문제</category>
      <category>백준 문제풀이</category>
      <category>백준 문제풀이 Swift</category>
      <category>백준 브론즈</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/210</guid>
      <comments>https://developer-p.tistory.com/210#entry210comment</comments>
      <pubDate>Sat, 5 Nov 2022 23:58:18 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 1018번, 2841번, 4796번, 15686번, 1389번, 1915번, 17136번,</title>
      <link>https://developer-p.tistory.com/209</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요 근래 일정이 많아지고 바빠졌다는 핑계(?)로 PS를 소홀히 했다. &lt;s&gt;근데 사실 핑계가 아니라 정말로 바쁘고 피곤했다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고로, &lt;u&gt;&lt;b&gt;문제를 꾸준히 풀기&lt;/b&gt;&lt;/u&gt;로 다짐했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 일주일에 5문제는 풀고 싶지만, 바빠서 현실적으로 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;1주당 3문제&lt;/b&gt;&lt;/span&gt;가 &lt;b&gt;내가&amp;nbsp;지킬 수 있는 나와의 약속&lt;/b&gt;일 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 시작해보자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.15 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.18 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.20 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.23 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.24 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.08.14 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.08.15 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.08.18 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657894104882&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mIt6P/hyO5NwXY2C/96LdPANwl6RUAdkuTZvxR1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mIt6P/hyO5NwXY2C/96LdPANwl6RUAdkuTZvxR1/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1018번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 완전탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;처음 풀이&lt;/b&gt;(틀린 풀이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시작점을 기준으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시작점부터 + 8 - 1까지 돌면서, 기준이 될 비교문자를 (B &amp;lt;-&amp;gt; W) 왔다리 갔다리 하면서, board[y][x]와 다르면 count를 증가시켜 answerArray에 저장 후 , 그 중 가장 작은 값을 출력하는 방법으로 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;TC 답이 안 나오길래 조금 더 고민해보니까, 이렇게 풀면 더 적게 칠할 수 있는 경우들을 놓치게 된다. 잘못하면 1개만 칠해도 되는걸 63개를 칠하게 될 수도 있는 풀이다. 이 방법은 패스! (&lt;b&gt;B&lt;/b&gt;BWB... 일 때 사실 가장 처음에 있는 B만 바꾸면 되는데, 가장 처음 문자를 제외한 나머지 63개를 다 바꿔야 한다고 값이 나오게 된다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;맞는 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1303&quot; data-origin-height=&quot;2098&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ldbbg/btrHogVTqJA/wLO4ifnwVkhutyYrCdK9i0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ldbbg/btrHogVTqJA/wLO4ifnwVkhutyYrCdK9i0/img.jpg&quot; data-alt=&quot;백준 Swift 1018번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ldbbg/btrHogVTqJA/wLO4ifnwVkhutyYrCdK9i0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fldbbg%2FbtrHogVTqJA%2FwLO4ifnwVkhutyYrCdK9i0%2Fimg.jpg&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;400&quot; height=&quot;644&quot; data-origin-width=&quot;1303&quot; data-origin-height=&quot;2098&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1018번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;방법 1.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1번과 2번의 배열을 만든다. 그 후 board[startY][startX]를 1번배열처럼 만들기 위한 값, 2번배열처럼 만들기 위한 값 중 작은 값을 answerArray에 넣는다. 그 후 answerArray.min()!을 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 방법1은 만약 사이즈가 8*8이 아니라, 100*100이라면...? 이 풀이는 사실 &lt;b&gt;매우 매우 확장성이 좋지 않다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;방법 2. &lt;/b&gt;(선택)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;케이스를 두가지로 나눈 뒤, 두가지 케이스 중 작은 값을 answerArray에 넣고, 그 후 answerArray.min()!을 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Case 1.&lt;/b&gt; 시작점이 W로 시작&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;case 1-1. y홀, x홀 : &quot;W&quot;&lt;/li&gt;
&lt;li&gt;case 1-2. y홀, x짝 : &quot;B&quot;&lt;/li&gt;
&lt;li&gt;case 1-3. y 짝, x홀 : &quot;B&quot;&lt;/li&gt;
&lt;li&gt;case 1-4. y 짝, x짝 : &quot;W&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Case 2.&lt;/b&gt;&amp;nbsp;시작점이 B로 시작&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;case 2-1. y홀, x홀 : &quot;B&quot;&lt;/li&gt;
&lt;li&gt;case 2-2. y홀, x짝 : &quot;W&quot;&lt;/li&gt;
&lt;li&gt;case 2-3. y 짝, x홀 : &quot;W&quot;&lt;/li&gt;
&lt;li&gt;case 2-4. y 짝, x짝 : &quot;B&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1018번(완전탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var board: [[String]] = []
board.append(Array(repeating: &quot;.&quot;, count: M + 1))
for _ in 0..&amp;lt;N {
    board.append([&quot;.&quot;] + readLine()!.map{String($0)})
}

let (endY, endX) = ((N - 8) + 1, (M - 8) + 1)

var answerArray: [Int] = []
for startY in 1...endY {
    for startX in 1...endX {
        let answerTemp: Int = min(startW(startY, startX), startB(startY, startX)) // W 시작 Case, B 시작 Case 중 작은 값 저장.
        answerArray.append(answerTemp)
    }
}

print(answerArray.min()!) // 가장 최소값 출력.

func startW(_ startY: Int, _ startX: Int) -&amp;gt; Int { // W로 시작 Case.
    var count: Int = 0 // 변경 횟수 카운팅.
    
    for y in startY..&amp;lt;startY + 8 {
        for x in startX..&amp;lt;startX + 8 {
            if ((y % 2 == 1) &amp;amp;&amp;amp; (x % 2 == 1)) || ((y % 2 == 0) &amp;amp;&amp;amp; (x % 2 == 0)) { // W여야 함.
                if board[y][x] != &quot;W&quot; {
                    count += 1
                }
            }
            else if ((y % 2 == 1) &amp;amp;&amp;amp; (x % 2 == 0)) || ((y % 2 == 0) &amp;amp;&amp;amp; (x % 2 == 1)) { // B여야 함.
                if board[y][x] != &quot;B&quot; {
                    count += 1
                }
            }
        }
    }
    return count
}

func startB(_ startY: Int, _ startX: Int) -&amp;gt; Int { // B로 시작 Case.
    var count: Int = 0 // 변경 횟수 카운팅.
    
    for y in startY..&amp;lt;startY + 8 {
        for x in startX..&amp;lt;startX + 8 {
            if ((y % 2 == 1) &amp;amp;&amp;amp; (x % 2 == 1)) || ((y % 2 == 0) &amp;amp;&amp;amp; (x % 2 == 0)) { // B여야 함.
                if board[y][x] != &quot;B&quot; {
                    count += 1
                }
            }
            else if ((y % 2 == 1) &amp;amp;&amp;amp; (x % 2 == 0)) || ((y % 2 == 0) &amp;amp;&amp;amp; (x % 2 == 1)) { // W여야 함.
                if board[y][x] != &quot;W&quot; {
                    count += 1
                }
            }
        }
    }
    return count
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;백준 1018번 코드개선&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1658151185573&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1018번(완전탐색 / 코드 개선)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var board: [[String]] = []
board.append(Array(repeating: &quot;.&quot;, count: M + 1))
for _ in 0..&amp;lt;N {
    board.append([&quot;.&quot;] + readLine()!.map{String($0)})
}

let (endY, endX) = ((N - 8) + 1, (M - 8) + 1)

var answer: Int = Int.max
for startY in 1...endY {
    for startX in 1...endX {
        let answerTemp: Int = min(fill(startY, startX, &quot;W&quot;), fill(startY, startX, &quot;B&quot;)) // W 시작 Case, B 시작 Case 중 작은 값 저장.
        answer = min(answer, answerTemp)
    }
}

print(answer) // 가장 최소값 출력.

func fill(_ y: Int, _ x: Int, _ bw: String) -&amp;gt; Int {
    var count: Int = 0 // 변경 횟수 카운팅.
    
    for i in 0..&amp;lt;8 {
        for j in 0..&amp;lt;8 {
            if (i + j) % 2 == 0 { // (홀, 홀) || (짝, 짝) -&amp;gt; bw와 같아야 함.
                if board[y + i][x + j] != bw { // 같아야 하는데 다르면,
                    count += 1 // 변경.
                }
            }
            else { // (홀, 짝) || (짝, 홀) -&amp;gt; bw와 달라야 함.
                if board[y + i][x + j] == bw { // 달라야 하는데 같으면,
                    count += 1 // 변경.
                }
            }
        }
    }
    return count
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2841번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 스택(Stack)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제풀이방법을 생각하는 것 자체는 어렵지 않았다. 단지 원하는대로 구현이 안돼서 조금 당황하는 것 정도?다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0. 각 라인에 빈 stack(배열)을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 빈 스택이면 넣고 끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1. 새로 들어온 fret이 스택의 마지막 값보다 작으면, 스택의 마지막 값을 빼낸다. (스택의 마지막 값보다 작거나(2-3) 같아질 때(2-2)까지 반복하게 된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2. 새로 들어온 fret이 스택의 마지막 값과 같으면 멈춘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-3. 새로 들어온 fret이 스택의 마지막 값보다 크거나 or 커지게 되면, 이어 붙이고 멈춘다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2693&quot; data-origin-height=&quot;2618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Prx7t/btrHAHMtVVN/kYGwd4IdAKsvzw0BHgEAek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Prx7t/btrHAHMtVVN/kYGwd4IdAKsvzw0BHgEAek/img.jpg&quot; data-alt=&quot;백준 Swift 2841번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Prx7t/btrHAHMtVVN/kYGwd4IdAKsvzw0BHgEAek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPrx7t%2FbtrHAHMtVVN%2FkYGwd4IdAKsvzw0BHgEAek%2Fimg.jpg&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;400&quot; height=&quot;389&quot; data-origin-width=&quot;2693&quot; data-origin-height=&quot;2618&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2841번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2841번(Stack)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, P) = (input[0], input[1])
var stacks: [[Int]] = Array(repeating: [], count: N + 1)
var count: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (line, fret) = (input[0], input[1])
    
    while true {
        if stacks[line].isEmpty { // 그 줄의 스택이 비었으면,
            stacks[line].append(fret) // 넣고 끝.
            count += 1
            break
        }
        
        if stacks[line].last! &amp;gt; fret { // 새로 들어온 프렛이 더 작으면, 그 줄의 스택에서 하나씩 빼냄.
            stacks[line].removeLast()
            count += 1
        }
        else if stacks[line].last! == fret { // 같으면, 멈춤.
            break
        }
        else { // 새로 들어온 프렛이 더 커지는 순간이 오면, 그 줄의 스택에 넣고 멈춤.
            stacks[line].append(fret)
            count += 1
            break
        }
    }
}
print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 4796번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 그리디&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;케이스를 2개로 나눠야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;전체 V 중 P일을 최대한 사용하고, &lt;b&gt;남은 일수(= V % P)&lt;/b&gt;가 &lt;u&gt;&lt;b&gt;L일 이상인지&lt;/b&gt;&lt;/u&gt; or &lt;u&gt;&lt;b&gt;아닌지&lt;/b&gt;&lt;/u&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Case 1. 남은 일수가 L일 이상인 경우의 TC는, (L = 1 / P = 3 / V = 17)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;우선 최대한 사용( = (V / P) * L)하고,&lt;/b&gt; L일을 사용하는데 문제가 없을만큼 남아 있기 때문에 &lt;b&gt;그냥 L만큼 더해주면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Case 2. 남은 일수가 L일 미만인 경우의 TC는, (L = 8 / P = 9 / V = 24)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;우선 최대한 사용( = (V / P) * L)하고,&lt;/b&gt; L일을 사용하는데 문제가 있다. 그래서 &lt;b&gt;남은 일수만큼(= V % P)만 더해줘야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1575&quot; data-origin-height=&quot;2100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/06Wis/btrHPfAVSMF/xVp9Sp0LA9GVqzj9NCd6u1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/06Wis/btrHPfAVSMF/xVp9Sp0LA9GVqzj9NCd6u1/img.jpg&quot; data-alt=&quot;백준 Swift 4796번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/06Wis/btrHPfAVSMF/xVp9Sp0LA9GVqzj9NCd6u1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F06Wis%2FbtrHPfAVSMF%2FxVp9Sp0LA9GVqzj9NCd6u1%2Fimg.jpg&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;400&quot; height=&quot;533&quot; data-origin-width=&quot;1575&quot; data-origin-height=&quot;2100&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 4796번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 4796번
var caseCount: Int = 0
while true {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (L, P, V) = (input[0], input[1], input[2])
    if L == 0 &amp;amp;&amp;amp; P == 0 &amp;amp;&amp;amp; V == 0 {
        break
    }
    
    caseCount += 1
    
    var answer: Int = -1
    if V % P &amp;gt;= L { // 나머지가 이용가능한 L일 이상일 땐, L일만큼만 더해주면 됨.
        answer = (V / P) * L + L
    }
    else { // 남은 나머지가 이용가능한 L일보다 적을 땐, 남은 나머지만큼 더해주면 됨.
        answer = (V / P) * L + (V % P)
    }
    
    print(&quot;Case \(caseCount): \(answer)&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.07.23 업데이트 - 코드 개선&lt;/p&gt;
&lt;pre id=&quot;code_1658585100434&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 4796번(그리디)
var caseCount: Int = 0
while true {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (L, P, V) = (input[0], input[1], input[2])
    
    if L == 0 {
        break
    }
    
    caseCount += 1

    let answer: Int = (V / P) * L + min(L, V % P)
    print(&quot;Case \(caseCount): \(answer)&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 15686번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 조합, 완전탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;골드5 문제지만 어렵지 않은 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[풀이 방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;각 입력에 맞게 board 세팅한다. 인덱스 0일 때를 의미 없는 걸로 채워주면 편하다. (난 -1로 채웠다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;치킨집(2)들을 배열에 저장하고, M개를 선택하는 경우를 조합으로 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;전체 치킨조합(chickenCombi)을 돌면서, 집(1)일 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 치킨집(chickens)과 집(1) 사이의 chickenDistance를 구한다. 여러 chickenDistance가 나올텐데 그 중 min을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마지막으로, 각 경우(chickens)의 치킨거리의 합(sum)을 저장하는 distances 중 최소값을 구해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15686번(조합, 완전탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var board: [[Int]] = Array(repeating: [], count: N + 1)

func combi(_ nums: [(Int, Int)], _ targetNum: Int) -&amp;gt; [[(y: Int, x: Int)]] {
    var result: [[(Int, Int)]] = []
    
    func combination(_ index: Int, _ nowCombi: [(Int, Int)]) {
        if nowCombi.count == targetNum {
            result.append(nowCombi)
            return
        }
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    combination(0, [])
    
    return result
}

for i in 1...N {
    board[i] = [-1] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!} // 0: 빈 칸, 1: 집, 2: 치킨집
}

var chickenCoords: [(Int, Int)] = [] // 치킨집들의 좌표 저장.
for y in 1...N {
    for x in 1...N {
        if board[y][x] == 2 { // 치킨집일 때,
            chickenCoords.append((y, x))
        }
    }
}
//print(chickenCoords)
let chickenCombi = combi(chickenCoords, M) // 치킨집들 중, M개를 선택하는 경우의 좌표 모음.
//print(chickenCombi)
var distances: [Int] = [] // 치킨거리 모음.

for chickens in chickenCombi {
    var sum: Int = 0
    
    for y in 1...N {
        for x in 1...N {
            if board[y][x] == 1 { // 집일 때,
                var chickenDistance: Int = Int.max
                for chicken in chickens {
                    let distanceY: Int = abs(y - chicken.y)
                    let distanceX: Int = abs(x - chicken.x)
                    chickenDistance = min(chickenDistance, distanceY + distanceX)
                }
                sum += chickenDistance
            }
        }
    }
    distances.append(sum)
}

print(distances.min()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 1389번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;일정이 바빠서 오랜만에 문제를 풀었는데, 못 풀겠었다. 3시간정도 고민해도 결국 못 풀었다가, 다음날(지금)에 다시 풀어서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;기존의 풀던 감으로는 쉽게 풀었을 내용인데... 보자마자 어떤 문제인지도 파악 했는데... 풀이방법도 생각 되는데 구현이 잘 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;역시 꾸준함이 중요한 것 같다. 바쁜 시간이지만 짬을 더 내서라도 풀도록 노력해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[풀이 방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 인접행렬을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 1...N을 돌면서, y에서 (자기 자신을 제외한) destination에 도달하는 데 까지 걸리는 최단거리를 구하면 된다. 즉, BFS다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1. y와 count를 큐에 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2. 다음 지점(k)과 연결되어 있고, 미방문일 시 큐에 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-3. 만약 다음 지점(k)이 destination이면 return한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 각 인덱스들 중, 가장 작은 케빈 베이컨의 수의 인덱스 값을 구하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;4364&quot; data-origin-height=&quot;3086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgTuOr/btrJItwQtHr/hktBJ5j09p3X1snjgzQksK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgTuOr/btrJItwQtHr/hktBJ5j09p3X1snjgzQksK/img.jpg&quot; data-alt=&quot;백준 Swift 1389번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgTuOr/btrJItwQtHr/hktBJ5j09p3X1snjgzQksK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgTuOr%2FbtrJItwQtHr%2FhktBJ5j09p3X1snjgzQksK%2Fimg.jpg&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;400&quot; height=&quot;283&quot; data-origin-width=&quot;4364&quot; data-origin-height=&quot;3086&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1389번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1389번(BFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var board: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1) // 0인덱스는 자리채우기 용.
var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1) // 0인덱스는 자리채우기 용.

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (A, B) = (input[0], input[1])

    board[A][B] = 1
    board[B][A] = 1
}

func visitedArrayInit() { // 방문배열 초기화 필요.
    visited = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1) // 0인덱스는 자리채우기 용.
    for i in 1...N {
        visited[i][i] = true
    }
}


func bfs(_ y: Int, _ destination: Int) -&amp;gt; Int {
    var q: [(Int, Int)] = [(y, 0)] // (y, count)

    while !q.isEmpty {
        let (y, count) = q.removeFirst()
        
        if y == destination { // 목적지 도착이면,
            return count
        }
        
        for k in 1...N {
            if board[y][k] == 1 &amp;amp;&amp;amp; !visited[y][k] {
                visited[y][k] = true
//                if k == destination { // 목적지 도착이면,
//                    return count + 1
//                }
                q.append((k, count + 1))
            }
        }
    }
    return -1
}


var answerIndex: Int = 1
var minValue: Int = Int.max

for start in 1...N {
    var sum: Int = 0
    for destination in 1...N {
        if start != destination { // 자기자신은 제외.
            sum += bfs(start, destination)
            visitedArrayInit() // 방문배열 초기화.
        }
    }
    if sum &amp;lt; minValue { // 더 작은 케빈 베이컨의 수(sum)가 등장 시,
        minValue = sum
        answerIndex = start
    }
}
print(answerIndex)&lt;/code&gt;&lt;/pre&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;백준 Swift 1915번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;전에 풀어본 것 같은 기억은 나는데, 결국 못 풀었다. (&lt;a href=&quot;https://developer-p.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/205&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다행인 건... 어떤 문제의 유형인지는 바로 알았다는 점?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[풀이 방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 0행과 0열을 우선 저장한다. dp의 점화식이 적용되지 않는 부분이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. &lt;b&gt;dp = (y, x)칸을 우하단으로 하는 정사각형의 (최대) 한 변의 길이&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1. 1...n행, 1...m열까지 돌면서, &lt;u&gt;&lt;b&gt;dp = min(&amp;uarr;, &amp;larr;, ↖) + 1&lt;/b&gt;&lt;/u&gt; 을 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2. maxValue * maxValue를 구해주면 답이다. (이차원배열에서 flatMap을 쓰면 쉽게 일차원배열로 변경할 수 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준 Swift 1915번 고민.jpg&quot; data-origin-width=&quot;4366&quot; data-origin-height=&quot;3086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLo36/btrJC5SlYje/OyL8KyUVtsigXhuU6S6Nrk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLo36/btrJC5SlYje/OyL8KyUVtsigXhuU6S6Nrk/img.jpg&quot; data-alt=&quot;백준 Swift 1915번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLo36/btrJC5SlYje/OyL8KyUVtsigXhuU6S6Nrk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLo36%2FbtrJC5SlYje%2FOyL8KyUVtsigXhuU6S6Nrk%2Fimg.jpg&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;400&quot; height=&quot;283&quot; data-filename=&quot;백준 Swift 1915번 고민.jpg&quot; data-origin-width=&quot;4366&quot; data-origin-height=&quot;3086&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1915번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1915번(DP)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])
var arr: [[Int]] = Array(repeating: [], count: n)
var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)

for y in 0..&amp;lt;n {
    let input = readLine()!.map{Int(String($0))!}
    arr[y] = input
}

for y in 0..&amp;lt;n {
    dp[y][0] = arr[y][0]
}

for x in 0..&amp;lt;m {
    dp[0][x] = arr[0][x]
}

for y in 1..&amp;lt;n {
    for x in 1..&amp;lt;m {
        if arr[y][x] == 0 { // 0일 땐, 사각형 X.
            dp[y][x] = 0
        }
        else { // 1일 때,
            dp[y][x] = min(dp[y - 1][x], dp[y][x - 1], dp[y - 1][x - 1]) + 1 //  min(&amp;uarr;, &amp;larr;, ↖) + 1
        }
    }
}

let maxValue: Int = dp.flatMap{$0}.max()!
print(maxValue * maxValue)&lt;/code&gt;&lt;/pre&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;백준 Swift 17136번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 백트래킹&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백준 1915번을 활용하면 될 것 같다고 생각하고 고민했는데, 사실 풀이방법과 전혀 상관 없었다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백트래킹 문제는 처음 풀어본 것 같다. 쭉 풀던 DP문제를 마무리 하고 나선, 백트래킹 문제들을 풀어봐야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[풀이 방법]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0. board를 10*10칸으로 세팅하고, 각 종류별 사용 갯수를 저장할 paper배열을 선언한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. backtracking(0, 0)을 시작으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-1. 최종 목적지(y == 10)에 도달하면, min answer를 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-2. 열의 끝(x == 10)에 도달하면, 다음 행으로 이동한다. (backtracking(y + 1, 0))&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-3. board[y][x]가 0이라면, 다음 열로 이동한다. (backtracking(y, x + 1))&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-4. board[y][x]가 1이라면, 색종이 size를 1부터 5까지 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 가능한 경우라면(isPossible) 색종이를 붙이고(mark() - board값을 0으로 저장) 다음 열로 이동한다. (backtracking(y, x + 1))&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 또한, 안 돼서 돌아올 경우 색종이를 떼어주는(mark() - board값을 1로 되돌림) &lt;u&gt;&lt;b&gt;원상복구&lt;/b&gt;&lt;/u&gt;를 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4-1. answer가 여전히 25라면 불가능한 경우이기 때문에 -1을 출력하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4-2. 아니라면 answer를 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;코드에 주석처리된 print문을 출력해본다면 이해가 좀 더 쉬울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;코드에 자세한 설명이 써 있고, 아래 이미지는 도움이 안된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4366&quot; data-origin-height=&quot;3086&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE67lx/btrJ1ZjcjlB/si9q4juLSq2C6LNFIyupQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE67lx/btrJ1ZjcjlB/si9q4juLSq2C6LNFIyupQk/img.jpg&quot; data-alt=&quot;백준 Swift 17136번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE67lx/btrJ1ZjcjlB/si9q4juLSq2C6LNFIyupQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE67lx%2FbtrJ1ZjcjlB%2Fsi9q4juLSq2C6LNFIyupQk%2Fimg.jpg&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;400&quot; height=&quot;283&quot; data-origin-width=&quot;4366&quot; data-origin-height=&quot;3086&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 17136번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17136번(백트래킹)
var board: [[Int]] = Array(repeating: [], count: 10)
for i in 0..&amp;lt;10 {
    board[i] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
}
var paper: [Int] = Array(repeating: 0, count: 5 + 1) // 종류별 사용한 색종이의 수.
var answer: Int = 25 // 최대 : 5장 다 사용 * 5종류

func isPossible(_ coordY: Int, _ coordX: Int, _ paperSize: Int) -&amp;gt; Bool { // 좌측상단(y, x)의 색종이를 덮을 수 있는지.
    if paper[paperSize] == 5 { // 해당 종류의 색종이를 다 썼다면,
        return false
    }
    
    if (coordY + paperSize &amp;gt; 10) || (coordX + paperSize &amp;gt; 10) { // 좌표값 넘어가면,
        return false
    }
    
    for y in coordY..&amp;lt;coordY + paperSize {
        for x in coordX..&amp;lt;coordX + paperSize {
            if board[y][x] == 0 { // 0이 있어서 못 덮는 상황이라면,
                return false
            }
        }
    }
    return true // 여기까지 온 거라면, 덮을 수 있다는 뜻이기 때문에 true리턴.
}

func mark(_ coordY: Int, _ coordX: Int, _ paperSize: Int, _ value: Int) { // 색종이 덮는 함수. (혹은 떼어냄)
    for y in coordY..&amp;lt;coordY + paperSize {
        for x in coordX..&amp;lt;coordX + paperSize {
            board[y][x] = value
        }
    }
    
    if value == 0 { // 색종이를 덮음.
        paper[paperSize] += 1 // 색종이 사용 횟수 증가.
    }
    else if value == 1 { // 색종이를 떼어냄.
        paper[paperSize] -= 1 // 색종이 사용 횟수 감소.
    }
}

func backtracking(_ y: Int, _ x: Int) {
    if y == 10 { // 최종 도달.
        answer = min(answer, paper.reduce(0, +))
//        print(paper, answer)
        return
    }
    
    if x == 10 { // 열의 끝에 도달.
        backtracking(y + 1, 0) // 다음 행으로 넘어감.
        return
    }
    
    if board[y][x] == 0 { // 못 덮는 곳이면,
        backtracking(y, x + 1) // 다음 열로 넘어감.
        return
    }
    
    for size in 1...5 {
        if isPossible(y, x, size) { // (y, x)에 size의 색종이를 덮을 수 있다면,
            mark(y, x, size, 0) // (y, x)에 size의 색종이를 0으로 덮음.
//            print(&quot;before: \(y), \(x), \(size)&quot;)
            backtracking(y, x + 1) // 다음 열로 이동.
            mark(y, x, size, 1) // 원상복구. (y, x)에 다시 기존값으로 되돌려놓음.
//            print(&quot;after: \(y), \(x), \(size)&quot;)
        }
//        else {
//            print(&quot;불가능: \(y), \(x), \(size)&quot;)
//        }
    }
    
}

backtracking(0, 0)
print(answer == 25 ? -1 : answer)&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>1주당 3문제</category>
      <category>Swift PS</category>
      <category>Swift 백준</category>
      <category>백준 PS</category>
      <category>백준 Swift 골드 문제풀이</category>
      <category>백준 Swift 실버 문제풀이</category>
      <category>백준 문제풀이</category>
      <category>백준 문제풀이 Swift</category>
      <category>백준 문제풀이 모음</category>
      <category>코딩테스트</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/209</guid>
      <comments>https://developer-p.tistory.com/209#entry209comment</comments>
      <pubDate>Fri, 15 Jul 2022 23:43:01 +0900</pubDate>
    </item>
    <item>
      <title>팰린드롬 문제 풀이 모음 | 백준 Swift 10988번, 10174번, 4096번, 8892번, 8611번, 1254번, 1334번, 1747번, 10942번, 1990번, 5502번, 1053번</title>
      <link>https://developer-p.tistory.com/208</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;DP공부를 위해 백준 1695번을 풀다가, 팰린드롬 관련된 문제를 한번정도 풀어보긴 했지만 기억도 안나고 아예 접근법이 달랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그래서 이번 기회에 &lt;u&gt;&lt;b&gt;백준 팰린드롬 관련 문제모음&lt;/b&gt;&lt;/u&gt; 중,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;실버와 골드 문제&lt;/b&gt;만이라도 &lt;b&gt;우선 독파&lt;/b&gt;해놓으면 좋을 것 같아서 (DP를 공부하다가) 풀게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/workbook/view/1128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/workbook/view/1128&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654608310189&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;문제집: 팰린드롬 (cocomo1316)&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/workbook/view/1128&quot; data-og-url=&quot;https://www.acmicpc.net/workbook/view/1128&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Y65rx/hyOFCpGc7k/BQIwxMoJxOBWqAiz315jO0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/workbook/view/1128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/workbook/view/1128&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Y65rx/hyOFCpGc7k/BQIwxMoJxOBWqAiz315jO0/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&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;문제집: 팰린드롬 (cocomo1316)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.07 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.08 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.09 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.11 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.12 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.16 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.20 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654608520494&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZWQjT/hyOG03wSUf/z14OLhCAKIxcpneNcF0HAK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZWQjT/hyOG03wSUf/z14OLhCAKIxcpneNcF0HAK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 10988번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;골드 문제 위주로 풀다가, 갑자기 브론즈 문제라서 뭔가 쉽다. ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;flag를 두고, 인덱스를 &lt;u&gt;&lt;b&gt;처음부터 ~ 길이의 절반까지만 돌면서&lt;/b&gt;&lt;/u&gt; 같은지 확인하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10988번
let arr = readLine()!.map{String($0)}
let length: Int = arr.count
var check: Bool = true

for i in 0..&amp;lt;length/2 { // 절반만 비교해도 됨.
    if arr[i] == arr[length - 1 - i] {
        continue
    }
    else {
        check = false
        break
    }
}

if check {
    print(1)
}
else {
    print(0)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10174번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 자체는 10988번과 같다. &lt;u&gt;&lt;b&gt;.lowercased()&lt;/b&gt;&lt;/u&gt;정도 차이가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10174번
let n = Int(readLine()!)!

for _ in 0..&amp;lt;n {
    let input = readLine()!.map{String($0).lowercased()}
    let length: Int = input.count
    var flag: Bool = true
    
    for i in 0..&amp;lt;length/2 {
        if input[i] == input[length - 1 - i] {
            continue
        }
        else {
            flag = false
            break
        }
    }
    
    if flag {
       print(&quot;Yes&quot;)
    }
    else {
        print(&quot;No&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 4096번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실버5인데 구현이 생각보다 어려웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;포인트 1. 무한 입력 받으면서 0일 때 종료.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;포인트 2. 숫자 앞에 0을 붙여줘야 함. (String(format: &quot;%0?d&quot;, ?)를 활용해서 해결)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이는 맞는데 시간초과가 난다...! &lt;u&gt;&lt;b&gt;Swift로 맞은 사람이 없는 걸 보니까&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처리속도가 상대적으로 느린 &lt;b&gt;Swift는 추가시간을 줘야만 통과할 수 있을 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;(만약 Swift로 이 문제를 통과하시는 분이 계신다면 댓글, 링크등으로 제게 꼭 좀 알려주세요! 배우고 싶습니다.)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://khu98.tistory.com/200&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://khu98.tistory.com/200&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 - 시간초과&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 4096번(팰린드롬) - 50%에서 시간초과
import Foundation

while let temp = readLine() {
    if temp == &quot;0&quot; { // 0이면 종료.
        break
    }
    let input = temp.map{String($0)}
    
    if isPalindrome2(input) { // 처음부터 팰린드롬이면,
        print(0) // 바로 0 출력.
    }
    else { // 팰린드롬이 아니면,
        let num: Int = Int(input.joined(separator: &quot;&quot;))!
        let length: Int = input.count // 숫자의 개수
        
        var rangeEnd: String = &quot;&quot; // &quot;9&quot; * 길이 -&amp;gt; &quot;999...&quot;
        for _ in 0..&amp;lt;length {
            rangeEnd += &quot;9&quot;
        }
        let end: Int = Int(rangeEnd)!  // 끝 수 구해놓음.
        var count: Int = 0 // 주행 거리.
        
        for n in num+1...end { // 주어진숫자의 다음 수 ~ 끝까지 돌면서,
            count += 1 // 거리 1씩 추가.
            let strN = String(format: &quot;%0\(length)d&quot;, n)
            let strNArray: [String] = strN.map{String($0)}.reversed()

            if isPalindrome2(strNArray) { // 팰린드롬이라면,
                print(count) // 최소 거리 출력.
                break
            }
        }
    }
}

//func isPalindrome(_ strArr: [String]) -&amp;gt; Bool {
//    return strArr == strArr.reversed()
//}

func isPalindrome2(_ strArr: [String]) -&amp;gt; Bool {
    let length: Int = strArr.count
    var flag: Bool = true // 팰린드롬 체크.
    
    for i in 0..&amp;lt;length/2 {
        if strArr[i] != strArr[length - 1 - i] {
            flag = false
            break
        }
    }
    
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 개선 - 시간초과&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654662600968&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 4096번(팰린드롬) - 개선 : 50% 시간초과
import Foundation

while let temp = readLine() {
    if temp == &quot;0&quot; { // 0이면 종료.
        break
    }
    let input = temp.map{String($0)}
    
    if isPalindrome2(input) { // 처음부터 팰린드롬이면,
        print(0) // 바로 0 출력.
    }
    else { // 팰린드롬이 아니면,
        let num: Int = Int(input.joined(separator: &quot;&quot;))!
        let length: Int = input.count // 숫자의 개수
        
//        var rangeEnd: String = &quot;&quot; // &quot;9&quot; * 길이 -&amp;gt; &quot;999...&quot;
//        for _ in 0..&amp;lt;length {
//            rangeEnd += &quot;9&quot;
//        }
//        let end: Int = Int(rangeEnd)!  // 끝 수 구해놓음.
        
        var count: Int = 0 // 주행 거리.
        var startNum: Int = num + 1
        while true {
            count += 1
            let strN: [String] = String(format: &quot;%0\(length)d&quot;, startNum).map{String($0)}
            
            if isPalindrome2(strN) { // 팰린드롬이라면,
                print(count) // 최소 거리 출력.
                break
            }
            startNum += 1
        }
        
//        for n in num+1...end { // 주어진숫자의 다음 수 ~ 끝까지 돌면서,
//            count += 1 // 거리 1씩 추가.
//            let strN: [String] = String(format: &quot;%0\(length)d&quot;, n).map{String($0)}
//
//            if isPalindrome2(strN) { // 팰린드롬이라면,
//                print(count) // 최소 거리 출력.
//                break
//            }
//        }
    }
}

//func isPalindrome(_ strArr: [String]) -&amp;gt; Bool {
//    return strArr == strArr.reversed()
//}

func isPalindrome2(_ strArr: [String]) -&amp;gt; Bool {
    let length: Int = strArr.count
    var flag: Bool = true // 팰린드롬 체크.
    
    for i in 0..&amp;lt;length/2 {
        if strArr[i] != strArr[length - 1 - i] {
            flag = false
            break
        }
    }
    
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 8892번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;팰린드롬인지 확인 후, 가능하다면 팰린드롬 문자열을 출력하면 되는 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;팰린드롬인지 확인 유무 함수&lt;/b&gt;는 10174번 문제와 &lt;b&gt;똑같이 구현&lt;/b&gt;했다. (10174번은 왜 안돼~~)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;순열로 2개를 선택하는 것과 같다. 물론 미리 모든 순열을 다 구하고 비교하는 것이 아니라, (굳이 모든 경우를 미리 만들 필요가 없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;이중 for문을 통해, &lt;b&gt;&lt;u&gt;하나의 tempArr&lt;/u&gt;를 만들고&lt;/b&gt; &lt;u&gt;&lt;b&gt;팰린드롬인지 확인을 해가는 식&lt;/b&gt;&lt;/u&gt;으로 해야 그나마 시간을 단축시킬 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2548&quot; data-origin-height=&quot;910&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAQO4f/btrEdAWS0KL/4R1MK9hUnWKOUxLNYL0Jy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAQO4f/btrEdAWS0KL/4R1MK9hUnWKOUxLNYL0Jy0/img.png&quot; data-alt=&quot;백준 Swift 8892번 - 최초 풀이 등극.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAQO4f/btrEdAWS0KL/4R1MK9hUnWKOUxLNYL0Jy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAQO4f%2FbtrEdAWS0KL%2F4R1MK9hUnWKOUxLNYL0Jy0%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;214&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;910&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 8892번 - 최초 풀이 등극.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 8892번(팰린드롬)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let k = Int(readLine()!)!
    var arr: [String] = []
    for _ in 0..&amp;lt;k {
        arr.append(readLine()!)
    }
    
    var hasPalindrome: Bool = false // 팰린드롬 존재 유무.
    outLoop: for i in 0..&amp;lt;k {
        for j in 0..&amp;lt;k {
            if i != j { // 인덱스가 다를 때에만,
                let temp: String = (arr[i] + arr[j])
                let tempArr: [String] = temp.map{String($0)}
                
                if isPalindrome(tempArr) {
                    hasPalindrome = true // 팰린드롬 존재.
                    print(temp)
                    break outLoop
                }
            }
        }
    }
    
    if !hasPalindrome { // 만들 수 없으면,
        print(0) // 0출력.
    }
    
}

func isPalindrome(_ strArr: [String]) -&amp;gt; Bool {
    let length: Int = strArr.count
    var flag: Bool = true // 팰린드롬 체크.

    for i in 0..&amp;lt;length/2 {
        if strArr[i] != strArr[length - 1 - i] {
            flag = false
            break
        }
    }

    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 8611번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;구현 자체는 어렵지 않게 했다. 근데 런타임 오류가 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;고민해보니, n의 범위가 &lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;10^&lt;/span&gt;1000로 매우 크다. 그래서 런타임 오류가 뜨는 것 같다.... UInt64도 벗어나는 범위.. 해결 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 - 런타임오류&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 8611번(런타임오류 - n범위 초과)
let n: UInt64 = UInt64(readLine()!)!
// let n: Int = Int(readLine()!)!
var hasPalindrome: Bool = false

for i in 2...10 {
    let temp: String = String(n, radix: i)
    let tempArr: [String] = temp.map{String($0)}
    print(i, temp, tempArr)
    
    if isPalindrome(tempArr) {
        print(i, temp)
        hasPalindrome = true
    }
}

if !hasPalindrome { // 팰린드롬인게 없으면,
    print(&quot;NIE&quot;)
}

func isPalindrome(_ strArr: [String]) -&amp;gt; Bool {
    let length: Int = strArr.count
    var flag: Bool = true // 팰린드롬 체크.
    
    for i in 0..&amp;lt;length/2 {
        if strArr[i] != strArr[length - 1 - i] { // 앞부분과 뒷부분이 다르다면,
            flag = false
            break
        }
    }
    
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1254번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음엔 어떻게 풀까 고민을 했는데, 지난번에 풀었던 &lt;a href=&quot;https://developer-p.tistory.com/206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 1695번&lt;/a&gt;과 같은 문제라고 생각했다. 아래 종이 풀이처럼 LCS를 활용하면 된다고 생각했다.(종이풀이  상단 &lt;span style=&quot;background-color: #9d9d9d;&quot;&gt;회색박스&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주어진 TC도 다 맞고 해서, 호기롭게 풀어서 제출했는데 4%에서인가 틀렸다. 뭐지!!!!!! 고민을 많이 했다. (고민의 흔적은 종이풀이 최하단 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;빨간박스&lt;/span&gt;에 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2619&quot; data-origin-height=&quot;3557&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bINgie/btrEd5wvEr1/Tvy9XNgHFcu7gY5sTmhJiK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bINgie/btrEd5wvEr1/Tvy9XNgHFcu7gY5sTmhJiK/img.jpg&quot; data-alt=&quot;백준 Swift 1254번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bINgie/btrEd5wvEr1/Tvy9XNgHFcu7gY5sTmhJiK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbINgie%2FbtrEd5wvEr1%2FTvy9XNgHFcu7gY5sTmhJiK%2Fimg.jpg&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;400&quot; height=&quot;543&quot; data-origin-width=&quot;2619&quot; data-origin-height=&quot;3557&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1254번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;잘 생각해보니, LCS를 써서 나오는 결과가 &lt;b&gt;더 짧은 팰린드롬&lt;/b&gt;이긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;근데 이 문제에서 그건 안된다. 왜냐???&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1695번은 어디에든 삽입할 수 있었지만, &lt;b&gt;1254번은 &lt;u&gt;주어진 문자열의 끝부분&lt;/u&gt;에만 이어 붙일 수 있기 때문이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;해결방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i가 0부터 length-1까지 돈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j가 i부터 length-1까지로 [String]을 만든 뒤, 팰린드롬인지 체크한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;만약 팰린드롬이라면, 길이 length와 움직인 i만큼 더해준 게 답이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;왜 이렇게 되는지 &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;예시를 통해 알아보자.&lt;/b&gt;&lt;/span&gt; 주어진 S = &quot;abaa&quot;에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i가 0 : [&quot;a&quot;, &quot;b&quot;, &quot;a&quot;, &quot;a&quot;] =&amp;gt; abaa는 팰린드롬X&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i가 1 : [_, &quot;b&quot;, &quot;a&quot;, &quot;a&quot;] =&amp;gt; =&amp;gt; baa는 팰린드롬X&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;i가 2 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;[_, _, &quot;a&quot;, &quot;a&quot;] &lt;/span&gt;=&amp;gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;aa&lt;/span&gt;는 팰린드롬 O&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그렇다면, 팰린드롬인 &lt;span style=&quot;color: #006dd7;&quot;&gt;aa&lt;/span&gt;를 기준으로 앞2개는 뒤에 붙여지게 될 것이다. 즉, &lt;span style=&quot;color: #ef5369;&quot;&gt;ab&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;aa&lt;/span&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;ba&lt;/span&gt;가 되고 기존길이(4) + 앞2개 = 6이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ilmiodiario.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ilmiodiario.tistory.com/145&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654684618475&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1524번(팰린드롬)
let S = readLine()!.map{String($0)}
let length: Int = S.count

for i in 0..&amp;lt;length { // 맨 앞부터 돌면서,
    var strArray: [String] = []
    for j in i...length-1 { // i번째부터 끝까지의 [String]을 만든 뒤,
        strArray.append(S[j])
    }
    
    if isPalindrome(strArray) { // 만약 팰린드롬이면, 기존의 길이(length) + 앞쪽에서 뒤로 이동한 만큼(인덱스 i)이 정답.
        print(length + i)
        break
    }
}

func isPalindrome(_ strArr: [String]) -&amp;gt; Bool {
    let length: Int = strArr.count
    var flag: Bool = true
    
    for i in 0..&amp;lt;length/2 {
        if strArr[i] != strArr[length - 1 - i] { // 앞부분과 뒷부분이 다르다면,
            flag = false
            break
        }
    }
    
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1524번(LCS - 최장공통 부분 수열) - 틀림.
let S = readLine()!.map{String($0)}
let length: Int = S.count

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: length + 1), count: length + 1)

for i in 1...length { // 뒤 부터 돈 것과,
    for j in 1...length { // 앞 부터 돌면서,
        if S[length - i] == S[j - 1] { // 같으면,
            dp[i][j] = dp[i - 1][j - 1] + 1
        }
        else { // 다르면,
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
        }
    }
}

let answer = 2 * length - dp[length][length]
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1334번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;정답률이 19%일 때부터 느낌이 쎄하긴 했다. 결국 시간초과의 늪에서 벗어나지 못했다... 왜 안돼~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2554&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ2cFB/btrEns480Ur/WFE22muOiANUGkl4SC6Hm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ2cFB/btrEns480Ur/WFE22muOiANUGkl4SC6Hm1/img.png&quot; data-alt=&quot;백준 Swift 1334번 - 시간초과.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ2cFB/btrEns480Ur/WFE22muOiANUGkl4SC6Hm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ2cFB%2FbtrEns480Ur%2FWFE22muOiANUGkl4SC6Hm1%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;138&quot; data-origin-width=&quot;2554&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1334번 - 시간초과.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;입력 부분&lt;/b&gt;&lt;/span&gt; : N이 최대 50자리이기 때문에, Int로는 못받고, array로 입력받아서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;case 1&lt;/span&gt; - ex) 9999 -&amp;gt; 10000&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;N의 index0자리에 [0]을 미리 붙여놔서, &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;9999 -&amp;gt; 10000이 될 때 문제 없도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;인덱스 0부터 중간까지 돌면서&lt;/b&gt; 팰린드롬인지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;case 2&lt;/span&gt; - ex) 1234 -&amp;gt; 1235&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;N의 0번째 자리는 쓰이지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;인덱스 1부터 중간까지 돌면서&lt;/b&gt; 팰린드롬인지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1334번(팰린드롬) - 시간초과
var N: [Int] = [0] + readLine()!.map{Int(String($0))!}
//var newN: [Int] = N

while true {
    // newN값 1 증가.
    N[N.count-1] += 1 // 가장 끝부분 1증가.
    
    for i in stride(from: N.count-1, through: 1, by: -1) {
        if N[i] &amp;gt;= 10 {
            if i == 1 { // 가장 앞부분 자리수가 바껴야 한다면, ex) 09999 -&amp;gt; 10000
                N[i] = 0
                N[0] = 1
//                N.insert(1, at: 0)
//                    break // 있어도 되고, 없어도 됨. 어차피 for문의 가장 마지막이라.
            }
            else { // 그 외 자리수가 바뀐는 거라면,
                N[i] = 0
                N[i - 1] += 1
            }
        }
    }
    
    if N[0] == 1 { // ex) 09999 -&amp;gt; 10000
        if isPalindrome0(N) { // 팰린드롬이라면,
            print(N.map{String($0)}.joined(separator: &quot;&quot;)) // joined로 정답 출력.
            break
        }
    }
    else { // ex) 01234 -&amp;gt; 01235
        if isPalindrome1(N) { // 팰린드롬이라면,
            print(N[1...N.count-1].map{String($0)}.joined(separator: &quot;&quot;)) // joined로 정답 출력.
            break
        }
    }
}

func isPalindrome0(_ nArray: [Int]) -&amp;gt; Bool { // nArray의 맨 앞 자리가 유효할 때. ex) 09999 -&amp;gt; 10000
    let length: Int = nArray.count
    var flag: Bool = true
    
    for i in 0..&amp;lt;length/2 { // 처음(0)부터 중간까지 돎.
        if nArray[i] != nArray[length - 1 - i] {
            flag = false
            break
        }
    }
    return flag
}

func isPalindrome1(_ nArray: [Int]) -&amp;gt; Bool { // nArray의 맨 앞 자리가 유효하지 않을 때. ex) 01234 -&amp;gt; 01235
    let length: Int = nArray.count
    var flag: Bool = true
    
    for i in 1...length/2 { // 1부터 중간까지 돎.
        if nArray[i] != nArray[length - i] {
            flag = false
            break
        }
    }
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1747번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 소수(에라토스테네스의 체) + 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;에라토스테네스의 체&lt;/b&gt;에 대해 몰랐다. &quot;&lt;u&gt;소수 판별 시 &lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;&lt;b&gt;&amp;radic;n까지만 판별&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;u&gt;하면 소수인지 아닌지 알 수 있다는 사실&lt;/u&gt;&quot;을 알았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;에라토스테네스의 체와 팰린드롬을 체크하는 함수 두개를 합쳐서 풀면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1747번(에라토스테네스의 체 + 팰린드롬)
import Foundation
var N = Int(readLine()!)!
while true {
    if isPrime(N) { // 소수인데,
        if isPalindrome(String(N).map{String($0)}) { // 팰린드롬이기까지 하면,
            print(N)
            break
        }
    }
    N += 1
}

func isPrime(_ num: Int) -&amp;gt; Bool { // 소수인지 확인하는 함수.
    if num &amp;lt; 4 {
        return num == 1 ? false : true // 1은 false, 2와 3은 true
    }
    let end: Int = Int(sqrt(Double(num))) // Int(&amp;radic;n)까지만.
    for i in 2...end {
        if num % i == 0 { // 약수가 있다면, 소수가 아님.
            return false
        }
    }
    return true
}

func isPalindrome(_ numArray: [String]) -&amp;gt; Bool { // 팰린드롬인지 확인하는 함수.
    let length: Int = numArray.count
    var flag: Bool = true

    for i in 0..&amp;lt;length/2 {
        if numArray[i] != numArray[length - 1 - i] {
            flag = false
            break
        }
    }
    return flag
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;에라토스테네스의 체&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 에라토스테네스의 체&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt; 소수 구하는 최적의 방식에 대해 공부했다. 임의의 수(n)의 약수는 대칭이라는 특징을 이용해, &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;&lt;u&gt;&lt;b&gt;&amp;radic;n까지만 판별&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;하면 소수인지 아닌지 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.youtube.com/watch?v=5ypkoEgFdH8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=5ypkoEgFdH8&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;소수 판별 - &lt;u&gt;임의의 수만 판별&lt;/u&gt;할 때&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654765717721&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 소수 판별
import Foundation // sqrt를 위해.
func isPrime(_ num: Int) -&amp;gt; Bool {
    if num &amp;lt; 4 {
        return num == 1 ? false : true // 1은 false, 2와 3은 true
    }
    
    let end: Int = Int(sqrt(Double(num))) // Int(&amp;radic;n)까지만.
    for i in 2...end {
        if num % i == 0 { // 약수가 있다면, 소수가 아님.
            return false
        }
    }
    return true
}

//print(isPrime(1)) // false
//print(isPrime(2)) // true
//print(isPrime(3)) // true
//print(isPrime(4)) // false
//print(isPrime(5)) // true
//소수 관련 문제(백준 1978번) : https://www.acmicpc.net/problem/1978&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;에라토스테네스의 체 - &lt;u&gt;대량의 수&lt;/u&gt;를 한꺼번에 &lt;u&gt;판별&lt;/u&gt;할 때&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 에라토스테네스의 체
let N = Int(readLine()!)!
var arr: [Int] = [-1] + Array(repeating: -1, count: N)

if N &amp;gt;= 2 { // N == 1 방지
    for i in 2...N {
        arr[i] = i
    }
}

if N &amp;gt;= 2 { // N == 1 방지
    for i in 2...N {
        if arr[i] != -1 { // i위치의 값이 지워지지 않았다면,
            for j in stride(from: 2*i, through: N, by: i) { // i의 배수들은 모두 지워줌.
                arr[j] = -1
            }
        }
    }
}

print(arr.filter{$0 != -1}) // 지워지지 않고 남은 것들만 출력.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 10942번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제를 딱 보고 dp를 써야 될 거 같다고 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;맨 처음엔 바텀업 방식이니까 밑에부터 올라가는 식으로 해야 된다고 생각해서 못풀다가, 힌트를 보고 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;힌트 : S...E가 팰린드롬이려면, S+1...E-1도 팰린드롬이어야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열을 만들고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(1,1), (2,2), (3,3), ... (N,N)은 무조건 팰린드롬이다. &lt;b&gt;&lt;u&gt;미리 세팅한다.&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[S][E]를 알기 위해선, dp[S+1][E-1]을 이용하면 빠르게 알 수 있다. 근데 만약 (3,4)라면 공식을 이용시 (4,3)이라는 필요없는 부분을 검사하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그래서 미리 (1,2), (2,3), (3,4), ... (N-1, N) 도&amp;nbsp;&lt;u&gt;&lt;b&gt;미리 세팅한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654931930117&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in 1...N {
    dp[i][i] = true // 1자리수는 무조건 팰린드롬.
}

for i in 1..&amp;lt;N {
    if arr[i] == arr[i + 1] { // dp공식을 위해 미리 체크해놓음.
        dp[i][i + 1] = true
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하단 종이 풀이에서, 빨간 동그라미부터 낮은 방향으로 가면 된다. 1행은 체크표시하지 않았다. (그냥)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, N-2행부터 1행까지, i+2열부터 N까지 확인하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;추가적으로, arr[S]와 arr[E]도 확인해야 진짜 팰린드롬인지 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;(dp[S+1][E-1] == true) &amp;amp;&amp;amp; (arr[S] == arr[E])&lt;/b&gt;&lt;/u&gt; 를 모두 만족하면 팰린드롬이다.&lt;/p&gt;
&lt;pre id=&quot;code_1654932407645&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in stride(from: N-2, through: 1, by: -1) {
    for j in i+2...N { // i와 i+1은 미리 세팅됨.
        if (dp[i + 1][j - 1]) &amp;amp;&amp;amp; (arr[i] == arr[j]) {
            dp[i][j] = true
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&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;2090&quot; data-origin-height=&quot;2303&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZv9mL/btrEuk8bIOb/ZOFSgK2OrwD4tvtGQTNDvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZv9mL/btrEuk8bIOb/ZOFSgK2OrwD4tvtGQTNDvk/img.jpg&quot; data-alt=&quot;백준 Swift 10942번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZv9mL/btrEuk8bIOb/ZOFSgK2OrwD4tvtGQTNDvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZv9mL%2FbtrEuk8bIOb%2FZOFSgK2OrwD4tvtGQTNDvk%2Fimg.jpg&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;400&quot; height=&quot;441&quot; data-origin-width=&quot;2090&quot; data-origin-height=&quot;2303&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 10942번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;추가적으로, 풀이 자체는 맞는데, Swift에 할당된 시간이 부족해서 &lt;u&gt;&lt;b&gt;시간초과&lt;/b&gt;&lt;/u&gt;가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;u&gt;FileIO&lt;/u&gt;를 써서 해결하면 된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;틀렸습니다가 뜬 이유&lt;/b&gt;&lt;/u&gt;는..... 가장 마지막 부분에 &lt;u&gt;&lt;b&gt;print(answer)를 안해줘서.....&lt;/b&gt;&lt;/u&gt; 이런 실수는 Naver~~가자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2554&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2oaHz/btrEuQMbCM8/p9O8bnKnovx8RZlV4D1WE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2oaHz/btrEuQMbCM8/p9O8bnKnovx8RZlV4D1WE0/img.png&quot; data-alt=&quot;백준 Swift 10942번 해결.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2oaHz/btrEuQMbCM8/p9O8bnKnovx8RZlV4D1WE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2oaHz%2FbtrEuQMbCM8%2Fp9O8bnKnovx8RZlV4D1WE0%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;143&quot; data-origin-width=&quot;2554&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 10942번 해결.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://4z7l.github.io/2021/04/07/algorithms-boj-10942.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://4z7l.github.io/2021/04/07/algorithms-boj-10942.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 - FileIO 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10942번(dp + 팰린드롬)
import Foundation
// 라이노님의 FileIO
final class FileIO {
    private var buffer:[UInt8]
    private var index: Int
    
    init(fileHandle: FileHandle = FileHandle.standardInput) {
        buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
        index = 0
    }
    
    @inline(__always) private func read() -&amp;gt; UInt8 {
        defer { index += 1 }
        
        return buffer.withUnsafeBufferPointer { $0[index] }
    }
    
    @inline(__always) func readInt() -&amp;gt; Int {
        var sum = 0
        var now = read()
        var isPositive = true
        
        while now == 10
                || now == 32 { now = read() } // 공백과 줄바꿈 무시
        if now == 45{ isPositive.toggle(); now = read() } // 음수 처리
        while now &amp;gt;= 48, now &amp;lt;= 57 {
            sum = sum * 10 + Int(now-48)
            now = read()
        }
        
        return sum * (isPositive ? 1:-1)
    }
    
    @inline(__always) func readString() -&amp;gt; String {
        var str = &quot;&quot;
        var now = read()
        
        while now == 10
                || now == 32 { now = read() } // 공백과 줄바꿈 무시
        
        while now != 10
                &amp;amp;&amp;amp; now != 32 &amp;amp;&amp;amp; now != 0 {
            str += String(bytes: [now], encoding: .ascii)!
            now = read()
        }
        
        return str
    }
}

// 풀이
let file = FileIO()
//let N = Int(readLine()!)!
let N = file.readInt()
//var arr: [Int] = [-1] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var arr: [Int] = [-1]
for _ in 0..&amp;lt;N {
    arr.append(file.readInt())
}
//let M = Int(readLine()!)!
let M = file.readInt()
//var question: [(start: Int, end: Int)] = []
//for _ in 0..&amp;lt;M {
//    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
//    question.append((input[0], input[1]))
//}
var dp: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)

for i in 1...N {
    dp[i][i] = true // 1자리수는 무조건 팰린드롬.
}

for i in 1..&amp;lt;N {
    if arr[i] == arr[i + 1] { // dp공식을 위해 미리 체크해놓음.
        dp[i][i + 1] = true
    }
}

for i in stride(from: N-2, through: 1, by: -1) {
    for j in i+2...N { // i와 i+1은 미리 세팅됨.
        if (dp[i + 1][j - 1]) &amp;amp;&amp;amp; (arr[i] == arr[j]) {
            dp[i][j] = true
        }
    }
}

//for q in question {
//    if dp[q.start][q.end] { // 팰린드롬인 경우,
//        print(1)
//    }
//    else { // 팰린드롬이 아닐 경우,
//        print(0)
//    }
//}

var answer = &quot;&quot;
for _ in 0..&amp;lt;M {
    let (S, E) = (file.readInt(), file.readInt())
    answer += (dp[S][E] == true ? &quot;1\n&quot; : &quot;0\n&quot;)
}
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 : 시간초과(FileIO 미사용)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654930955492&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10942번(dp + 팰린드롬) : 시간초과
let N = Int(readLine()!)!
var arr: [Int] = [-1] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let M = Int(readLine()!)!
var question: [(start: Int, end: Int)] = []
for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    question.append((input[0], input[1]))
}
var dp: [[Bool]] = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)

for i in 1...N {
    dp[i][i] = true // 1자리수는 무조건 팰린드롬.
}

for i in 1..&amp;lt;N {
    if arr[i] == arr[i + 1] { // dp공식을 위해 미리 체크해놓음.
        dp[i][i + 1] = true
    }
}

for i in stride(from: N-2, through: 1, by: -1) {
    for j in i+2...N { // i와 i+1은 미리 세팅됨.
        if (dp[i + 1][j - 1]) &amp;amp;&amp;amp; (arr[i] == arr[j]) {
            dp[i][j] = true
        }
    }
}

for q in question {
    if dp[q.start][q.end] { // 팰린드롬인 경우,
        print(1)
    }
    else { // 팰린드롬이 아닐 경우,
        print(0)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1990번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt; 논리적으론 맞게 풀었는데, 시간 초과가 난다... 후..&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;Manacher 알고리즘&lt;/b&gt;&lt;/u&gt;을 적용하면 통과할 수 있을 것 같은데, 공부 후에 통과 코드를 올리도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 - 시간초과&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1990번(소수 + 팰린드롬) - 시간초과
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (a, b) = (input[0], input[1])

func isPrime(_ num: Int) -&amp;gt; Bool {
    if num &amp;lt; 4 {
        return num == 1 ? false : true // 2와 3은 소수.
    }
    
    let end: Int = Int(sqrt(Double(num)))
    
    for i in 2...end {
        if num % i == 0 { // 나뉜다면, 소수가 아님.
            return false
        }
    }
    return true
}

func isPalindrome(_ num: [String]) -&amp;gt; Bool {
    let length: Int = num.count
    var flag: Bool = true
    
    for i in 0..&amp;lt;length/2 {
        if num[i] != num[length - 1 - i] {
            flag = false
            break
        }
    }
    return flag
}

var answer: String = &quot;&quot;
for n in a...b {
    if isPrime(n) { // 소수인데,
        let temp = String(n).map{String($0)} // ex) 181 -&amp;gt; &quot;181&quot; -&amp;gt; [&quot;1&quot;, &quot;8&quot;, &quot;1&quot;]
        if isPalindrome(temp) {
            answer += &quot;\(n)\n&quot;
        }
    }
}
answer += &quot;-1&quot;
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 5502번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 팰린드롬 / DP / LCS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;비슷한 문제(백준 1695번)를 풀었어서, 쉽게 풀 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;arr&lt;/b&gt;과 뒤집은 &lt;b&gt;rArr&lt;/b&gt;의 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;&lt;b&gt;LCS(최장 공통 부분수열)&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;로 풀면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;단, &lt;span style=&quot;color: #ee2323;&quot;&gt;LCS(최장 공통 문자열)&lt;/span&gt;는 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음엔 문제 없다고 생각했는데, &lt;span style=&quot;color: #ee2323;&quot;&gt;최장 공통 문자열&lt;/span&gt;로 했을 땐 틀려서 고민해보니, 반례가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례 : &quot;abca&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&quot;abca&quot; 일 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;최장 공통 부분수열&lt;/span&gt;은 3이다. =&amp;gt; 답 : 4 - 3 = &lt;b&gt;1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&quot;abca&quot; 일 때 &lt;span style=&quot;color: #ee2323;&quot;&gt;최장 공통 문자열&lt;/span&gt;은 1이다. =&amp;gt; 답 : 4 - 1 = &lt;b&gt;3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;answer = N - LCS&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1556&quot; data-origin-height=&quot;3418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xeLi8/btrEXVMKCW4/s6nT03Z3bPgxGpOnFQtEsk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xeLi8/btrEXVMKCW4/s6nT03Z3bPgxGpOnFQtEsk/img.jpg&quot; data-alt=&quot;백준 Swift 5502번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xeLi8/btrEXVMKCW4/s6nT03Z3bPgxGpOnFQtEsk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxeLi8%2FbtrEXVMKCW4%2Fs6nT03Z3bPgxGpOnFQtEsk%2Fimg.jpg&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;400&quot; height=&quot;879&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;3418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 5502번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드3&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RKSkI/btrEX2ZGc4w/Co4KNlXCPaJa7BGCptqevk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RKSkI/btrEX2ZGc4w/Co4KNlXCPaJa7BGCptqevk/img.png&quot; data-alt=&quot;백준 Swift 5502번 - 시간 차이.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RKSkI/btrEX2ZGc4w/Co4KNlXCPaJa7BGCptqevk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRKSkI%2FbtrEX2ZGc4w%2FCo4KNlXCPaJa7BGCptqevk%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;113&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 5502번 - 시간 차이.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이1&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5502번(dp - LCS)
let N = Int(readLine()!)!
let arr: [String] = [&quot;@&quot;] + readLine()!.map{String($0)} // @는 인덱스 채우기용.
var dp = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)

// LCS(최장 공통 부분수열)
for i in 1...N { // 뒤 부터 돌면서,
    for j in 1...N { // 앞 부터 돌면서,
        if arr[N + 1 - i] == arr[j] {
            dp[i][j] = dp[i - 1][j - 1] + 1 // (이전 행, 이전열의 값) + 1
        }
        else {
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) // max(이전 행의 같은 열, 같은 행의 이전 열)
        }
    }
}

// LCS(최장 공통 문자열) - 잘못됨. 반례 : &quot;abca&quot;
//for i in 1...N { // 뒤 부터 돌면서,
//    for j in 1...N { // 앞 부터 돌면서,
//        if arr[N + 1 - i] == arr[j] {
//            dp[i][j] = dp[i - 1][j - 1] + 1
//        }
//    }
//}

print(N - dp[N][N]) // N - LCS값이 정답.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이2&lt;/b&gt; - .reversed() 사용 이유 = O(1)이라, 유의미한 시간 단축이 될 것이라 생각.&lt;/p&gt;
&lt;pre id=&quot;code_1655392365411&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5502번(dp - LCS) / .reversed()사용 : 눈에 띄는 시간 단축은 없네...
let N = Int(readLine()!)!
let arr: [String] = [&quot;@&quot;] + readLine()!.map{String($0)} // @는 인덱스 채우기용.
let rArr: [String] = arr.reversed()
var dp = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)

// LCS(최장 공통 부분수열)
for i in 0..&amp;lt;N { // 뒤 부터 돌면서,
    for j in 1...N { // 앞 부터 돌면서,
        if rArr[i] == arr[j] {
            dp[i + 1][j] = dp[i][j - 1] + 1 // (이전 행, 이전열의 값) + 1
        }
        else {
            dp[i + 1][j] = max(dp[i][j], dp[i + 1][j - 1]) // max(이전 행의 같은 열, 같은 행의 이전 열)
        }
    }
}

print(N - dp[N][N]) // N - LCS값이 정답.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1053번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP, 팰린드롬&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;팰린드롬 문제들 중에 Swift로 한번도 풀리지 않은 문제들이 종종 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;공부하면서 Swift 기준 최초 풀이에 등극할 때 마다 기분이 참 좋다. ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2564&quot; data-origin-height=&quot;626&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvKmUb/btrFi9czE3m/1QCLSzgAjavTjg6JPCjbyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvKmUb/btrFi9czE3m/1QCLSzgAjavTjg6JPCjbyK/img.png&quot; data-alt=&quot;백준 1053번 - Swift 최초 풀이 등극.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvKmUb/btrFi9czE3m/1QCLSzgAjavTjg6JPCjbyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvKmUb%2FbtrFi9czE3m%2F1QCLSzgAjavTjg6JPCjbyK%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;122&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;626&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 1053번 - Swift 최초 풀이 등극.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제를 보고 사실 어떻게 풀어야 할지 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4개의 방법들 중, 방법4는 한번만 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;방법1,2,3은 팰린드롬을 만드는 데 이득이 되는 방향&lt;/b&gt;&lt;/u&gt;이다. 방법 1,2,3을 하고 난 뒤에 방법4를 확인하는건 이득이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;최소의 횟수로 팰린드롬을 만들어야 하는 상황&lt;/b&gt;에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;비유하자면 방법 1,2,3을 통해 올바르게 가고 있었는데, 방법4를 써서 후진하게 되는 것과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서, 방법4를 먼저 사용하고, 나머지 방법들을 통해 횟수를 기록한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;하단 종이 풀이를 함께 참고하자.&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp[i][j] = arr[i] ~ arr[j] 까지의 문자열을 팰린드롬으로 만드는데 필요한 횟수&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;[dp배열 초기 세팅]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i부터 i까지는 이미 팰린드롬이니까 당연히 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;초록 동그라미 부분도 미리 세팅한다. 값은 1 또는 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. 방법 1이 더 필요한 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i부터 j-1까진 이미 팰린드롬이고, i부터 j까지 팰린드롬을 만들고 싶은 경우다. 방법1을 써서 맨 앞에 붙이면 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;dp[i][j] = dp[i][j-1] + 1&lt;/b&gt;&lt;/u&gt; (= 연산 횟수 1 증가)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. 방법 2가 더 필요한 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i+1부터 j까진 이미 팰린드롬이고, i부터 j까지 팰린드롬을 만들고 싶은 경우다. 방법2을 써서 맨 앞(i)을 삭제하면 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;dp[i][j] = dp[i+1][j] + 1&lt;/b&gt;&lt;/u&gt;&lt;b&gt; &lt;/b&gt;(= 연산 횟수 1 증가)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 방법 3가 더 필요한 경우&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i+1부터 j-1까진 이미 팰린드롬이고, i부터 j까지 팰린드롬을 만들고 싶은 경우다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1. arr[i]와 arr[j]가 같은 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i부터 j까지도 팰린드롬이다. 연산 횟수가 증가할 필요가 없다.(=연산할 필요가 없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;dp[i][j] = dp[i+1][j-1]&lt;/b&gt;&lt;/u&gt;&lt;b&gt; &lt;/b&gt;(= 연산 횟수 증가X)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-2. arr[i]와 arr[j]가 다른 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;방법3을 써서  arr[i]를 arr[j]로 교체하면 될 것이다. (혹은 arr[j]를 arr[i]로.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;dp[i][j] = dp[i+1][j-1] + 1&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;(= 연산 횟수 1 증가)&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;2764&quot; data-origin-height=&quot;2657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s801Q/btrFkwx5D36/K9oa79oNpXviHH2IZ4WqDK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s801Q/btrFkwx5D36/K9oa79oNpXviHH2IZ4WqDK/img.jpg&quot; data-alt=&quot;백준 Swift 1053번 풀이.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s801Q/btrFkwx5D36/K9oa79oNpXviHH2IZ4WqDK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs801Q%2FbtrFkwx5D36%2FK9oa79oNpXviHH2IZ4WqDK%2Fimg.jpg&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;400&quot; height=&quot;385&quot; data-origin-width=&quot;2764&quot; data-origin-height=&quot;2657&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1053번 풀이.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;마지막으로, 인덱스를 돌면서 최소값 of 최소값을 찾아 출력하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1655726000985&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var answer: Int = findMin(0, 0) // 방법4를 사용하지 않고, 방법1,2,3만을 이용해서 팰린드롬을 만드는데 필요한 횟수.

for i in 0..&amp;lt;N {
    for j in i+1..&amp;lt;N {
        let temp = findMin(i, j) + 1 // +1인 이유는, 방법4를 쓴 횟수 더해줌.
        answer = min(answer, temp)
        arr.swapAt(i, j)
    }
}
print(answer)&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 자료 : &lt;a href=&quot;https://t.ly/fCF8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/fCF8&lt;/a&gt; | &lt;a href=&quot;https://for-development.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://for-development.tistory.com/96&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654608690679&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1053번(DP, 팰린드롬)
var arr: [String] = readLine()!.map{String($0)}
let N: Int = arr.count

func findMin(_ start: Int, _ end: Int) -&amp;gt; Int {
    var dp = Array(repeating: Array(repeating: -1, count: N), count: N)
    arr.swapAt(start, end) // 방법4 사용.
    
    // 기본 세팅1.
    for i in 0..&amp;lt;N {
        dp[i][i] = 0
    }
    // 기본 세팅2.
    for i in 0..&amp;lt;N-1 {
        if arr[i] == arr[i + 1] { // 같으면,
            dp[i][i + 1] = 0 // 방법 사용할 필요 없으니 0.
        }
        else { // 다르면,
            dp[i][i + 1] = 1 // 방법1 사용.
        }
    }
    
    for i in stride(from: N - 2, through: 0, by: -1) {
        for j in i+2..&amp;lt;N {
            if arr[i] == arr[j] { // 방법3 사용.
                dp[i][j] = dp[i + 1][j - 1]
            }
            else { // 방법3 사용.
                dp[i][j] = dp[i + 1][j - 1] + 1
            }
            dp[i][j] = min(dp[i][j], dp[i][j - 1] + 1, dp[i + 1][j] + 1) // 방법3, 방법1, 방법2 중 가장 작은 값 저장.
        }
    }
    
    return dp[0][N - 1]
}

var answer: Int = findMin(0, 0) // 방법4를 사용하지 않고, 방법1,2,3만을 이용해서 팰린드롬을 만드는데 필요한 횟수.

for i in 0..&amp;lt;N {
    for j in i+1..&amp;lt;N {
        let temp = findMin(i, j) + 1 // +1인 이유는, 방법4를 쓴 횟수 더해줌.
        answer = min(answer, temp)
        arr.swapAt(i, j)
    }
}
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>palindrome Swift PS</category>
      <category>palindrome 알고리즘</category>
      <category>Swift palindrome</category>
      <category>Swift PS</category>
      <category>Swift 팰린드롬</category>
      <category>백준 Swift 팰린드롬</category>
      <category>스위프트 백준 팰린드롬</category>
      <category>팰린드롬 관련 문제 모음</category>
      <category>팰린드롬 문제 풀이</category>
      <category>팰린드롬 문제 해결</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/208</guid>
      <comments>https://developer-p.tistory.com/208#entry208comment</comments>
      <pubDate>Tue, 7 Jun 2022 22:55:37 +0900</pubDate>
    </item>
    <item>
      <title>DP(2-2) 문제 풀이 모음 | 백준 Swift 1520번, 2056번, 1695번, 21923번,</title>
      <link>https://developer-p.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;dicLayer&quot; style=&quot;color: #000000; font-size: 13px; font-family: 나눔고딕; background: -webkit-linear-gradient(bottom, #ffffff, #ffffff); width: 400px; height: 150px; display: none; left: 379px; top: 4362px;&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;// MARK: - 1520번(DFS) let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!} let (M, N) = (input[0], input[1]) var arr: [[Int]] = Array(repeating: [], count: M + 1) arr[0] = Array(repeating: 0, count: N + 1) for i in 1...M { arr[i] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!} } //var dp: [[Int]] = Array(repeating: Array(repeating: -1, count: N + 1), count: M + 1) func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool { // 유효범위 체크. return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= M) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= N) } func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool { // 도착완료 체크. return y == M &amp;amp;&amp;amp; x == N } let dy = [0, 1, 0, -1] let dx = [1, 0, -1, 0] var answer: Int = 0 func dfs(_ y: Int, _ x: Int) { if isEscape(y, x) { answer += 1 return } for k in 0..&amp;lt;4 { let ny = y + dy[k] let nx = x + dx[k] if isValidCoord(ny, nx) &amp;amp;&amp;amp; arr[y][x] &amp;gt; arr[ny][nx] { dfs(ny, nx) } } } dfs(1, 1) print(answer) &lt;input id=&quot;ee&quot; type=&quot;checkbox&quot; /&gt;Eng&lt;br /&gt;&lt;br /&gt;// MARK: - 1520번(DFS) let 입력 = readLine()!.split(구분 기호: &quot; &quot;).map{Int(String($0))!} 하자 (M, N) = (입력[0], 입력[1]) var arr: [[Int]] = Array(반복: [], 개수: M + 1) arr[0] = 배열(반복: 0, 개수: N + 1) 1...M { arr[i] = [0] + readLine()!.split(구분 기호: &quot; &quot;).map{Int(String($0))!} } //var dp: [[Int]] = Array(반복: Array(반복: -1, 개수: N + 1), 개수: M + 1) func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool { // 온전한 견실함. 반환 (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= M) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= N) } func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool { // 도착예정입니다. 반환 y == M &amp;amp;&amp;amp; x == N } dy = [0, 1, 0, -1] 하자 dx = [1, 0, -1, 0] var 답변: Int = 0 func dfs(_ y: 정수, _ x: 정수) { isEscape(y, x) { 답 += 1 반품 } k의 경우 0..&amp;lt;4 { ny = y + dy[k] 하자 nx = x + dx[k] if isValidCoord(ny, nx) &amp;amp;&amp;amp; arr[y][x] &amp;gt; arr[ny][nx] { dfs(ny, nx) } } } dfs(1, 1) 인쇄(답변)&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;{&quot;mean&quot;:[&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;mark&amp;lt;/strong&amp;gt; 미국식[mɑːrk] 영국식[mɑːk]&amp;lt;br/&amp;gt;(표기호 등으로) 표시하다&amp;lt;br/&amp;gt;(외관을 망치는) 흔적[자국]을[이] 내다[나다]&amp;lt;br/&amp;gt;(외관을 망치는) 자국[흔적]&amp;lt;br/&amp;gt;(피부의) 점[반점] (&amp;rarr;&amp;lt;span class='related_word' lang='en' &amp;gt;birthmark, &amp;lt;strong&amp;gt;marking&amp;lt;/strong&amp;gt;&amp;lt;/span&amp;gt;)&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;let&amp;lt;/strong&amp;gt; 미국∙영국[&amp;lt;strong&amp;gt;let&amp;lt;/strong&amp;gt;]&amp;lt;br/&amp;gt;(&amp;hellip;하게) 놓아두다&amp;lt;br/&amp;gt;(&amp;hellip;을 하도록) 허락하다&amp;lt;br/&amp;gt;레트(테니스에서 제대로 들어오기는 했으나 네트에 닿았다가 들어온 서브)&amp;lt;br/&amp;gt;英 임대&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;번&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;(횟수, 차례, 경우) time, occasion; (시도) try&amp;lt;br/&amp;gt;(번호) number ((abb.)No.)&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;input&amp;lt;/strong&amp;gt; 미국∙영국[ˈɪnpʊt]&amp;lt;br/&amp;gt;(일사업 등을 성공시키기 위한) 조언[시간/지식 등](의 제공), 투입&amp;lt;br/&amp;gt;컴퓨터 입력&amp;lt;br/&amp;gt;입력하다 (&amp;rarr;&amp;lt;span class='related_word' lang='en' &amp;gt;output&amp;lt;/span&amp;gt;)&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;-&amp;lt;strong&amp;gt;let&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;&amp;amp;lt;&amp;lsquo;작은 것&amp;rsquo;, &amp;lsquo;별로 중요하지 않은 것&amp;rsquo;을 나타냄&amp;amp;gt;&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;오픈&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;mark&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;정정&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;input&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;[명사] 전문적 지식(( 주로 복수형 &amp;lt;strong&amp;gt;inputs&amp;lt;/strong&amp;gt; ))&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;input&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;전문적 지식(( 주로 복수형 &amp;lt;strong&amp;gt;inputs&amp;lt;/strong&amp;gt; ))&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;VAR&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;부가가치 판매업자&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;예제&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;VLIVE 자막&quot;],&quot;word&quot;:&quot;MARK 번DFS\nlet input readLinesplitseparator mapIntString\nlet M N input input\n\nvar arr Int Arrayrepeating&quot;,&quot;basicWord&quot;:&quot;MARK 번DFS\nlet input readLinesplitseparator mapIntString\nlet M N input input\n\nvar arr Int Arrayrepeating&quot;,&quot;soundWord&quot;:&quot;MARK 번DFS\nlet input readLinesplitseparator mapIntString\nlet M N input input\n\nvar arr Int Arrayrepeating&quot;,&quot;phoneticSymbol&quot;:&quot;&quot;}&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP2의 문제양이 많아,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DP2-1&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DP2-2&lt;/b&gt;로 나눕니다. (&lt;b&gt;DP2-1&lt;/b&gt;은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://developer-p.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;확인할 수 있습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;추천문제 번호 모음은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;확인할 수 있습니다.&lt;/span&gt; &lt;/span&gt;&lt;b&gt;골드&lt;/b&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;613&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbQDcR/btrDVn4IKGs/OXt244iShdVuIwc3VdKEGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbQDcR/btrDVn4IKGs/OXt244iShdVuIwc3VdKEGK/img.png&quot; data-alt=&quot;DP2-2 추천문제 번호 모음.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbQDcR/btrDVn4IKGs/OXt244iShdVuIwc3VdKEGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbQDcR%2FbtrDVn4IKGs%2FOXt244iShdVuIwc3VdKEGK%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;400&quot; height=&quot;350&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DP2-2 추천문제 번호 모음.&lt;/figcaption&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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.03 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.06 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.07 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654261829131&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cMdyYG/hyOEk8MlD8/UT7gsOAJkzhUdnEZivM8U0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cMdyYG/hyOEk8MlD8/UT7gsOAJkzhUdnEZivM8U0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/201&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654261860607&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번, &quot; data-og-description=&quot;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/201&quot; data-og-url=&quot;https://developer-p.tistory.com/201&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xhdaL/hyOCOcAHOU/CMoaPylTifBlwfrDtdHock/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DueVr/hyOEnRYiCb/Nwx64uuLIBdmkDSIn1gMTk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/Usw1p/hyOCQaoJcx/kKPJi2HoOrtw79DjZK45c1/img.png?width=686&amp;amp;height=1276&amp;amp;face=0_0_686_1276&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/201&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xhdaL/hyOCOcAHOU/CMoaPylTifBlwfrDtdHock/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DueVr/hyOEnRYiCb/Nwx64uuLIBdmkDSIn1gMTk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/Usw1p/hyOCQaoJcx/kKPJi2HoOrtw79DjZK45c1/img.png?width=686&amp;amp;height=1276&amp;amp;face=0_0_686_1276');&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번,&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/203&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654261886827&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&quot; data-og-description=&quot;developer Eng developer 미국∙영국[dɪˈveləpə(r)] (부동산) 개발업자[개발 회사] (신상품) 개발자[개발 회사] (사진) 현상액 a property developer 부동산 개발 업자[회사] late developer 발육[발달, 성장]..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/203&quot; data-og-url=&quot;https://developer-p.tistory.com/203&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZmV1P/hyOEgSQMfH/1hkfvMWNoL0SUj60q5kR41/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/bgBEmF/hyOEkAVYnY/VzO1oLqXwnVlZQvClFFQNk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/bkrleW/hyOCFGKcdm/xMapeHTc0lwOdZZBB7dLn0/img.jpg?width=2842&amp;amp;height=3844&amp;amp;face=0_0_2842_3844&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/203&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZmV1P/hyOEgSQMfH/1hkfvMWNoL0SUj60q5kR41/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/bgBEmF/hyOEkAVYnY/VzO1oLqXwnVlZQvClFFQNk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/bkrleW/hyOCFGKcdm/xMapeHTc0lwOdZZBB7dLn0/img.jpg?width=2842&amp;amp;height=3844&amp;amp;face=0_0_2842_3844');&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;developer Eng developer 미국∙영국[dɪˈveləpə(r)] (부동산) 개발업자[개발 회사] (신상품) 개발자[개발 회사] (사진) 현상액 a property developer 부동산 개발 업자[회사] late developer 발육[발달, 성장]..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1520번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DFS + DP&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음에 DFS만으로 푸는 건 풀었다. 혹시나 했지만 역시나 20~30%즈음에서 시간초과...&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;못풀겠어서 다른 블로그를 찾아보니,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DFS와 DP를 합쳐서 푸는 문제&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;보통 DFS를 풀 땐 방문체크를 한다. DP에서 방문체크를 하기 위해선 어떻게 해야 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp를 -1로 초기화 한 뒤, -1값이라는건 첫방문이라는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;첫방문일 시, dp값을 0으로 바꿔주고, dfs를 다시 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;첫방문이 아닐 시, 저장된 값을 바로 return해준다. 저장된 값은 몇개의 길이 있는지에 대한 정보를 담고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;목적지에 도달했을 때 1값을 return해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하단 그림을 참고하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;목적지에 도달할 때 1을 리턴해줘서,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;탐색하는건&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;(그림기준)&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;위에서부터&lt;/b&gt;&lt;/u&gt;인데,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;저장되는건 밑에서부터&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b21OFL/btrDXogNM37/GGR2uprL50OTUn7rYZtO4K/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b21OFL/btrDXogNM37/GGR2uprL50OTUn7rYZtO4K/img.gif&quot; data-alt=&quot;출처 - https://wootool.tistory.com/83&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b21OFL/btrDXogNM37/GGR2uprL50OTUn7rYZtO4K/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/b21OFL/btrDXogNM37/GGR2uprL50OTUn7rYZtO4K/img.gif&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;400&quot; height=&quot;219&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;701&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 - https://wootool.tistory.com/83&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://sihyungyou.github.io/baekjoon-1520/&quot;&gt;https://sihyungyou.github.io/baekjoon-1520/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://wootool.tistory.com/83&quot;&gt;https://wootool.tistory.com/83&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DFS + DP&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1520번(DFS + DP)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N) = (input[0], input[1])

var arr: [[Int]] = Array(repeating: [], count: M + 1)
arr[0] = Array(repeating: 0, count: N + 1)
for i in 1...M {
    arr[i] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
}

var dp: [[Int]] = Array(repeating: Array(repeating: -1, count: N + 1), count: M + 1)

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool { // 유효범위 체크.
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= M) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= N)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool { // 도착완료 체크.
    return y == M &amp;amp;&amp;amp; x == N
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func dfs(_ y: Int, _ x: Int) -&amp;gt; Int {
//    print(y, x, dp)
    if isEscape(y, x) { // 도착 시,
        return 1
    }
    
//    if dp[y][x] != -1 { // 방문 좌표일 시,
//        return dp[y][x]
//    }
    
    if dp[y][x] == -1 { // 미방문 좌표일 시,
        dp[y][x] = 0 // 우선 값 0으로 초기화.
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; arr[y][x] &amp;gt; arr[ny][nx] { // 유효범위이고, 높이가 낮으면,
                dp[y][x] += dfs(ny, nx)
            }
        }
    }
    
    return dp[y][x] // 방문 좌표일 시,
}

let answer = dfs(1, 1)
print(answer)&lt;/code&gt;&lt;/pre&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;&lt;b&gt;Only DFS&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;- 시간초과&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1520번(DFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N) = (input[0], input[1])

var arr: [[Int]] = Array(repeating: [], count: M + 1)
arr[0] = Array(repeating: 0, count: N + 1)
for i in 1...M {
    arr[i] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
}

//var dp: [[Int]] = Array(repeating: Array(repeating: -1, count: N + 1), count: M + 1)

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool { // 유효범위 체크.
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= M) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= N)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool { // 도착완료 체크.
    return y == M &amp;amp;&amp;amp; x == N
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

var answer: Int = 0
func dfs(_ y: Int, _ x: Int) {
    if isEscape(y, x) {
        answer += 1
        return
    }
    
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; arr[y][x] &amp;gt; arr[ny][nx] {
            dfs(ny, nx)
        }
    }
}

dfs(1, 1)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2056번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : &lt;span style=&quot;color: #333333;&quot;&gt;DP(반복문) / &lt;span style=&quot;background-color: #ffffff;&quot;&gt;위상 정렬(Topology Sort)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;전에 위상정렬 관련 문제를 풀었었다. 근데 풀이 방법을 잊고 있었다. 위상정렬을 기억하고 있었다면, 이 문제를 보고 바로 알아챌 수 있었을 것 같은데 아쉽다. 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제는 DP만으로 풀 수 있었고, 위상 정렬을 이용해서도 풀 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;미리 받아놓고 나중에 for문을 돌리는 식이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. i번부터 N번까지의 작업을 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. j를 count 개수만큼 선행 관계를 돌면서,&lt;/p&gt;
&lt;pre id=&quot;code_1654505891010&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let beforeWorkNum = input[2 + j] // 선행 관계 작업 번호
//  dp[i] = max(dp[i], dp[beforeWorkNum] + time) (ver.1)
dp[i] = max(dp[i], dp[beforeWorkNum]) // (ver.2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 구한 dp값에, i번 작업에 걸리는 시간을 더해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1654505943369&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[i] += time // i번 작업에 걸리는 시간을 추후에 저장. (ver.2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4. dp배열의 최대값이 정답이 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;위상정렬 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 연결된 그래프를 저장한다. 각 작업의 진입차수도 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 진입차수가 0인 것만 큐에 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 큐가 empty가 될 때까지 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1. q.popFirst()를 한다. &lt;u&gt;&lt;b&gt;우선, 해당 작업(node)에 걸리는 시간을 저장한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654506167378&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let node = q.popFirst()
completeTimeArray[node] += times[node] // 우선, 해당 작업(현재꺼)에 걸리는 시간 저장.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-2. 현재 노드(node)와 연결된 노드(nextNode)들을 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;연결된 노드(nextNode)의 진입차수를 1 감소 시키고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;연결된 노드와 현재 노드 의 값중 최대값을 저장한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;연결된 노드의 진입 차수가 0이라면 큐에 집어 넣는다.&lt;/p&gt;
&lt;pre id=&quot;code_1654506211226&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for nextNode in graph[node] { // 현재 노드와 연결된 노드들을 돌면서,
    indegree[nextNode] -= 1 // 연결된 노드의 진입 차수를 -1씩 감소.
    completeTimeArray[nextNode] = max(completeTimeArray[nextNode], completeTimeArray[node]) // 다음꺼 걸리는 시간, 현재꺼 걸리는 시간

    if indegree[nextNode] == 0 { // 진입 차수가 0이라면,
        q.pushLast(nextNode) // 큐에 저장.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://m.blog.naver.com/ndb796/221236874984&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://m.blog.naver.com/ndb796/221236874984&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://steady-coding.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://steady-coding.tistory.com/182&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;큐 - 위상정렬&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2056번(큐 - 위상정렬)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let N = Int(readLine()!)!
var graph: [[Int]] = Array(repeating: [], count: N + 1)
var times: [Int] = [-1] + Array(repeating: 0, count: N) // 해당 작업에 걸리는 시간들 저장.
var indegree: [Int] = [-1] + Array(repeating: 0, count: N) // 각 작업들의 진입 차수 저장.

for i in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    times[i] = input[0]
    let count: Int = input[1]
    indegree[i] = count // 진입 차수 저장.
    
    for j in 0..&amp;lt;count {
        let beforeWorkNum = input[2 + j] // 선행 관계 작업 번호
        graph[beforeWorkNum].append(i)
    }
}

let q: Dequeue&amp;lt;Int&amp;gt; = Dequeue([])
for i in 1...N {
    if indegree[i] == 0 {
        q.pushLast(i)
    }
}

var completeTimeArray: [Int] = [-1] + Array(repeating: 0, count: N) // 각 작업을 완료하는데 걸리는 시간.
while !q.isEmpty {
    let node = q.popFirst()
    completeTimeArray[node] += times[node] // 우선, 해당 작업(현재꺼)에 걸리는 시간 저장.
    
    for nextNode in graph[node] { // 현재 노드와 연결된 노드들을 돌면서,
        indegree[nextNode] -= 1 // 연결된 노드의 진입 차수를 -1씩 감소.
        completeTimeArray[nextNode] = max(completeTimeArray[nextNode], completeTimeArray[node]) // 다음꺼 걸리는 시간, 현재꺼 걸리는 시간
        
        if indegree[nextNode] == 0 { // 진입 차수가 0이라면,
            q.pushLast(nextNode) // 큐에 저장.
        }
    }
}

print(completeTimeArray.max()!)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문 - DP&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2056번(DP - 반복문)
let N = Int(readLine()!)!
var dp: [Int] = [-1] + Array(repeating: 0, count: N)

for i in 1...N { // 작업을 돌면서,
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let time = input[0] // i번 작업에 걸리는 시간.
    let count: Int = input[1] // 선행 관계에 있는 작업 개수
    
//    dp[i] = time // i번 작업에 걸리는 시간을 우선 저장. (ver.1)
    
    for j in 0..&amp;lt;count { // 선행 관계를 돌면서,
        let beforeWorkNum = input[2 + j] // 선행 관계 작업 번호
//        dp[i] = max(dp[i], dp[beforeWorkNum] + time) (ver.1)
        dp[i] = max(dp[i], dp[beforeWorkNum]) // (ver.2)
    }
    dp[i] += time // i번 작업에 걸리는 시간을 추후에 저장. (ver.2)
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1695번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문) / LCS(최장 공통 부분 수열)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;고민하다보니 LIS가 생각났다. 근데 다시 생각해보니 increase는 전혀 상관이 없었다. 그러다 결국 찾지 못하고 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;arr과 reverseArr의 &lt;u&gt;&lt;b&gt;LCS&lt;/b&gt;&lt;/u&gt;를 구하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;숫자가 같다면, dp[i][j] = dp[i - 1][j - 1] + 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;숫자가 다르다면, dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) // 이전&amp;nbsp;행의&amp;nbsp;같은&amp;nbsp;열,&amp;nbsp;같은&amp;nbsp;행의&amp;nbsp;이전&amp;nbsp;열&amp;nbsp;중&amp;nbsp;큰&amp;nbsp;값을&amp;nbsp;저장.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음, 총 길이 N에서 LCS값인 dp[N][N]을 빼면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2431&quot; data-origin-height=&quot;2431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEE1jG/btrEbDzTXgW/B1tslCwPGWDv032bi5HzrK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEE1jG/btrEbDzTXgW/B1tslCwPGWDv032bi5HzrK/img.jpg&quot; data-alt=&quot;백준 Swift 1695번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEE1jG/btrEbDzTXgW/B1tslCwPGWDv032bi5HzrK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEE1jG%2FbtrEbDzTXgW%2FB1tslCwPGWDv032bi5HzrK%2Fimg.jpg&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;350&quot; height=&quot;350&quot; data-origin-width=&quot;2431&quot; data-origin-height=&quot;2431&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1695번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ddiyeon.tistory.com/67&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ddiyeon.tistory.com/67&lt;/a&gt;&amp;nbsp;| &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://t.ly/iQq7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/iQq7&lt;/a&gt;&amp;nbsp;| &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://mapocodingpark.blogspot.com/2020/07/1695.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mapocodingpark.blogspot.com/2020/07/1695.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654607755616&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1695번(DP - 재귀함수)
let N = Int(readLine()!)!
var arr: [Int] = [-1] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [[Int]] = Array(repeating: Array(repeating: -1, count: N + 1), count: N + 1)

func topDown(_ start: Int, _ end: Int) -&amp;gt; Int {
    if start &amp;gt;= end {
        return 0
    }
    
    if dp[start][end] != -1 {
        return dp[start][end]
    }
    
    if arr[start] == arr[end] { // 시작과 끝 값이 같을 때,
        dp[start][end] = topDown(start + 1, end - 1)
    }
    else { // 다를다면,
        dp[start][end] = min(topDown(start + 1, end), topDown(start, end - 1)) + 1 // min(우측에 좌측값을 넣을 때, 좌측에 우측값을 넣을 때) + 1
    }
    
    
    return dp[start][end]
}

let answer = topDown(1, N)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1695번(DP - 반복문)
let N = Int(readLine()!)!
var arr: [Int] = [-1] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
//var rArr = arr.reversed() // arr을 뒤집음.

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)

for i in 1...N { // 뒤부터 돈 것(rArr)과,
    for j in 1...N { // 앞부터 돈 것(arr)에서,
        if arr[N + 1 - i] == arr[j] { // 숫자가 같다면,
            dp[i][j] = dp[i - 1][j - 1] + 1
        }
        else { // 숫자가 다르다면,
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) // 이전 행의 같은 열, 같은 행의 이전 열 중 큰 값을 저장.
        }
    }
}

print(N - dp[N][N])&lt;/code&gt;&lt;/pre&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;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 21923번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 느낀점, 설명설명~~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import Foundation&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>DP 문제풀이</category>
      <category>Dynamic Programming 스위프트</category>
      <category>swift algorithm</category>
      <category>Swift DP</category>
      <category>Swift DP PS</category>
      <category>백준 DP 스위프트 문제풀이</category>
      <category>백준 Swift</category>
      <category>백준 문제풀이 Swift</category>
      <category>스위프트 백준 DP</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/206</guid>
      <comments>https://developer-p.tistory.com/206#entry206comment</comments>
      <pubDate>Fri, 3 Jun 2022 22:14:34 +0900</pubDate>
    </item>
    <item>
      <title>DP(2-1) 문제 풀이 모음 | 백준 Swift 15724번, 9084번, 12865번, 9251번, 2225번, 5557번, 1965번, 12015번, 12738번, 14002번, 14003번, 2631번, 2565번, 2624번, 14567번, 17485번, 21941번, 18427번, 1915번, 2228번, 2758번, 2073번</title>
      <link>https://developer-p.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP1과 DP2 중 DP2-1부분 입니다. (DP2-2은 &lt;a href=&quot;https://developer-p.tistory.com/206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt; 확인할 수 있습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천문제 번호 모음은 &lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt; 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;2566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3770d/btrBmuylS6W/dXsQh4sWk0IXkBVOBI9Fc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3770d/btrBmuylS6W/dXsQh4sWk0IXkBVOBI9Fc1/img.png&quot; data-alt=&quot;DP2 추천문제 번호 모음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3770d/btrBmuylS6W/dXsQh4sWk0IXkBVOBI9Fc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3770d%2FbtrBmuylS6W%2FdXsQh4sWk0IXkBVOBI9Fc1%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;630&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;2566&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DP2 추천문제 번호 모음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.06업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.12 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.13 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.16 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.21 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.23 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.25 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.26 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.29 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.31 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.01 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.02 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.06.03 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651810010925&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UfAFL/hyOhDIA13t/n1UpyRLGkw5p33pjXKhi80/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UfAFL/hyOhDIA13t/n1UpyRLGkw5p33pjXKhi80/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/201&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651810090173&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번, &quot; data-og-description=&quot;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/201&quot; data-og-url=&quot;https://developer-p.tistory.com/201&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/noGlZ/hyOhze77HK/XIt7Nvou5G5rD6nSD8QuB1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/X7zGB/hyOhE8ArKM/h2BjGF8Xpr154WVJnc7Uh1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/eNJOw/hyOhDBQXuz/hdYkEMevSKJutZ0KPkTPx1/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/201&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/noGlZ/hyOhze77HK/XIt7Nvou5G5rD6nSD8QuB1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/X7zGB/hyOhE8ArKM/h2BjGF8Xpr154WVJnc7Uh1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/eNJOw/hyOhDBQXuz/hdYkEMevSKJutZ0KPkTPx1/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번,&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/203&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651810112664&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&quot; data-og-description=&quot;백준 Swift 2293번 Eng 백준 Swift 2293번 {&amp;quot;mean&amp;quot;:[&amp;quot; swift 미국∙영국[swɪft] (일진행 등이) 신속한[재빠른] (움직임이) 빠른[날랜] 칼새 &amp;quot;,&amp;quot; 번 (횟수, 차례, 경우) time, occasion; (시도) try (번호) number..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/203&quot; data-og-url=&quot;https://developer-p.tistory.com/203&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zC4BH/hyOhtsr5li/wDWdixFKTKtx1JEo2zqLDk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DYiit/hyOhuSpkpb/flG9nV6uVVvHx3ffRhktu1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/dm0Rzm/hyOhqCtTrU/kGpqCvQDpWhGXZRZruvPV1/img.jpg?width=1501&amp;amp;height=4032&amp;amp;face=0_0_1501_4032&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/203&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zC4BH/hyOhtsr5li/wDWdixFKTKtx1JEo2zqLDk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DYiit/hyOhuSpkpb/flG9nV6uVVvHx3ffRhktu1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/dm0Rzm/hyOhqCtTrU/kGpqCvQDpWhGXZRZruvPV1/img.jpg?width=1501&amp;amp;height=4032&amp;amp;face=0_0_1501_4032');&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift 2293번 Eng 백준 Swift 2293번 {&quot;mean&quot;:[&quot; swift 미국∙영국[swɪft] (일진행 등이) 신속한[재빠른] (움직임이) 빠른[날랜] 칼새 &quot;,&quot; 번 (횟수, 차례, 경우) time, occasion; (시도) try (번호) number..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 15724번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 비슷한 문제를 풀었어서 어렵지 않았다. &lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 11660번&lt;/a&gt;을 먼저 풀고 오면 쉽다. (풀이도 거의 같다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;순서 1.&lt;/b&gt; 2차원배열의 누적합을 구해 dp배열에 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;순서 2.&lt;/b&gt; 그다음 원하는 직사각형의 범위에 해당하는 값을 구하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2972&quot; data-origin-height=&quot;3031&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmX3Op/btrBkDQx5b7/T8PHrFDiIlJ7UDYSlQ0sg0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmX3Op/btrBkDQx5b7/T8PHrFDiIlJ7UDYSlQ0sg0/img.jpg&quot; data-alt=&quot;백준 Swift 15724번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmX3Op/btrBkDQx5b7/T8PHrFDiIlJ7UDYSlQ0sg0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmX3Op%2FbtrBkDQx5b7%2FT8PHrFDiIlJ7UDYSlQ0sg0%2Fimg.jpg&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;400&quot; height=&quot;408&quot; data-origin-width=&quot;2972&quot; data-origin-height=&quot;3031&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 15724번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;순서2&lt;/b&gt;가 이해가 안된다면 아래 그림을 봐보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예를 들어 (2,2) ~ (3,4)를 구해야 한다. 누적합dp배열을 이용해 어떻게 식을 짜면 될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;D - A - B + C일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, &lt;b&gt;전체 D에서 A와 B를 빼주고, 중복으로 뺀 C를 더해주면 흰색부분(구간합)을 구할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이를 식으로 쓰면 dp[3][4] - dp[3][1] - dp[1][4] + dp[1][1]이다.&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;1280&quot; data-origin-height=&quot;1014&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c98JAb/btrBmwb0MGq/2qGjGKcCHMWWBxFroip1KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c98JAb/btrBmwb0MGq/2qGjGKcCHMWWBxFroip1KK/img.png&quot; data-alt=&quot;dp배열 누적합 - (2, 2) ~ (3, 4)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c98JAb/btrBmwb0MGq/2qGjGKcCHMWWBxFroip1KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc98JAb%2FbtrBmwb0MGq%2F2qGjGKcCHMWWBxFroip1KK%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;400&quot; height=&quot;317&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1014&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dp배열 누적합 - (2, 2) ~ (3, 4)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2470&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVJ60a/btrBkDJMlg7/zJOrKmtmBdq2eW4RTx7E50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVJ60a/btrBkDJMlg7/zJOrKmtmBdq2eW4RTx7E50/img.png&quot; data-alt=&quot;백준 Swift 15724번 시간.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVJ60a/btrBkDJMlg7/zJOrKmtmBdq2eW4RTx7E50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVJ60a%2FbtrBkDJMlg7%2FzJOrKmtmBdq2eW4RTx7E50%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;57&quot; data-origin-width=&quot;2470&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 15724번 시간.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문(시간 개선 - 2차원 배열 누적합)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15724번(DP - 반복문 : 시간 개선(2차원배열 누적합))
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var arr: [[Int]] = Array(repeating: [], count: N + 1)

for i in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr[i] = [0] + input
}
arr[0] = Array(repeating: 0, count: M + 1)

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: M + 1), count: N + 1)
for i in 1...N {
    for j in 1...M {
        dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + arr[i][j]
    }
}

let K = Int(readLine()!)!
for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x1, y1, x2, y2) = (input[0], input[1], input[2], input[3])

    let sum: Int = dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1]
    print(sum)
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문(맞긴 맞으나 오래걸리는 코드 - 1차원배열의 누적합을 누적해서 더함.)&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1491&quot; data-origin-height=&quot;3642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTAgDZ/btrBlux8Xzh/fqaIioKhpTKqKYBCFCxKhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTAgDZ/btrBlux8Xzh/fqaIioKhpTKqKYBCFCxKhK/img.jpg&quot; data-alt=&quot;백준 Swift 15724번 처음 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTAgDZ/btrBlux8Xzh/fqaIioKhpTKqKYBCFCxKhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTAgDZ%2FbtrBlux8Xzh%2FfqaIioKhpTKqKYBCFCxKhK%2Fimg.jpg&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;400&quot; height=&quot;977&quot; data-origin-width=&quot;1491&quot; data-origin-height=&quot;3642&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 15724번 처음 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1651809831810&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15724번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var arr: [[Int]] = Array(repeating: [], count: N + 1)

for i in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr[i] = [0] + input
}
arr[0] = Array(repeating: 0, count: M + 1)

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: M + 1), count: N + 1)
for i in 1...N {
    for j in 1...M {
        dp[i][j] = dp[i][j - 1] + arr[i][j]
    }
}

let K = Int(readLine()!)!
for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x1, y1, x2, y2) = (input[0], input[1], input[2], input[3])
    
    var sum: Int = 0
    for x in x1...x2 {
        sum += dp[x][y2] - dp[x][y1 - 1]
    }
    print(sum)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 9084번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백준 2293번 문제와 거의 유사하다. (백준 2293번 Swift 풀이 : &lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/203&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음엔 2차원 배열로 풀고 싶어서 그렇게 작성했는데 50%에서 계속 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2482&quot; data-origin-height=&quot;848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MzrPP/btrBWQVjxNf/RpnbBvkJfkPNykHK4rXxBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MzrPP/btrBWQVjxNf/RpnbBvkJfkPNykHK4rXxBK/img.png&quot; data-alt=&quot;백준 Swift 9084번 2차원 배열 풀이 도전.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MzrPP/btrBWQVjxNf/RpnbBvkJfkPNykHK4rXxBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMzrPP%2FbtrBWQVjxNf%2FRpnbBvkJfkPNykHK4rXxBK%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;171&quot; data-origin-width=&quot;2482&quot; data-origin-height=&quot;848&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9084번 2차원 배열 풀이 도전.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;질문도 남겨놨는데, 추후에 답변이 달린다면 다시 시도해봐야겠다.(&lt;a href=&quot;https://www.acmicpc.net/board/view/89943&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/89943&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2970&quot; data-origin-height=&quot;2924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUw5se/btrBWPPMYC4/KSsyVRxz58LVRmKm1JDv10/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUw5se/btrBWPPMYC4/KSsyVRxz58LVRmKm1JDv10/img.jpg&quot; data-alt=&quot;백준 Swift 9084번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUw5se/btrBWPPMYC4/KSsyVRxz58LVRmKm1JDv10/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUw5se%2FbtrBWPPMYC4%2FKSsyVRxz58LVRmKm1JDv10%2Fimg.jpg&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;400&quot; height=&quot;394&quot; data-origin-width=&quot;2970&quot; data-origin-height=&quot;2924&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9084번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[0] 값을 1로 선언해주는게 핵심이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음 안쪽 for문을 돌릴 때 &lt;b&gt;coin...M&lt;/b&gt;이 아니라 &lt;b&gt;굳이 stride(from: coin, through: M, by: 1)&lt;/b&gt;로 한 게 눈에 띌 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;swift&lt;/b&gt;에서 for문을 돌릴 때 lowerBound가 upperBound보다 크게 되면 에러가 발생한다. 아래 이미지 처럼 말이다.&lt;/p&gt;
&lt;pre id=&quot;code_1652341954345&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in 8...2 {
    print(i)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4488&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deUEXi/btrBXoKPWv1/mlHfs2GmLvAzbHzRyZhi21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deUEXi/btrBXoKPWv1/mlHfs2GmLvAzbHzRyZhi21/img.png&quot; data-alt=&quot;for문 range 에러.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deUEXi/btrBXoKPWv1/mlHfs2GmLvAzbHzRyZhi21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeUEXi%2FbtrBXoKPWv1%2FmlHfs2GmLvAzbHzRyZhi21%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;4488&quot; height=&quot;576&quot; data-origin-width=&quot;4488&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;for문 range 에러.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 &lt;b&gt;stride를 쓰면 Range 에러 나는 걸 방지할 수 있다.&lt;/b&gt; 범위가 안맞게 되면 에러가 발생하는게 아니라 패스하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제에서 주어지는 coin이, 만들어야 하는 금액M보다 큰 경우를 방지하기 위해 이렇게 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;stride를 안쓰고 작성하면 런타임 에러가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2484&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTTuwQ/btrBZyr7NH8/lpREmnxx4JOHkItbcOzEJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTTuwQ/btrBZyr7NH8/lpREmnxx4JOHkItbcOzEJ0/img.png&quot; data-alt=&quot;백준 Swift 9084번 Range 에러.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTTuwQ/btrBZyr7NH8/lpREmnxx4JOHkItbcOzEJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTTuwQ%2FbtrBZyr7NH8%2FlpREmnxx4JOHkItbcOzEJ0%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;2484&quot; height=&quot;220&quot; data-origin-width=&quot;2484&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9084번 Range 에러.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;10000&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;9999&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9084번(DP - 반복문)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let _ = Int(readLine()!)! // N
    let coins: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let M = Int(readLine()!)!
    var dp: [Int] = [1] + Array(repeating: 0, count: M)

    for coin in coins {
        for i in stride(from: coin, through: M, by: 1) {
            dp[i] = dp[i] + dp[i - coin]
        }
//        for i in coin...M {
//            dp[i] = dp[i] + dp[i - coin]
//        }
    }

    print(dp[M])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 12865번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음에 풀었을 때, 위에서 푼 9084번 문제와 풀이가 같다고 생각했다. 주어진 TC도 통과했다. 그래서 맞는줄 알았다. 근데 틀렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;왜 틀렸는지 모르겠어서 고민했는데, 반례를 보고 내가 짠 코드가 왜 틀렸는지 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;u&gt;&lt;b&gt;물건이 1개씩만 있다는 사실이다.&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;(9084번 문제는 코인이 무제한이였다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;방금 문장이 굉장히 중요한 힌트다. 이전의 값이 필요하고, 그럼 자연스레 dp배열이 2차원이어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2872&quot; data-origin-height=&quot;4011&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elF3W5/btrB32AHG0B/IMg7cskJ2yFp7VnF00FalK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elF3W5/btrB32AHG0B/IMg7cskJ2yFp7VnF00FalK/img.jpg&quot; data-alt=&quot;백준 Swift 12865번 고민 1.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elF3W5/btrB32AHG0B/IMg7cskJ2yFp7VnF00FalK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelF3W5%2FbtrB32AHG0B%2FIMg7cskJ2yFp7VnF00FalK%2Fimg.jpg&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;400&quot; height=&quot;559&quot; data-origin-width=&quot;2872&quot; data-origin-height=&quot;4011&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 12865번 고민 1.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음, 반복문에서 bags[i].weight...K만큼은 점화식을 적용해야 하고, 그 외 부분은 dp[i][j] = dp[i - 1][j]로 신경써줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 종이에는 적혀 있지 않고, 코드를 보면 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2847&quot; data-origin-height=&quot;2870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qG2DK/btrB0DhL94K/KIzuWBihkeI5ZnW1oRph9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qG2DK/btrB0DhL94K/KIzuWBihkeI5ZnW1oRph9k/img.jpg&quot; data-alt=&quot;백준 Swift 12865번 고민 2.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qG2DK/btrB0DhL94K/KIzuWBihkeI5ZnW1oRph9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqG2DK%2FbtrB0DhL94K%2FKIzuWBihkeI5ZnW1oRph9k%2Fimg.jpg&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;400&quot; height=&quot;403&quot; data-origin-width=&quot;2847&quot; data-origin-height=&quot;2870&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 12865번 고민 2.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ans =&amp;gt; 9가 나와야 함.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://cocoon1787.tistory.com/206&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cocoon1787.tistory.com/206&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 12865번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var bags: [(weight: Int, value: Int)] = [(0, 0)] // 인덱스0의 값은 0으로 공간메꾸기.
for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (W, V) = (input[0], input[1])
    bags.append((W, V))
}

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: K + 1), count: N + 1)

for i in 1...N {
//    for j in stride(from: bags[i].weight, through: K, by: 1) { // 이렇게만 하면, 다음 행의 나머지 부분들의 값이 계속 유지되는게 아니라 0이 됨.
//        dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - bags[i].weight] + bags[i].value)
//    }
    for j in 1...K { // 1부터 K까지 돌면서,
        if j &amp;gt;= bags[i].weight { // j - bags[i].weight가 인덱스의 범위를 벗어나지 않으면,
            dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - bags[i].weight] + bags[i].value)
        }
        else { // j - bags[i].weight가 인덱스의 범위를 벗어나면,
            dp[i][j] = dp[i - 1][j]
        }
    }
}
print(dp[N][K])&lt;/code&gt;&lt;/pre&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;백준 Swift 9251번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LCS문제를 이전에 풀어보긴 했었는데, 그 때 LCS 유형을 다시 풀어본다 했는데 역시나 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아예 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;각 문자열로 이루어진 행렬을 만들고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;문자가 같을 땐&lt;/b&gt; 좌상측값 + 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;문자가 다를 땐&lt;/b&gt; max(좌측값, 우측값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;점화식은 아래 사진에서 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2557&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQnhbg/btrB6QfBMse/EFC2UKK5B1wR4qty8bv1V1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQnhbg/btrB6QfBMse/EFC2UKK5B1wR4qty8bv1V1/img.jpg&quot; data-alt=&quot;백준 Swift 9251번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQnhbg/btrB6QfBMse/EFC2UKK5B1wR4qty8bv1V1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQnhbg%2FbtrB6QfBMse%2FEFC2UKK5B1wR4qty8bv1V1%2Fimg.jpg&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;400&quot; height=&quot;631&quot; data-origin-width=&quot;2557&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9251번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://st-lab.tistory.com/139&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://st-lab.tistory.com/139&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9251번(DP - 반복문)
let str1: [String] = [&quot;&quot;] + readLine()!.map{String($0)} // 하단 반복문에서 인덱스 맞추기 위해, 미리 맨 앞에 &quot;&quot; 붙임.
let str2: [String] = [&quot;&quot;] + readLine()!.map{String($0)}
let (len1, len2) = (str1.count - 1, str2.count - 1)
var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: len2 + 1), count: len1 + 1)

for i in 1...len1 {
    for j in 1...len2 {
        if str1[i] == str2[j] { // 문자가 같을 땐,
            dp[i][j] = dp[i - 1][j - 1] + 1
        }
        else { // 문자가 다를 땐,
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
        }
    }
}
print(dp[len1][len2])&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2225번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음에 보고 중복조합을 사용하려 했다. 근데 factorial이 숫자가 커지면서 불가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사진 속 좌측 하단의 1번을 보자. (참고 자료 : &lt;a href=&quot;https://mygumi.tistory.com/135&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mygumi.tistory.com/135&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp[K]N]의 뜻&lt;/b&gt;은 무엇인가? -&amp;gt; (0~N의 숫자)&lt;b&gt;K개&lt;/b&gt;를 더한 &lt;b&gt;합이 N&lt;/b&gt;이 되는 &lt;b&gt;경우의 수&lt;/b&gt;다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp[K][N]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;K개의 숫자들 중 가장 마지막의 수를 L이라고 한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;K - 1개의 숫자들의 합은 N - L이 된다. =&amp;gt; &lt;u&gt;&lt;b&gt;dp[K - 1][N - L]&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp[K - 1][N - L]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;K-1개의 숫자들 중 가장 마지막의 수를 L'이라고 한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;K-2개의 숫자들의 합은 N - L - L'이 된다. =&amp;gt; &lt;u&gt;&lt;b&gt;dp[K - 2][N- L - L']&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이런 식으로, &lt;b&gt;dp[K][N]&lt;/b&gt;은 &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;Sigma;&lt;/span&gt;dp[K-1][N-L] (0 &amp;lt;= L &amp;lt;= N)&lt;/b&gt;&lt;/span&gt; 이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2878&quot; data-origin-height=&quot;3859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqQES4/btrB6JPQsdi/Q6YRiSB3r2sMli56ty3kkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqQES4/btrB6JPQsdi/Q6YRiSB3r2sMli56ty3kkk/img.jpg&quot; data-alt=&quot;백준 Swift 2225번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqQES4/btrB6JPQsdi/Q6YRiSB3r2sMli56ty3kkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqQES4%2FbtrB6JPQsdi%2FQ6YRiSB3r2sMli56ty3kkk%2Fimg.jpg&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;400&quot; height=&quot;536&quot; data-origin-width=&quot;2878&quot; data-origin-height=&quot;3859&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2225번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사진 속 우측 상단의 2번을 보면, (참고 자료 : &lt;a href=&quot;https://haesoo9410.tistory.com/249&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haesoo9410.tistory.com/249&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;낮은 숫자부터 나열하다보면 규칙을 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt;&lt;u&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; dp[i][j] = dp[i - 1][j] + dp[i][j - 1]&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문(1번)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1652685230228&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2225번(DP - 반복문(1))
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: K + 1)

for i in 0...N {
    dp[1][i] = 1
}

for i in 1...K {
    for j in 0...N {
        for l in 0...j {
            dp[i][j] += dp[i - 1][j - l]
            dp[i][j] %= 1000000000
        }
    }
}

print(dp[K][N])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문(2번) - 시간 단축&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2225번(DP - 반복문(2) : 시간 개선)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: K + 1)

for i in 1...K {
    dp[i][0] = 1
}

for i in 1...K {
    for j in 1...N {
        dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
        dp[i][j] %= 1000000000
    }
}

print(dp[K][N])&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 5557번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp문제일 거라고 생각하고 표를 그리고 규칙을 찾으려고 했는데 모르겠어서 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[i][j]의 의미는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;arr의 i번째 인덱스&lt;/b&gt;까지에서, &lt;b&gt;j라는 결과값&lt;/b&gt;을 갖는 &lt;b&gt;경우의 수&lt;/b&gt;를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서 dp의 i는 0부터 N - 1까지 있으면 된다. (중요하진 않아서 난 그냥 N으로 했다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서 dp의 j는 0 &amp;lt;= j &amp;lt;= 20이 된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;초기값&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[0]의 arr[0]은 반드시 식에 포함된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, &lt;b&gt;dp[0][arr[0]] = 1&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 인덱스(i - 1)의 값이 &lt;b&gt;j에서 존재&lt;/b&gt;한다면 -&amp;gt; &lt;b&gt;j라는 값을 만들 수 있다는 뜻&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;이전 인덱스(i - 1)의 값이 j에서 존재할 때,&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;더할 때(+)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j라는 값에서, 이번 인덱스(i)의 값을 더해도 20이 넘지 않는 경우에만 경우의 수를 더해줄 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;뺄 때(-)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j라는 값에서, 이번 인덱스(i)의 값을 빼도 음수가 되지 않는 경우에만 경우의 수를 더해줄 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://baby-ohgu.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://baby-ohgu.tistory.com/23&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5557번(DP - 반복문)
let N = Int(readLine()!)!
var arr = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: 21), count: N)

dp[0][arr[0]] = 1 // 가장 첫번째 숫자는 무조건 0~20에 포함됨.

for i in 1...N-2 {
    for j in 0...20 {
        if dp[i - 1][j] &amp;gt;= 1 {
            if j + arr[i] &amp;lt;= 20 { // 더했을 때, 20이하여야 가능.
                dp[i][j + arr[i]] += dp[i - 1][j]
            }
            
            if j - arr[i] &amp;gt;= 0 { // 뺐을 때, 0이상이어야 가능.
                dp[i][j - arr[i]] += dp[i - 1][j]
            }
        }
    }
}

print(dp[N - 2][arr[N - 1]])&lt;/code&gt;&lt;/pre&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;백준 Swift 1965번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LIS관련 문제다. LIS관련된 문제를 최대한 많이 풀어보면서 공부했다. 누가 이런식으로 LIS활용 문제 번호 모음집이 있으면 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제는 LIS에 대한 언급이 없지만, 결론적으로 백준 11053번 문제와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;LIS를 2중반복문으로 풀면 되는 간단한 문제다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1965번(DP - 반복문 / LIS - 이중반복문)
let n = Int(readLine()!)!
var arr: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp = Array(repeating: 1, count: n)

for i in 1..&amp;lt;n {
    for j in 0..&amp;lt;i {
        if arr[j] &amp;lt; arr[i] {
            dp[i] = max(dp[i], dp[j] + 1)
        }
    }
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 12015번, 12738번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백준 2631번을 풀다가, LIS에 대해 모른다는 걸 느껴서 LIS를 공부하고 풀었다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;LIS&lt;/b&gt;를 dp로 푸는 &lt;b&gt;방법&lt;/b&gt;은 &lt;b&gt;2가지&lt;/b&gt;가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;방법 1 : 이중 for문&lt;/b&gt; - O(N^2) / 관련 문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/11053&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11053&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;방법 2 : 이분탐색 활용&lt;/b&gt; - O(NlogN) / 관련 문제 : &lt;a href=&quot;https://www.acmicpc.net/problem/12015&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/12015&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;12015번은 시간초과가 나서 방법 1로는 못푼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LIS를 풀 때 방법2의 존재에 대해서 알고는 있었다. 미루다 오늘에서야 공부했다..ㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;[풀이 방법]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. dp배열을 선언한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;단, dp배열은 부분 수열의 길이를 저장하는 게 아니라, dp배열 자체가 가장 긴 증가하는 부분 수열이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;여기서 주의할 점은, &lt;b&gt;dp배열이 진짜 가장 긴 증가하는 부분 수열은 아니라는 점&lt;/b&gt;이다. &lt;u&gt;&lt;b&gt;길이만 같다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 사진을 보면 이해가 쉽다. [5, 6, 7, 1]의 LIS는 [5, 6, 7]일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 이분탐색을 통해 풀면 나오는 값은 [1, 6, 7]이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;나도 이렇게 풀면, &lt;b&gt;진짜 LIS는 아닌 거 같은데?&lt;/b&gt; 라는 생각으로 고민하다가 알게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;이와 관련해선 추후에 백준 14002번, 14003번 문제를 풀면 알 수 있을 것이다. (&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://yabmoons.tistory.com/561&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yabmoons.tistory.com/561&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;536&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v2DkA/btrCHCCIEjG/MQu8f4WQkfA7rus4ACzx8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v2DkA/btrCHCCIEjG/MQu8f4WQkfA7rus4ACzx8K/img.png&quot; data-alt=&quot;dp 배열 설명 - 진짜 LIS는 아니다?!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v2DkA/btrCHCCIEjG/MQu8f4WQkfA7rus4ACzx8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv2DkA%2FbtrCHCCIEjG%2FMQu8f4WQkfA7rus4ACzx8K%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;400&quot; height=&quot;207&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dp 배열 설명 - 진짜 LIS는 아니다?!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. arr을 돌면서, dp의 가장 마지막 배열과 비교한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2&lt;u&gt;-1. 더 큰 수가 들어 온다면, (arr[i] &amp;gt; dp.last!)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;dp의 끝부분에 이어 붙인다.&amp;nbsp;&lt;/b&gt;(dp.append(arr[i]))&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;2-2. 작거나 같은 수가 들어온다면, (else)&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;이분탐색&lt;/b&gt;을 통해 &lt;b&gt;arr[i]가 들어가야 하는 위치&lt;/b&gt;에 대해 찾아낸 뒤, &lt;b&gt;기존의 값과 교체&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;더 긴 수열을 만드는 데 있어서, &lt;b&gt;최대한 작은 수로 교체하는 게 이득이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예를 들어, dp 배열이 [3, 7, 12]와 [3, 7, 8]이라고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;근데 뒤에 올 숫자가 만약 10이라면, 후자만 더 긴 LIS를 만들 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. &lt;b&gt;dp의 길이&lt;/b&gt;를 &lt;b&gt;출력&lt;/b&gt;하면 &lt;b&gt;끝&lt;/b&gt;이다. (dp.count)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ttl-blog.tistory.com/486&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ttl-blog.tistory.com/486&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 12015번&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 12015번(DP - 반복문) / LIS(이분탐색)
let N = Int(readLine()!)!
var arr: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [Int] = [arr[0]] // 이번 dp배열에선 길이를 저장하는 게 아니라, dp 전체가 가장 긴 증가하는 부분수열이 된다.(길이는 맞지만, 실제의 LIS와는 다르다.)

for i in 1..&amp;lt;N {
    if arr[i] &amp;gt; dp.last! { // dp배열의 가장 마지막에 있는 수보다 더 큰 수가 들어온다면,
        dp.append(arr[i]) // 그냥 맨 뒤에 이어 붙이면 됨.
    }
    else { // 하지만 그렇지 않다면, 이분탐색을 통해서 위치를 찾아서 넣어야 함.
        let index = binarySearch(arr[i])
        dp[index] = arr[i]
    }
}
print(dp.count)

func binarySearch(_ target: Int) -&amp;gt; Int { // 이분탐색
    var (low, high) = (0, dp.count - 1)
    
    while low &amp;lt;= high {
        let middle = (low + high) / 2
        
        if dp[middle] &amp;gt;= target {
            high = middle - 1
        }
        else {
            low = middle + 1
        }
    }
    
    return low
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 12738번&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653144538613&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 12738번(DP - 반복문 / LIS - 이분탐색)
let N = Int(readLine()!)!
let arr: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [Int] = [arr[0]]

for i in 1..&amp;lt;N {
    if arr[i] &amp;gt; dp.last! { // 더 크면 그냥 뒤에 이어 붙이면 됨.
        dp.append(arr[i])
    }
    else {
        let index = binarySearch(arr[i])
        dp[index] = arr[i]
    }
}
print(dp.count)

func binarySearch(_ target: Int) -&amp;gt; Int {
    var (low, high) = (0, dp.count - 1)
    
    while low &amp;lt;= high {
        let middle = (low + high) / 2
        
        if dp[middle] &amp;gt;= target {
            high = middle - 1
        }
        else {
            low = middle + 1
        }
    }
    return low
}&lt;/code&gt;&lt;/pre&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;백준 Swift 14002번, 14003번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[백준 14002번 풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;14002번은 반복문을 사용했다. 길이를 구하는 풀이는 11053번 풀이와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음 각각의 인덱스에서 나올 수 있는 LIS의 길이를 담고 있는 dp배열을 보고, 어떻게 LIS배열을 구해야 할지 생각해야 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 아이디어를, 전에 이분탐색풀이(12015번)할 때 LIS배열이 이상하게 나와서, 내 생각(이상하게 나오는)이 맞는지 찾아보다가 스포? 당했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;핵심 :&lt;/b&gt; &lt;b&gt;dp배열의 뒤에서부터 반복문을 돌린다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열의 뒤에서부터 돌면서, dp 중&amp;nbsp;&lt;b&gt;가장 큰 수&lt;/b&gt;를 &lt;b&gt;기준&lt;/b&gt;으로 잡고, &lt;b&gt;기준값을 1씩 줄이면서&lt;/b&gt; 같은 값이 나올 때 &lt;b&gt;answer 배열에 넣으면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;끝까지 다 돌았다면, answer배열을 &lt;b&gt;뒤집어서 출력&lt;/b&gt;하면 정답이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;[백준 14003번 풀이]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LIS 문제를 풀면서, 관련 문제를 끝까지 푸는 게 좋을 거 같았다. 플래티넘 문제는 처음 풀어봤다. &lt;s&gt;(무섭ㅋㅋ)&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;14002번(아이디어)과 12015번(이분탐색)을 활용 &lt;b&gt;+&amp;alpha;&lt;/b&gt; 해서 풀면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;N의 범위가 매우 크기 때문에 &lt;b&gt;이분탐색&lt;/b&gt;을 &lt;b&gt;활용&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;핵심 : arr의 값이 dp배열에 들어갈 때, 어디에 들어가는지 위치를 저장하는 indexArray를 선언한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;var indexArray: [Int] = [0] // &lt;b&gt;dp배열에서 arr의 각 값이 몇번째 인덱스에 위치하는지 저장하는 배열.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;indexArray배열의 뒤에서부터 돌면서, dp.count - 1를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기준&lt;/b&gt;으로 잡고, (인덱스이기 때문에 dp의 전체 갯수 - 1을 해야 끝부터 확인할 수 있다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;기준값을 1씩 줄이면서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 값이 나올 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;answer 배열에 넣으면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;끝까지 다 돌았다면, answer배열을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;뒤집어서 출력&lt;/b&gt;하면 정답이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4 / 플래티넘 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;14003번 참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://yabmoons.tistory.com/561&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yabmoons.tistory.com/561&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 14002번&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14002번(DP - 반복문 / LIS - 이중반복문)
let N = Int(readLine()!)!
var arr: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [Int] = Array(repeating: 1, count: N)

for i in 1..&amp;lt;N {
    for j in 0..&amp;lt;i {
        if arr[j] &amp;lt; arr[i] {
            dp[i] = max(dp[i], dp[j] + 1)
        }
    }
}

var standard: Int = dp.max()!
print(standard) // LIS의 길이 출력.
var answer: [Int] = []

for i in stride(from: N - 1, through: 0, by: -1) { // dp를 뒤에서부터 돌면서,
    if dp[i] == standard { // 기준 : 최대값부터 1까지
        answer.append(arr[i])
        standard -= 1
    }
}

answer.reverse()
print(answer.map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 14003번&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653286868839&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14003번(DP - 반복문 / LIS - 이분탐색)
let N = Int(readLine()!)!
var arr: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp: [Int] = [arr[0]]
var indexArray: [Int] = [0] // dp배열에서 arr의 각 값이 몇번째 인덱스에 위치하는지 저장하는 배열.

for i in 1..&amp;lt;N {
    if arr[i] &amp;gt; dp.last! { // dp의 마지막 값보다 크면, 확인할 필요 없이 이어 붙이면 됨.
        dp.append(arr[i])
        indexArray.append(dp.count - 1) // dp배열에서의 위치(인덱스) 저장.
    }
    else { // dp의 마지막 값보다 크지 않다면, 이분탐색.
        let index = binarySearch(arr[i])
        dp[index] = arr[i] // 값 교체.
        indexArray.append(index) // dp배열에서의 위치(인덱스) 저장.
    }
}

print(dp.count) // LIS의 길이 출력.

var standard: Int = dp.count - 1 // 기준.
var answer: [Int] = []

for i in stride(from: N - 1, through: 0, by: -1) { // indexArray를 뒤에서부터 돌면서,
    if indexArray[i] == standard { // 기준값과 같다면,
        answer.append(arr[i])
        standard -= 1 // 기준값 -1씩.
    }
}

answer.reverse()
print(answer.map{String($0)}.joined(separator: &quot; &quot;))


func binarySearch(_ targetNum: Int) -&amp;gt; Int { // 이분탐색
    var (low, high) = (0, dp.count - 1)
    
    while low &amp;lt;= high {
        let middle = (low + high) / 2
        
        if dp[middle] &amp;gt;= targetNum {
            high = middle - 1
        }
        else {
            low = middle + 1
        }
    }
    return low
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2631번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제가 &lt;b&gt;LIS&lt;/b&gt;를 전부 &lt;b&gt;공부하게 만든 이유&lt;/b&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(LIS에 대해선 잘 모르고) LCS만 알고 이 문제를 접근 했을 때, LCS로 풀긴 풀었다. &lt;span style=&quot;color: #666666;&quot;&gt;아래 더보기를 누르면 더 자세한 스토리를 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2631번 - LCS 질문 / 스토리&lt;/h4&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;9687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgXr4k/btrC2KZoQr9/iBPkgSEALjGULlmX8xErF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgXr4k/btrC2KZoQr9/iBPkgSEALjGULlmX8xErF0/img.jpg&quot; data-alt=&quot;백준 Swift 2631번 - LCS 질문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgXr4k/btrC2KZoQr9/iBPkgSEALjGULlmX8xErF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgXr4k%2FbtrC2KZoQr9%2FiBPkgSEALjGULlmX8xErF0%2Fimg.jpg&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;400&quot; height=&quot;3312&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;9687&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2631번 - LCS 질문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;LIS 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. LIS의 길이를 구한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-1. LIS의 길이를 구할 때 &lt;u&gt;&lt;b&gt;이중반복문&lt;/b&gt;&lt;/u&gt;(O(N^2)) or &lt;u&gt;&lt;b&gt;이분탐색&lt;/b&gt;&lt;/u&gt;(O(NlogN))을 쓸 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제에선 N의 범위가 작기 때문에, 간단하게 &lt;u&gt;&lt;b&gt;이중반복문&lt;/b&gt;&lt;/u&gt;으로 구현하면 된다. (&lt;b&gt;하단 코드에 두 버전 모두 올렸습니다.&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. answer = &lt;u&gt;N - LIS&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우린 최종적으로 &lt;b&gt;증가하는 순서대로&lt;/b&gt; 아이들을 배치해야 한다. 테스트케이스를 보면 알 수 있듯이, 기존에 주어지는 순서에서 이미 오름차순인 아이들의 상대위치는 변하지 않는다. (주어진 TC에서 &lt;b&gt;3, 5, 6&lt;/b&gt;의 상대적인 순서는 그대로다. 사이에 어떤 수가 끼긴 해도, 3이 제일 앞이고, 5가 중간이고, 6이 마지막이라는 뜻이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LIS는 증가하는 부분 수열이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;이미 올바르게 서 있는 아이들의 수를 최대(= LIS)&lt;/b&gt;&lt;/u&gt;로 해야 &lt;u&gt;&lt;b&gt;움직이는 수가 최소&lt;/b&gt;&lt;/u&gt;가 된다. =&amp;gt; 즉, &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;N - LIS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 :&amp;nbsp;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.acmicpc.net/board/view/4872&quot;&gt;https://www.acmicpc.net/board/view/4872&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 이중반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2631번(DP - 반복문 / LIS - 이중반복문)
let N = Int(readLine()!)!
var arr: [Int] = []
for _ in 0..&amp;lt;N {
    arr.append(Int(readLine()!)!)
}

var dp = Array(repeating: 1, count: N) // LIS를 저장하는 dp배열.

for i in 1..&amp;lt;N {
    for j in 0..&amp;lt;i {
        if arr[j] &amp;lt; arr[i] { // 증가하는 배열일 때,
            dp[i] = max(dp[i], dp[j] + 1)
        }
    }
}

let answer: Int = N - dp.max()! // N - LIS
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문 - 이분탐색&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653373363237&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2631번(DP - 반복문 / LIS - 이분탐색)
let N = Int(readLine()!)!
var arr: [Int] = []
for _ in 0..&amp;lt;N {
    arr.append(Int(readLine()!)!)
}

var dp: [Int] = [arr[0]]

for i in 1..&amp;lt;N {
    if arr[i] &amp;gt; dp.last! { // dp의 가장 마지막에 있는 값보다 클 땐,
        dp.append(arr[i]) // dp 뒤에 이어붙이면 됨.
    }
    else { // 그렇지 않다면,
        let index = binarySearch(arr[i]) // arr[i]가 들어갈 위치를 찾고,
        dp[index] = arr[i] // 기존의 값을 변경.
    }
}

let answer: Int = N - dp.count // N - LIS
print(answer)



func binarySearch(_ targetNum: Int) -&amp;gt; Int { // 이분탐색
    var (low, high) = (0, dp.count - 1)
    
    while low &amp;lt;= high {
        let middle = (low + high) / 2
        
        if dp[middle] &amp;gt;= targetNum {
            high = middle - 1
        }
        else {
            low = middle + 1
        }
    }
    return low
}&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;size14&quot;&gt;&lt;b&gt;LCS 관련 풀이&lt;/b&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LCS 풀이&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2932&quot; data-origin-height=&quot;2787&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEubrr/btrCYhqH90F/wLvsEhBUosqk8PS7Ytv4N1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEubrr/btrCYhqH90F/wLvsEhBUosqk8PS7Ytv4N1/img.jpg&quot; data-alt=&quot;백준 2631번 - LCS 풀이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEubrr/btrCYhqH90F/wLvsEhBUosqk8PS7Ytv4N1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEubrr%2FbtrCYhqH90F%2FwLvsEhBUosqk8PS7Ytv4N1%2Fimg.jpg&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;400&quot; height=&quot;380&quot; data-origin-width=&quot;2932&quot; data-origin-height=&quot;2787&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 2631번 - LCS 풀이&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;pre id=&quot;code_1653372137526&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2631번(DP - 반복문)
let N = Int(readLine()!)!
var ans = Array(0...N) // https://stackoverflow.com/questions/34571043/how-to-create-an-array-with-incremented-values-in-swift
var arr: [Int] = [0]
for _ in 0..&amp;lt;N {
    arr.append(Int(readLine()!)!)
}

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)

for i in 1...N {
    for j in 1...N {
        if ans[i] == arr[j] { // 숫자가 같으면,
            dp[i][j] = dp[i - 1][j - 1] + 1
        }
        else { // 숫자가 다르면,
            dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]) // 왼쪽과 위쪽 중 큰 값.
        }
    }
}

let answer: Int = N - dp[N][N] // N - LCS
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;span style=&quot;color: #000000; font-size: 1.25em; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;백준 Swift 2565번&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;뭔가 풀릴 것 같은데 안풀려서 고민했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;LIS를 활용하면 될 것 같다고 생각했다. 처음엔 각각의 LIS를 구해서 N - 최댓값을 하면 될 것 같았는데 반례가 바로 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;튜플로 묶은 arr배열을 &lt;b&gt;A기준 오름차순 정렬&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음 &lt;b&gt;B를 기준&lt;/b&gt;으로 &lt;b&gt;LIS&lt;/b&gt;를 구한 뒤, &lt;b&gt;N - LIS&lt;/b&gt;를 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2787&quot; data-origin-height=&quot;2357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIEi3/btrC4NDgntX/rsnCNfe4Xgoh2HPpsGMdp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIEi3/btrC4NDgntX/rsnCNfe4Xgoh2HPpsGMdp0/img.jpg&quot; data-alt=&quot;백준 Swift 2565번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIEi3/btrC4NDgntX/rsnCNfe4Xgoh2HPpsGMdp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIEi3%2FbtrC4NDgntX%2FrsnCNfe4Xgoh2HPpsGMdp0%2Fimg.jpg&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;400&quot; height=&quot;338&quot; data-origin-width=&quot;2787&quot; data-origin-height=&quot;2357&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2565번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2565번(DP - 반복문 / LIS - 이중반복문)
let N = Int(readLine()!)!
var arr: [(A: Int, B: Int)] = []
for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr.append((input[0], input[1]))
}

arr.sort(by: &amp;lt;) // A기준으로, 오름차순 정렬.

var dp: [Int] = Array(repeating: 1, count: N)

for i in 1..&amp;lt;N {
    for j in 0..&amp;lt;i {
        if arr[j].B &amp;lt; arr[i].B {
            dp[i] = max(dp[i], dp[j] + 1)
        }
    }
}

let answer: Int = N - dp.max()!
print(answer)&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;span style=&quot;color: #000000; font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; font-size: 1.25em; letter-spacing: -1px;&quot;&gt;백준 Swift 2624번&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;비슷한 문제를 풀었어서 쉽게 풀 수 있을 거라고 생각했다. 계속 될 거 같은데 안풀렸다. 약 3시간을 고민했는데 결국 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;근데 머리를 이미 다 썼는지... 모든 글을 찾아봐도 설명이 다 이해가 안됐다. &lt;span style=&quot;color: #666666;&quot;&gt;(이 문제에 대해 설명이 있는 글이 별로 없는 것도 한 몫한 것 같다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 코인배열을 오름차순으로 정렬한다. (하지 않아도 된다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 코인(i)을 순차적으로 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1. 1부터 T까지 도는 j가 currCoin보다 작을 땐 기존의 값(dp[i-1][j])을 그대로 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2. 2-1에 해당하지 않는다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 사용가능한 코인 개수(currCnt)를 0개부터 currCnt를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1. 코인을 &lt;span&gt;k개&lt;/span&gt;(0개, 1개, 2개, ... currCnt개) 썼을 때 인덱스를 벗어나지 않는 경우에만,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 코인(i - 1)의 현재코인을 k개 썼을 때의 값을 더한다. ( &lt;b&gt;dp[i][j] += dp[i - 1][j - k * currCoin]&lt;/b&gt; )&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2253&quot; data-origin-height=&quot;3729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P60Vk/btrDbJOUC8D/j3SmhRhGAYKx0GufTfkwuk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P60Vk/btrDbJOUC8D/j3SmhRhGAYKx0GufTfkwuk/img.jpg&quot; data-alt=&quot;백준 Swift 2624번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P60Vk/btrDbJOUC8D/j3SmhRhGAYKx0GufTfkwuk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP60Vk%2FbtrDbJOUC8D%2Fj3SmhRhGAYKx0GufTfkwuk%2Fimg.jpg&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;400&quot; height=&quot;662&quot; data-origin-width=&quot;2253&quot; data-origin-height=&quot;3729&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2624번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ioqoo.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ioqoo.tistory.com/16&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2624번(DP - 반복문)
let T = Int(readLine()!)!
let K = Int(readLine()!)!
var coins: [[Int]] = [[0, 0]] // [0, 0]은 인덱스 채우기용.
for _ in 0..&amp;lt;K {
    coins.append(readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!})
}
coins.sort{$0[0] &amp;lt; $1[0]} // 동전금액기준 오름차순 정렬. (2차원배열 sort - https://stackoverflow.com/questions/31088974/use-sort-for-multidimensional-array-array-in-array-in-swift)

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: T + 1), count: K + 1)

for i in 0...K { // 초기값 세팅.
    dp[i][0] = 1 // 0원 만드는 경우는 1가지.
}

for i in 1...K {
    let (currCoin, currCnt) = (coins[i][0], coins[i][1]) // (현재 코인, 현재 코인의 사용 가능한 개수)
    for j in 1...T {
        if j &amp;lt; currCoin { // 현재 비교할 코인보다 작은 인덱스일 땐,
            dp[i][j] = dp[i - 1][j] // 지난번 값 그대로 저장.
            continue
        }
        for k in 0...currCnt { // 현재 코인의 사용가능한 개수까지 사용하면서, (현재 코인 | 0개 사용일 때, 1개 사용일 때, ... currCnt개 사용일 때)
            if j - k * currCoin &amp;gt;= 0 { // 인덱스를 벗어나지 않는 경우에만,
                dp[i][j] += dp[i - 1][j - k * currCoin]
            }
        }
    }
}

print(dp[K][T])&lt;/code&gt;&lt;/pre&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;백준 Swift 14567번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문) / 위상 정렬(Topology Sort)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP&lt;/b&gt;풀이를 먼저 보고, &lt;b&gt;위상 정렬&lt;/b&gt;풀이를 보면 쉬울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;DP 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;맨 처음엔 그래프문제인 거 같았지 DP문제 같아 보이진 않았다. 근데 종이에 적어보니 느낌이 바로 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;이전과목의 이수학기가 다음과목의 이수학기에 영향을 끼치기 때문이다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;arr에 입력받고, from기준으로 &lt;b&gt;오름차순으로 정렬&lt;/b&gt;한다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(선수 과목이 낮은 순서대로 정렬(&lt;span style=&quot;color: #9d9d9d;&quot;&gt;A과목 기준으로)&lt;/span&gt;을 해야 올바르게 모든 과목을 들을 수 있을 것이다!)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;arr을 돌면서 max(다음과목의 기존 값, 이전과목의 값 + 1) 중 &lt;b&gt;큰 값&lt;/b&gt;을 다음과목의 값에 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, &lt;b&gt;dp[line.to] = max(dp[line.to], dp[line.from] + 1)&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2613&quot; data-origin-height=&quot;3523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nLF9C/btrDlj3tErW/BrVA6SaywqJRp3OTqervQ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nLF9C/btrDlj3tErW/BrVA6SaywqJRp3OTqervQ1/img.jpg&quot; data-alt=&quot;백준 Swift 14567번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nLF9C/btrDlj3tErW/BrVA6SaywqJRp3OTqervQ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnLF9C%2FbtrDlj3tErW%2FBrVA6SaywqJRp3OTqervQ1%2Fimg.jpg&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;400&quot; height=&quot;3523&quot; data-origin-width=&quot;2613&quot; data-origin-height=&quot;3523&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 14567번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;위상정렬 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 DP로 풀고 제출해서 맞았다. 다른 사람들의 풀이가 궁금해서 보니까 큐로 풀었더라..? dp문제인데 왜 큐가 나오지 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;찾아보니까 백준 14567번 문제가 &lt;b&gt;DP도 가능&lt;/b&gt;하고 &lt;b&gt;위상정렬도 가능&lt;/b&gt;하다고 한다.  난 사실 위상정렬을 처음 들어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 &lt;b&gt;진입차수(indegree)를 기록&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;진입차수가 0인 노드&lt;/b&gt;들만 &lt;b&gt;큐에 넣는다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;q.popFirst()를 해서 나온 노드(node)&lt;/u&gt;와 &lt;b&gt;연결된 노드(nextNode)&lt;/b&gt;를 확인 후 answer값을 증가시킨다. (= 현재노드의 다음학기에 수강.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;q.popFirst()를 해서 나온 노드(node)&lt;/u&gt;와 &lt;b&gt;연결된 노드&lt;b&gt;(nextNode)&lt;/b&gt;&lt;/b&gt;의 진입차수를 낮추고, &lt;b&gt;만약 0이라면 큐에 넣는다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복하고 answer를 출력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위상정렬과 관련해서 아래 참고 자료를 확인하길 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://m.blog.naver.com/ndb796/221236874984&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://m.blog.naver.com/ndb796/221236874984&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP - 반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14567번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var arr: [(from: Int, to: Int)] = []
for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr.append((input[0], input[1]))
}
arr.sort(by: &amp;lt;) // from기준 오름차순 정렬

var dp: [Int] = Array(repeating: 1, count: N + 1)
dp[0] = 0
for line in arr {
    dp[line.to] = max(dp[line.to], dp[line.from] + 1)
}

print(dp[1...N].map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;위상정렬 - 큐&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653795167483&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14567번(위상정렬 - 큐)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []

    var count: Int {
        return enQueue.count + deQueue.count
    }

    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }

    init(_ queue: [T]) {
        enQueue = queue
    }

    func pushLast(_ element: T) {
        enQueue.append(element)
    }

    func pushFirst(_ element: T) {
        deQueue.append(element)
    }

    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }

    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var indegree =  Array(repeating: 0, count: N + 1) // 진입차수
var graph: [[Int]] = Array(repeating: [], count: N + 1) // 노드i에서 이동가능한 노드들 모음.
var answerArray: [Int] = Array(repeating: 1, count: N + 1) // 학기 저장 배열.

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (from, to) = (input[0], input[1])
    graph[from].append(to)
    indegree[to] += 1 // 진입차수 저장.
}

let q: Dequeue&amp;lt;Int&amp;gt; = Dequeue([])
for i in 1...N {
    if indegree[i] == 0 { // 진입차수가 0인 것들만 큐에 넣음.
        q.pushLast(i)
    }
}

while !q.isEmpty { // 큐가 빌 때까지,
    let node: Int = q.popFirst()

    for nextNode in graph[node] {
        answerArray[nextNode] = answerArray[node] + 1 // 현재노드의 다음학기 수강.
        indegree[nextNode] -= 1 // 진입차수 감소.

        if indegree[nextNode] == 0 { // 만약 진입차수가 0이면, 큐에 넣음.
            q.pushLast(nextNode)
        }
    }
}

print(answerArray[1...N].map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;백준 Swift 17485번&lt;/h4&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;span style=&quot;font-size: 0.87em; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제를 봤을 때 DP를 이용해야겠다는 느낌은 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;고민을 하다가 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0) 움직일 수 있는 방향을 0(↙), 1(&amp;darr;), 2(↘)로 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp&lt;/b&gt;를 [y][x]와 [0 or 1 or 2]를 써서 방향을 나타낼 수 있게 &lt;b&gt;3차원배열&lt;/b&gt;로 &lt;b&gt;정의&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;인덱스가 헷갈리지 않게 하기 위해, y와 x가 0일 때는 (최소값을 구할 거기 때문에) Int.max값으로 채워 놓는다. (1...N 과 1...M만 신경쓸 예정.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1) y를 1...N까지 돌면서, &lt;b&gt;y가  1일 땐&lt;/b&gt;(인덱스 0일 땐 메워둠.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[1][x]&lt;u&gt;&lt;b&gt;[0]&lt;/b&gt;&lt;/u&gt;, dp[1][x]&lt;u&gt;&lt;b&gt;[1]&lt;/b&gt;&lt;/u&gt;, dp[1][x]&lt;u&gt;&lt;b&gt;[2]&lt;/b&gt;&lt;/u&gt;에 각각의 board값을 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;u&gt;&lt;b&gt;전제조건 : 같은 방향 2번은 불가능하다.&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2) x가 &lt;u&gt;가장 좌측&lt;/u&gt;일 땐, 방향0과 방향1만 가능하다. 가장 좌측으로 오기 위해 방향2는 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1) &lt;b&gt;방향0일 때&lt;/b&gt;: 전제조건에 의해, (y - 1)행의 (x + 1)열의 방향1와 방향2 중 최소값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[0]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2) &lt;b&gt;방향1일 때&lt;/b&gt;: 전제조건에 의해, (y - 1)행의 (x)열의 방향0 값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[1]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3) x가 &lt;u&gt;가장 우측&lt;/u&gt;일 땐, 방향 1과 방향2만 가능하다. 가장 우측으로 오기 위해 방향1은 불가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1) &lt;b&gt;방향2일 때&lt;/b&gt;: 전제조건에 의해, (y - 1)행의 (x - 1)열의 방향0 과 방향1 중 최소값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[2]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-2) &lt;b&gt;방향1일 때&lt;/b&gt;: 전제조건에 의해, (y - 1)행의 (x)열의 방향2 값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[2]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4) x가 &lt;u&gt;그 외&lt;/u&gt;일 땐, 모든 방향이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4-1) &lt;b&gt;방향0일 때&lt;/b&gt;: 전제조건에 의해, (y - 1)행의 (x + 1)열의 방향1 과 방향2 중 최소값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[0]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;4-2) &lt;b&gt;방향1일 때&lt;/b&gt;: 전제조건에 의해,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;(y - 1)행의 (x)열의 방향0 과 방향2 중 최소값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[1]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;4-3) &lt;b&gt;방향2일 때&lt;/b&gt;: 전제조건에 의해,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;(y - 1)행의 (x - 1)열의 방향0 과 방향1 중 최소값 + board[y][x] = dp[y][x]&lt;u&gt;&lt;b&gt;[2]&lt;/b&gt;&lt;/u&gt;값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5) y가 N일 때, (가장 끝에 왔을 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;x를 1부터 M까지 돌리면서, &lt;b&gt;가장 작은 min값&lt;/b&gt;을 찾으면 정답이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2896&quot; data-origin-height=&quot;2148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PV9hT/btrDnset6sQ/jjbHnfcQhsa8wi0TgZURyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PV9hT/btrDnset6sQ/jjbHnfcQhsa8wi0TgZURyK/img.jpg&quot; data-alt=&quot;백준 Swift 17485번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PV9hT/btrDnset6sQ/jjbHnfcQhsa8wi0TgZURyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPV9hT%2FbtrDnset6sQ%2FjjbHnfcQhsa8wi0TgZURyK%2Fimg.jpg&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;400&quot; height=&quot;297&quot; data-origin-width=&quot;2896&quot; data-origin-height=&quot;2148&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 17485번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://maeng2world.tistory.com/470&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://maeng2world.tistory.com/470&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17485번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var board: [[Int]] = Array(repeating: [], count: N + 1)
board[0] = Array(repeating: 0, count: M + 1)
for i in 1...N {
    board[i] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!} // [0]은 인덱스 맞추기 위해.
}

var dp: [[[Int]]] = Array(repeating: Array(repeating: Array(repeating: Int.max, count: 3), count: M + 1), count: N + 1) // 0(↙), 1(&amp;darr;), 2(↘)

for y in 1...N {
    if y == 1 { // 가장 첫 스타트일 땐 board값 dp에 저장.
        for x in 1...M {
            for d in 0..&amp;lt;3 {
                dp[y][x][d] = board[y][x]
            }
        }
    }
    else { // 2...N
        for x in 1...M {
            if x == 1 { // 가장 좌측일 때, 방향 0과 1은 가능. 2로 오는건 불가능.
                dp[y][x][0] = min(dp[y - 1][x + 1][1], dp[y - 1][x + 1][2]) + board[y][x] // 지난 행, 다음 열의 min(방향1, 방향2)값 + 현재값
                dp[y][x][1] = dp[y - 1][x][0] + board[y][x] // 지난 행, 같은 열의 값(방향0) + 현재값
            }
            else if x == M { // 가장 우측일 때, 방향 1과 2는 가능. 0으로 오는건 불가능.
                dp[y][x][2] = min(dp[y - 1][x - 1][0], dp[y - 1][x - 1][1]) + board[y][x] // 지난 행, 지난 열의 min(방향0, 방향1)값 + 현재값
                dp[y][x][1] = dp[y - 1][x][2] + board[y][x] // 지난 행, 같은 열의 값(방향2) + 현재값
            }
            else { // 그 외,
                dp[y][x][0] = min(dp[y - 1][x + 1][1], dp[y - 1][x + 1][2]) + board[y][x] // 지난 행, 다음 열의 min(방향1, 방향2)값 + 현재값
                dp[y][x][1] = min(dp[y - 1][x][0], dp[y - 1][x][2]) + board[y][x] // 지난 행, 같은 열의 min(방향0, 방향2)값 + 현재값
                dp[y][x][2] = min(dp[y - 1][x - 1][0], dp[y - 1][x - 1][1]) + board[y][x] // 지난 행, 지난 열의 min(방향0, 방향1)값 + 현재값
            }
        }
    }
}

var answer: Int = Int.max
for x in 1...M {
    answer = min(answer, dp[N][x].min()!)
}
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 21941번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : &lt;b&gt;DP&lt;/b&gt;(재귀, 반복문) / &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;그리디(X)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt; 어떻게 풀어야할지 고민해봤지만 잘 모르겠었다. 처음엔 DP가 아닌 그리디 풀이법을 생각했다. 그러다 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 푸는 로직은 이해됐는데, 이를 &lt;b&gt;Swift로 구현하려고 하니까 힘들었다...&lt;/b&gt;(하단 3-2부분)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그래도 해결했으니 잘 설명해보겠다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2550&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3tPwD/btrDAQzzThz/DkIzhPbKhbj5dKzq4uAIm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3tPwD/btrDAQzzThz/DkIzhPbKhbj5dKzq4uAIm0/img.png&quot; data-alt=&quot;백준 Swift 21941번 - Swift기준 최초의 풀이 등극!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3tPwD/btrDAQzzThz/DkIzhPbKhbj5dKzq4uAIm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3tPwD%2FbtrDAQzzThz%2FDkIzhPbKhbj5dKzq4uAIm0%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;155&quot; data-origin-width=&quot;2550&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 21941번 - Swift기준 최초의 풀이 등극!&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;백준 21941번 DP풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. S배열에 [String]으로 저장한다. [&quot;0&quot;]을 맨 앞에 붙여서, 인덱스를 맞춰준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. dp배열을 0부터 S.count만큼 만들고, 1씩 증가하게 값을 저장한다. (사실 그냥 값을 0으로 초기화해도 상관없다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;1씩 증가하게 저장한 이유는 문자열조건(A)에 해당하는 게 없으면 점수가 1씩 증가하기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. i를 1부터 sLength만큼 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1. 우선 기존의 값(dp[i])과 dp[i -1] + 1 중 큰 값을 저장한다. (+1은 문자열조건(A)에 해당하는 게 없으면 1을 더해주는 것이다.)&lt;/p&gt;
&lt;pre id=&quot;code_1653977129166&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[i] = max(dp[i], dp[i - 1] + 1) // 문자열조건에 해당되는 게 없을 땐 1점만.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-2. [String]의 일부로 String을 만들고, 만든 String이 임의의 String으로 시작하는지 체크하는 게 필요했는데, 여기가 Swift로 구현이 힘들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열 S 인덱스의&amp;nbsp; &lt;u&gt;i부터 끝까지&lt;/u&gt;로 String을 만든다. = testS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;testS를 만든 이유는, condition.str이 문자열조건(A)으로 시작하는지 체크하기 위함이다.&lt;/p&gt;
&lt;pre id=&quot;code_1653977595305&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let testS: String = S[i...sLength].joined(separator: &quot;&quot;) // S의 i부터 끝까지를 String으로 만든 다음, 그 String이 문자열조건(A)로 시작하는지 체크.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4. 조건들(문자열조건(A), 점수)을 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4-1. 만약 testS가 문자열조건(A)으로 시작한다면, (hasPrefix관련 : &lt;a href=&quot;https://stackoverflow.com/questions/32664543/swift-startswith-method&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/32664543/swift-startswith-method&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4-2. 문자열조건(A)의 길이만큼 인덱스를 옮긴 곳에, max(기존 값, (i - 1)의 dp값 + 조건 점수) 큰 값을 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;인덱스가 i가 아닌, &lt;u&gt;&lt;b&gt;(i - 1)&lt;/b&gt;&lt;/u&gt;이어야 str의 길이를 더했을 때 &lt;u&gt;&lt;b&gt;dp의 알맞은 인덱스에 위치하게 된다.&lt;/b&gt;&lt;/u&gt; 종이 풀이의 좌측 하단 dp표를 참고하면 이해가 쉽다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653977620563&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for condition in arr { // 조건들(문자열조건(A), 점수)을 돌면서,
        if testS.hasPrefix(condition.str) { // testS가 문자열조건(A)으로 시작한다면,
            dp[(i - 1) + condition.str.count] = max(dp[(i - 1) + condition.str.count], dp[i - 1] + condition.score) // 문자열조건(A)의 길이만큼 인덱스를 옮겨서, max(기존 값, (i - 1)의 dp값 + 조건 점수) 큰 값을 저장한다.
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5. DP의 가장 끝 값을 출력하면 끝!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;2149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b03CsS/btrDDpumbkU/wKHRU5m67yd7FgwewFOSk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b03CsS/btrDDpumbkU/wKHRU5m67yd7FgwewFOSk1/img.png&quot; data-alt=&quot;백준 Swift 21941번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b03CsS/btrDDpumbkU/wKHRU5m67yd7FgwewFOSk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb03CsS%2FbtrDDpumbkU%2FwKHRU5m67yd7FgwewFOSk1%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;400&quot; height=&quot;559&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;2149&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 21941번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VuITx/btrDEpU3MT3/zYQBbbnJPlPF10yjNndkS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VuITx/btrDEpU3MT3/zYQBbbnJPlPF10yjNndkS1/img.png&quot; data-alt=&quot;백준 Swift 21941번 - DP값 출력 결과.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VuITx/btrDEpU3MT3/zYQBbbnJPlPF10yjNndkS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVuITx%2FbtrDEpU3MT3%2FzYQBbbnJPlPF10yjNndkS1%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;400&quot; height=&quot;273&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 21941번 - DP값 출력 결과.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;백준 21941번 그리디 풀이 - &lt;span style=&quot;color: #f89009;&quot;&gt;97%에서 틀림.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 1. 조건들 중, str의길이가 점수(X)보다 작으면 교체하는 게 손해다. 그런 조건은 arr에 넣지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2. arr을 교체효율이 좋은 순으로 정렬한다. str의 길이는 짧을 수록, 점수는 클 수록 이득이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;arr 정렬 기준 : &lt;b&gt;score / length&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3. 문자열S에 condition.str이 존재한다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-1. .replacingOccurrences를 통해 &quot;_&quot;로 교체한다. 단점은 몇개가 교체됐는지 한 번에 알 수 없다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-2. 단점을 해결하기 위해, countArray를  둬 각 조건에 의해 변경된 개수를 저장한 걸 이용해 nowCount를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 4. &quot;_&quot;로 교체되지 않은 나머지(remain)의 개수만큼 더해주면 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이가 틀린 게 없는 것 같은데.... 왜 97%에서 틀리는지 모르겠다... 어디가 틀렸는지 아시겠는 분은 꼭 좀 댓글이나 백준답변으로 달아주시면 감사하겠습니다. (백준 질문 글 - &lt;a href=&quot;https://www.acmicpc.net/board/view/91564&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/91564&lt;/a&gt; / 백준 반례 글 - &lt;a href=&quot;https://www.acmicpc.net/board/view/89027&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/89027&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;22.05.31 추가 내용 : 반례 글을 보니까, 제 생각에 이 문제는 그리디로는 불가능 한 것 같습니다..!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 자료 : &lt;a href=&quot;https://t.ly/DZ29w&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/DZ29w&lt;/a&gt; | &lt;a href=&quot;https://stackoverflow.com/questions/25827033/how-do-i-convert-a-swift-array-to-a-string&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/25827033/how-do-i-convert-a-swift-array-to-a-string&lt;/a&gt; | &lt;a href=&quot;https://t.ly/Yewx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/Yewx&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(여기선 결국 필요 없었지만 유용한) 참고 자료 : &lt;a href=&quot;https://stackoverflow.com/questions/56175794/check-if-a-string-is-substring-of-another-string-using-swift-5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/56175794/check-if-a-string-is-substring-of-another-string-using-swift-5&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP - 반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21941번(DP - 반복문)
import Foundation
let S: [String] = [&quot;0&quot;] + readLine()!.map{String($0)} // 0은 인덱스 채우기 용.
let M = Int(readLine()!)!
var arr: [(str: String, score: Int)] = []

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
    let (A, X): (String, Int) = (input[0], Int(input[1])!) // 문자열조건, 점수
    arr.append((A, X))
}

var dp: [Int] = Array(repeating: 0, count: S.count)
for i in 0..&amp;lt;dp.count {
    dp[i] = i
}

let sLength: Int = S.count - 1 // 입력받은 S의 진짜 길이.
for i in 1...sLength {
    dp[i] = max(dp[i], dp[i - 1] + 1) // 문자열조건에 해당되는 게 없을 땐 1점만.
    
    let testS: String = S[i...sLength].joined(separator: &quot;&quot;) // S의 i부터 끝까지를 String으로 만든 다음, 그 String이 문자열조건(A)로 시작하는지 체크.
    
    for condition in arr { // 조건들(문자열조건(A), 점수)을 돌면서,
        if testS.hasPrefix(condition.str) { // testS가 문자열조건(A)으로 시작한다면,
            dp[(i - 1) + condition.str.count] = max(dp[(i - 1) + condition.str.count], dp[i - 1] + condition.score) // 문자열조건(A)의 길이만큼 인덱스를 옮겨서, max(기존 값, (i - 1)의 dp값 + 조건 점수) 큰 값을 저장한다.
        }
    }
//    print(dp)
}
print(dp.last!)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;그리디 - 97%에서 틀림.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1653984948374&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21941번(그리디 - 97%에서 틀림.)
import Foundation
//let S: [String] = readLine()!.map{String($0)}
var S: String = readLine()!
let M = Int(readLine()!)!
var arr: [(str: String, length: Double, score: Double)] = []

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
    let (A, X): (String, Double) = (input[0], Double(input[1])!) // 문자열조건, 점수
    
    if X / Double(A.count) &amp;gt; 1 { // 효율이 1이하면 문자열교체하는게 손해임. (교체안하고 그냥 1점씩 받는 게 더 이득.)
        arr.append((A, Double(A.count), X))
    }
//    if A.count &amp;lt; Int(X) { // 위 if문과 같은 의미.
//        arr.append((A, Double(A.count), X))
//    }
}

arr.sort(by: {($0.score / $0.length) &amp;gt; ($1.score / $1.length)}) // 내림차순 정렬.(효율적인 것부터 앞으로)

var sum: Int = 0
var countArray: [Int] = [0] // 문자열조건에 의해 바뀐 개수 저장하는 배열.
for condition in arr { // 조건을 돌면서,
    if S.contains(condition.str) { // S에 문자열조건이 있다면, (check String contain String - https://stackoverflow.com/questions/56175794/check-if-a-string-is-substring-of-another-string-using-swift-5)
        S = S.replacingOccurrences(of: condition.str, with: &quot;_&quot;) // 문자열을 &quot;_&quot;로 대체.
        
        let totalCount = S.filter{$0 == &quot;_&quot;}.count // 지금까지 문자열조건에 의해 바뀐 총개수 카운트.
        let nowCount = totalCount - countArray.reduce(0, +) // 현재 문자열조건에 의해 바뀐 개수.
        countArray.append(nowCount)
        
        sum += Int(condition.score) * nowCount
    }
}

let remain: Int = S.filter{$0 != &quot;_&quot;}.count // 문자열조건들에 바뀌지 않은, 나머지들.
sum += remain // 나머지들 개수만큼 +1.
print(sum)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;span style=&quot;color: #000000; font-size: 1.25em; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif;&quot;&gt;백준 Swift 18427번&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;온전히 나의 힘으로 풀었다!! 백준 2624번 문제와 매우 유사하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;21941번 이후 또다시 &lt;b&gt;&lt;/b&gt;&lt;u&gt;&lt;b&gt;Swift기준 최초 풀이 등극&lt;/b&gt;&lt;/u&gt;했다! 후훗 뭔가 뿌듯하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2526&quot; data-origin-height=&quot;1392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxAsMi/btrDEzxxIFR/KA9x7wQNtHqxJXIZgvLUCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxAsMi/btrDEzxxIFR/KA9x7wQNtHqxJXIZgvLUCK/img.png&quot; data-alt=&quot;백준 Swift 18427번 - Swift기준 최초의 풀이 등극!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxAsMi/btrDEzxxIFR/KA9x7wQNtHqxJXIZgvLUCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxAsMi%2FbtrDEzxxIFR%2FKA9x7wQNtHqxJXIZgvLUCK%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;276&quot; data-origin-width=&quot;2526&quot; data-origin-height=&quot;1392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 18427번 - Swift기준 최초의 풀이 등극!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;백준 18427번 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 1. 학생들의 블록을 저장한다. [0]은 인덱스 채우기 용.&lt;/p&gt;
&lt;pre id=&quot;code_1654001487968&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var studentBlocks: [[Int]] = [[0]] // 학생들 블록 저장하는 배열.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2. dp를 (N + 1) * (H + 1) 사이즈의 2차원배열을 선언한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2-1. 각 행의 0번째열의 값을 1로 채운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2-2. 1번 학생(1번행)의 블록값(num)과 같은 열의 값을 1로 채운다.&lt;/p&gt;
&lt;pre id=&quot;code_1654001682118&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: H + 1), count: N + 1)
for i in 1...N { // 초기 세팅.
    dp[i][0] = 1 // 인덱스 0번째는 1로 채워놓는다.
}

for num in studentBlocks[1] { // 초기 세팅.
    dp[1][num] = 1 // 1번학생이 갖고 있는 블록들과 같은 인덱스들의 값을 1로 채워놓는다.
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3. 2번째 학생부터 N번째 학생까지 돌면서, (= i를 2...N까지 돌면서,)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-1. 1번열부터 H열까지 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-2. 우선 이전 행의 dp값을 저장한다. dp[i][j] = dp[i-1][j]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-3. i번째 학생이 갖고 있는 블록들을 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j - num이 &lt;b&gt;인덱스를 벗어나지 않을 때에만&lt;/b&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;b&gt;이전 행&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;의 &lt;b&gt;(j-num)열 값&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;들&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;을 더한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 4. dp[N][H] % 10007를 출력하면 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2923&quot; data-origin-height=&quot;2277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/deKsvA/btrDBuDx8P1/OACgUMTJ3wQwWvHDHxlLyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deKsvA/btrDBuDx8P1/OACgUMTJ3wQwWvHDHxlLyK/img.jpg&quot; data-alt=&quot;백준 Swift 18427번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deKsvA/btrDBuDx8P1/OACgUMTJ3wQwWvHDHxlLyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeKsvA%2FbtrDBuDx8P1%2FOACgUMTJ3wQwWvHDHxlLyK%2Fimg.jpg&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;400&quot; height=&quot;312&quot; data-origin-width=&quot;2923&quot; data-origin-height=&quot;2277&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 18427번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Swift 주의사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;계속 100%에서 런타임에러가 떠서 당혹스러웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;찾아보니 100%에서 에러가 뜨는거면, 최소값에서 에러가 생기는 확률이 크다고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;아래 반례&lt;/b&gt;에서 실제로 에러가 나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이유는 for문을 &lt;u&gt;&lt;b&gt;2...N&lt;/b&gt;&lt;/u&gt;으로 돌렸는데, &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;N이 1일 때 문제가 생기는 것&lt;/b&gt;&lt;/span&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;u&gt;stride&lt;/u&gt;로 for문 돌게 변경&lt;/b&gt;해주고 정답!&lt;/p&gt;
&lt;pre id=&quot;code_1653994969747&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;반례
1 1 1
1

=&amp;gt; 1이 나와야 함.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 자료 : &lt;a href=&quot;https://www.acmicpc.net/board/view/44660&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/44660&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 18427번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, H) = (input[0], input[1], input[2])
var studentBlocks: [[Int]] = [[0]] // 학생들 블록 저장하는 배열.
for _ in 0..&amp;lt;N {
    studentBlocks.append(readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)) // 오름차순으로 정렬해서 넣어놓음.
}

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: H + 1), count: N + 1)
for i in 1...N { // 초기 세팅.
    dp[i][0] = 1 // 인덱스 0번째는 1로 채워놓는다.
}

for num in studentBlocks[1] { // 초기 세팅.
    dp[1][num] = 1 // 1번학생이 갖고 있는 블록들과 같은 인덱스들의 값을 1로 채워놓는다.
}

for i in stride(from: 2, through: N, by: 1) { // 2...N으로 하면 1에서 에러남. (그래서 stride로 함.)
    for j in 1...H { // 1번째 열부터 H열까지 돌면서,
        dp[i][j] = dp[i - 1][j] % 10007 // 우선 이전 행 dp값 저장.
        
        for num in studentBlocks[i] { // i번째 학생이 갖고 있는 블록들 중,
            if j - num &amp;gt;= 0 { // 인덱스를 벗어나지 않을 때에만,
                dp[i][j] += (dp[i - 1][j - num]) % 10007 // 이전 행의 (j-num)열 값들을 더함.
            }
        }
    }
}
print(dp[N][H] % 10007)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1915번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;조금 더 고민했으면 혼자 힘으로 풀 수 있었을 것 같은데 뭔가 아쉽다. 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사각형의 우측 하단을 기준으로 dp를 저장해가면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;dp[i][j]&lt;/b&gt;는 i행j열 기준으로, 만들 수 있는 &lt;u&gt;최대&amp;nbsp;정사각형의 한변의 길이&lt;/u&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 1. 0행이거나 0열이면 dp값은 arr[i][j]의 값이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2. 그 외에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2-1. arr[i][j]값이 0이면 -&amp;gt; &lt;b&gt;dp값&lt;/b&gt;은 &lt;u&gt;&lt;b&gt;0&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2-2. arr[i][j]값이 1이면 -&amp;gt; &lt;b&gt;dp값&lt;/b&gt;은 &lt;u&gt;&lt;b&gt;↖,&amp;nbsp;&amp;uarr;,&amp;nbsp;&amp;larr;&amp;nbsp;중&amp;nbsp;최소값&amp;nbsp;+&amp;nbsp;1&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3. dp배열 중 &lt;b&gt;최대값 * 최대값&lt;/b&gt;이 정답.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2994&quot; data-origin-height=&quot;1716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyES35/btrDIniK72B/4KEpvc2tA8RPLIMOoOdeU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyES35/btrDIniK72B/4KEpvc2tA8RPLIMOoOdeU0/img.jpg&quot; data-alt=&quot;백준 Swift 1915번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyES35/btrDIniK72B/4KEpvc2tA8RPLIMOoOdeU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyES35%2FbtrDIniK72B%2F4KEpvc2tA8RPLIMOoOdeU0%2Fimg.jpg&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;400&quot; height=&quot;229&quot; data-origin-width=&quot;2994&quot; data-origin-height=&quot;1716&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1915번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://kyun2da.github.io/2021/04/09/biggestSquare/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kyun2da.github.io/2021/04/09/biggestSquare/&lt;/a&gt;&amp;nbsp;| &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://t.ly/y8dE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/y8dE&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1915번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])
var arr: [[Int]] = []
for _ in 0..&amp;lt;n {
    arr.append(readLine()!.map{Int(String($0))!})
}

var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: m), count: n)

for i in 0..&amp;lt;n { // 초기세팅 - 0열
    dp[i][0] = arr[i][0]
}

for j in 0..&amp;lt;m { // 초기세팅 - 0행
    dp[0][j] = arr[0][j]
}


for i in 1..&amp;lt;n {
    for j in 1..&amp;lt;m {
        if arr[i][j] == 0 { // 값이 0이면,
            dp[i][j] = 0 // 사각형이 애초에 불가능.
        }
        else { // 값이 1이면,
            dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1 // ↖, &amp;uarr;, &amp;larr; 중 최소값 + 1
        }
    }
}

var maxValue: Int = -1
for i in 0..&amp;lt;n { // 각 행을 돌면서,
    maxValue = max(maxValue, dp[i].max()!) // 최대값 비교.
}
print(maxValue * maxValue)&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2228번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;딱 보고 여러가지 테스트케이스를 만들어서 시도해봤으나 규칙이나 감이 전혀 안왔다... 결국 다른 블로그를 참고했는데, 봐도 처음엔 이해가 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;바텀업 방식으로 보통 DP문제를 풀어 왔는데, 이 문제는 바텀업방식이 되려 복잡하고 이해가 잘 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;탑다운 방식(재귀)&lt;/b&gt;으로 설명을 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 1. (1...N까지의) 각각의 누적합(cumSum)을 구한다. 0번째는 인덱스 채우기 용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2. dp는 (N+1)*(M+1)의 사이즈로 구성한다. 각행과 각열의 0번째는 인덱스 채우기 용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;arr의 최대 개수는 100개(N이 최대 100)이고, 수의 최소값은 -32768이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;따라서, 누적합의 가능한 최소값은 -32768 * 100개일 것이다. dp에 초기값으로 불가능한 값을 넣어놔야 하기 때문에 아래처럼 세팅했다.&lt;/p&gt;
&lt;pre id=&quot;code_1654152422502&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let initValue: Int = (-32768 * 100) - 1 // 최소값 -32768 * 최대 100개 -&amp;gt; 가능한 최소 누적합, 거기에 -1을 해야 불가능한 값이 됨.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3. arr 관련된 그림 - 아래 종이풀이를 확인하자. 경우가 2가지로 나뉜다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-1. (우리에게 필요한) &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;index번째 수&lt;/b&gt;&lt;/span&gt;가, 구간 section에 &lt;u&gt;&lt;b&gt;속하지 않을 때(X)&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;: index - 1번째 수의 값과 같을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, &lt;u&gt;&lt;b&gt;dp[index][section] = solve(index - 1, section)&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 3-2. &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;index번째 수&lt;/b&gt;&lt;/span&gt;가, 구간 section에 &lt;u&gt;&lt;b&gt;속할 때(O)&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;: 하단 그림을 참고해서 보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;임의의 수 k부터 n(=index)까지 -&amp;gt; 구간 section에 속한다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우리는 가장 끝에 있는 n(=index번째) 수가, 어디부터 시작된 게(=k, k-1, k-2, ...) 구간 section의 최대값인지 알지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, 구간 section의 최대값을 알기 위해선 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;u&gt;&lt;b&gt;(k - 2번째 수, 구간 section - 1)&lt;/b&gt;&lt;/u&gt;의 값 + &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;Sigma;arr[k...n]&lt;/span&gt;&lt;/b&gt; 이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;Sigma;arr[k...n]&lt;/span&gt;&lt;/b&gt; = &lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;cumSum[n] - cumSum[k-1] 이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;다시 써보자면,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;dp[index][section] = &lt;b&gt;solve(k - 2, section - 1)&lt;/b&gt; + (&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;cumSum[n] - cumSum[k-1]&lt;/span&gt;&lt;/b&gt;) 가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;우린 최대값을 구하는 거니까, 기존의 dp값과 비교를 해주는 부분도 추가되어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654153351888&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for k in stride(from: index, through: 1, by: -1) {
	dp[index][section] = max(dp[index][section], solve(k - 2, section - 1) + (cumSum[index] - cumSum[k - 1]))
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;재귀함수에서,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124;&quot;&gt;범위를 벗어나거나 방문한 적이 있다면 return을 해줘서 빠르게 벗어날 수 있게 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654153464988&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if section == 0 {
        return 0
}
if index &amp;lt;= 0 { // index를 벗어날 땐,
    return initValue
}

if visited[index][section] { // 방문한 적이 있다면,
    return dp[index][section]
}

visited[index][section] = true // 방문 기록.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&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;2970&quot; data-origin-height=&quot;2737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiNn4V/btrDQfdarpd/KohKkzMC6KUlVLrUnEgYUK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiNn4V/btrDQfdarpd/KohKkzMC6KUlVLrUnEgYUK/img.jpg&quot; data-alt=&quot;백준 Swift 2228번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiNn4V/btrDQfdarpd/KohKkzMC6KUlVLrUnEgYUK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiNn4V%2FbtrDQfdarpd%2FKohKkzMC6KUlVLrUnEgYUK%2Fimg.jpg&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;400&quot; height=&quot;369&quot; data-origin-width=&quot;2970&quot; data-origin-height=&quot;2737&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2228번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;재귀 참고자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://loosie.tistory.com/260&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/260&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;반복문 참고자료: &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://lotuslee.tistory.com/116&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://lotuslee.tistory.com/116&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ddiyeon.tistory.com/62&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ddiyeon.tistory.com/62&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2228번(DP - TopDown)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var arr: [Int] = [-32769]
for _ in 0..&amp;lt;N {
    arr.append(Int(readLine()!)!)
}
let initValue: Int = (-32768 * 100) - 1 // 최소값 -32768 * 최대 100개 -&amp;gt; 가능한 최소 누적합, 거기에 -1을 해야 불가능한 값이 됨.
var dp: [[Int]] = Array(repeating: Array(repeating: initValue, count: M + 1), count: N + 1)
var cumSum: [Int] = Array(repeating: 0, count: N + 1) // 누적합

for i in 1...N { // 누적합 저장.
    cumSum[i] = cumSum[i - 1] + arr[i]
}
//print(cumSum)
var visited: [[Bool]] = Array(repeating: Array(repeating: false, count: M + 1), count: N + 1) // 방문체크.

func solve(_ index: Int, _ section: Int) -&amp;gt; Int { // 재귀함수
    if section == 0 {
        return 0
    }
    if index &amp;lt;= 0 { // index를 벗어날 땐,
        return initValue
    }
    
    if visited[index][section] { // 방문한 적이 있다면,
        return dp[index][section]
    }
    
    visited[index][section] = true // 방문 기록.
    dp[index][section] = solve(index - 1, section) // index번째수가 구간section에 속하지 않는 경우.
    
    for k in stride(from: index, through: 1, by: -1) {
        dp[index][section] = max(dp[index][section], solve(k - 2, section - 1) + (cumSum[index] - cumSum[k - 1]))
    }
        
    return dp[index][section]
}

let answer = solve(N, M)
print(answer)&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2758번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp접근은 맞았다. 지금 다시 생각해보면, 규칙도 거의 찾았는데 끝까지 고민해보지 않은 것 같다. 뭔가 아쉽다. 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제도 Swift로는 최초 풀이다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2546&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSY9v/btrDPZvi179/7gXeYKbjPKgKTidP2wEdek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSY9v/btrDPZvi179/7gXeYKbjPKgKTidP2wEdek/img.png&quot; data-alt=&quot;백준 Swift 2758번 - Swift 최초 풀이 등극!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSY9v/btrDPZvi179/7gXeYKbjPKgKTidP2wEdek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSY9v%2FbtrDPZvi179%2F7gXeYKbjPKgKTidP2wEdek%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;143&quot; data-origin-width=&quot;2546&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2758번 - Swift 최초 풀이 등극!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주어진 TC를 아래 종이풀이처럼 써보면 규칙이 보일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 1. i가 1일 땐, 가능한 경우의 수를 미리 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이 2. i가 2이상일 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;u&gt;dp = (같은 행의) 이전 열 값 + (이전 행의) 열/2 값&lt;/u&gt;&lt;/b&gt; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, 점화식은 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1654170261400&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[i][j] = dp[i][j - 1] + dp[i - 1][j / 2] // 이전열 값 + 이전행, 열/2 값&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&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;2862&quot; data-origin-height=&quot;2359&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7xndM/btrDPsLuLq1/9BinaFEAw5ldzkKHHl8lXk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7xndM/btrDPsLuLq1/9BinaFEAw5ldzkKHHl8lXk/img.jpg&quot; data-alt=&quot;백준 Swift 2758번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7xndM/btrDPsLuLq1/9BinaFEAw5ldzkKHHl8lXk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7xndM%2FbtrDPsLuLq1%2F9BinaFEAw5ldzkKHHl8lXk%2Fimg.jpg&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;400&quot; height=&quot;330&quot; data-origin-width=&quot;2862&quot; data-origin-height=&quot;2359&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2758번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;개선 가능성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;지금은 새로운 테스트케이스를 돌 때마다 dp를 새로 계산하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;속도를 더 개선하려면, 미리 n과 m의 최대범위까지 계산 해서 dp배열에 넣고, 각 TC에 맞는 배열값만 출력하게 하면 속도 개선이 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://ddiyeon.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ddiyeon.tistory.com/65&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2758번(DP - 반복문)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (n, m) = (input[0], input[1])
    
    var dp: [[Int]] = Array(repeating: Array(repeating: 0, count: m + 1), count: n + 1)
    
    for j in 1...m { // 초기세팅 - 1개 고를 때
        dp[1][j] = j
    }
    
    for i in stride(from: 2, through: n, by: 1) { // n이 1일 때 error를 방지하기 위해.
        for j in 1...m {
            dp[i][j] = dp[i][j - 1] + dp[i - 1][j / 2] // 이전열 값 + 이전행, 열/2 값
        }
    }
    
    print(dp[n][m])
}&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2073번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKujC/btrDUNO8cc5/rNw2XtgpfVMPbCTn8tfG6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKujC/btrDUNO8cc5/rNw2XtgpfVMPbCTn8tfG6K/img.png&quot; data-alt=&quot;백준 Swift 2073번 - Swift 최초 풀이 등극!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKujC/btrDUNO8cc5/rNw2XtgpfVMPbCTn8tfG6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKujC%2FbtrDUNO8cc5%2FrNw2XtgpfVMPbCTn8tfG6K%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;148&quot; data-origin-width=&quot;2552&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2073번 - Swift 최초 풀이 등극!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp의 인덱스를 0...D까지 하면 된다는 것까진 고민 했지만, 그 후에 어떻게 풀면 좋을지 모르겠었다. 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;풀이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제엔 2가지 핵심이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;핵심 1. dp[0]에 0이 아닌 매우 큰 값을 넣어놔야 한다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;핵심 2. dp의 인덱스를 뒤에서부터 돌려야 한다는 것. - 이걸 이해하는 데 애를 먹었다. &lt;s&gt;아직도 정확히 이해한 거 같지 않다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;수도관의 용량&lt;/b&gt;&lt;/u&gt;은 &lt;b&gt;각 파이프.capacity들 중 &lt;/b&gt;&lt;u&gt;&lt;b&gt;최소값&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;[for문 안에서 전제조건 : &lt;u&gt;&lt;b&gt;현재 파이프를 반드시 설치&lt;/b&gt;&lt;/u&gt;는 한다.]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;인덱스를 D에서부터 1까지 거꾸로 돌면서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;1. 현재 파이프의 용량이 더 작은지&lt;/span&gt;&lt;/b&gt; VS &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. (현재 파이프) 이전까지의 용량이 더 작은지&lt;/span&gt;&lt;/b&gt;를 비교한다.&lt;/p&gt;
&lt;pre id=&quot;code_1654246657000&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;min(pipe.capacity, dp[i - pipe.length])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Case1. &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;&amp;lt;&lt;/b&gt; &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 현재 파이프가 용량이 더 크다는 뜻이다. -&amp;gt; 값은 결국 &lt;u&gt;&lt;b&gt;지금까지의 값(=2)&lt;/b&gt;&lt;/u&gt;으로 결정된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Case2. &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt; : 현재 파이프가 용량이 더 작다는 뜻이다. -&amp;gt; 값이 &lt;b&gt;&lt;u&gt;현재 파이프의 용량 값(=1)&lt;/u&gt;&lt;/b&gt;으로 결정된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 순서대로 비교를 할 때, i가 0일 때 &lt;b&gt;dp[0]&lt;/b&gt;값이 &lt;b&gt;더 작은 수&lt;/b&gt;라면 원하는 결과가 안 나올 것이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이를 방지하기 위해 &lt;b&gt;dp[0]&lt;/b&gt;에 미리 &lt;b&gt;Int.max&lt;/b&gt;를 저장해놓는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;우리가 구해야 하는 &lt;b&gt;최종 결론&lt;/b&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 i에서의 값(=dp[i])은 &lt;b&gt;최대&lt;/b&gt;가 돼야 하기 때문에, &lt;b&gt;max를 써서 매번 더 큰 값을 저장&lt;/b&gt;한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654246992033&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dp[i] = max(dp[i], min(pipe.capacity, dp[i - pipe.length]))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2733&quot; data-origin-height=&quot;3468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1vMnV/btrDUuQBy3B/vxqMW3PhPydBmhrRwjCQf0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1vMnV/btrDUuQBy3B/vxqMW3PhPydBmhrRwjCQf0/img.jpg&quot; data-alt=&quot;백준 Swift 2073번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1vMnV/btrDUuQBy3B/vxqMW3PhPydBmhrRwjCQf0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1vMnV%2FbtrDUuQBy3B%2FvxqMW3PhPydBmhrRwjCQf0%2Fimg.jpg&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;400&quot; height=&quot;508&quot; data-origin-width=&quot;2733&quot; data-origin-height=&quot;3468&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2073번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VIcxu/btrDTiigCH8/5Vje6vSyQFSJgWmx5qKay1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VIcxu/btrDTiigCH8/5Vje6vSyQFSJgWmx5qKay1/img.png&quot; data-alt=&quot;백준 Swift 2073번 - dp표&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VIcxu/btrDTiigCH8/5Vje6vSyQFSJgWmx5qKay1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVIcxu%2FbtrDTiigCH8%2F5Vje6vSyQFSJgWmx5qKay1%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;400&quot; height=&quot;238&quot; data-origin-width=&quot;612&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2073번 - dp표&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://kwoncorin.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kwoncorin.tistory.com/83&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2073번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (D, P) = (input[0], input[1])
var pipes: [(length: Int, capacity: Int)] = []
for _ in 0..&amp;lt;P {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    pipes.append((input[0], input[1])) // L, C 저장.
}
pipes.sort(by: &amp;lt;) // 오름차순 정렬 - 할 필요는 없음. dp값 확인 용이하게 하려고 정렬.

var dp: [Int] = [Int.max] + Array(repeating: 0, count: D) // dp[0]에 매우 큰 값을 넣어놔야, min비교할 때 정상적으로 작동함. 0이나 음수, 다른 값을 넣으면 꼬임.

for pipe in pipes {
    
    for i in stride(from: D, through: 1, by: -1) {
        if i - pipe.length &amp;gt;= 0 {
            dp[i] = max(dp[i], min(pipe.capacity, dp[i - pipe.length]))
        }
    }
//    print(dp)
}

print(dp[D])&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>DP Swift 문제풀이</category>
      <category>Dynamic Programming</category>
      <category>Swift PS</category>
      <category>Swift 코딩테스트</category>
      <category>백준 Swift DP</category>
      <category>백준 Swift 문제풀이</category>
      <category>백준 공부</category>
      <category>스위프트 DP</category>
      <category>스위프트 백준 DP 문제풀이</category>
      <category>코딩테스트 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/205</guid>
      <comments>https://developer-p.tistory.com/205#entry205comment</comments>
      <pubDate>Fri, 6 May 2022 13:36:15 +0900</pubDate>
    </item>
    <item>
      <title>깃허브 2022 졸업 등록 및 참여하는 방법(GitHub Graduation 2022)</title>
      <link>https://developer-p.tistory.com/204</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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;2396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdLCqe/btrA7Fz1f5A/PtiIxYXxs0dHFwY7kHulck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdLCqe/btrA7Fz1f5A/PtiIxYXxs0dHFwY7kHulck/img.png&quot; data-alt=&quot;깃허브에서 온 메일. 이하 생략.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdLCqe/btrA7Fz1f5A/PtiIxYXxs0dHFwY7kHulck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdLCqe%2FbtrA7Fz1f5A%2FPtiIxYXxs0dHFwY7kHulck%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;400&quot; height=&quot;330&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;2396&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;깃허브에서 온 메일. 이하 생략.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 광고인줄 알고 넘어가려 했는데, &lt;b&gt;&lt;u&gt;깃허브 2022 졸업식(GitHub&amp;nbsp;Graduation&amp;nbsp;2022)&lt;/u&gt;에 초대&lt;/b&gt;됐다.&lt;/p&gt;
&lt;div id=&quot;dicLayer&quot; style=&quot;color: #000000; font-size: 13px; font-family: 나눔고딕; background: -webkit-linear-gradient(bottom, #ffffff, #ffffff); width: 400px; height: 150px; left: 480px; top: 10996px; display: none;&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;forever &lt;input id=&quot;ee&quot; type=&quot;checkbox&quot; /&gt;Eng&lt;br /&gt;&lt;br /&gt;&lt;b&gt;forever&lt;/b&gt; 미국∙영국[fərˈevə(r)]&lt;br /&gt;영원히&lt;br /&gt;비격식 아주 오랜 시간&lt;br /&gt;비격식 (동사의 진행형과 함께 쓰여) 쉴 새 없이&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for ever&lt;br /&gt;영국 영원히, 영구히&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For(n)ever&lt;br /&gt;An awesome album by the alternative rock band Hoobastank that comes out on the 27th of January 2009.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'll love you &lt;b&gt;forever&lt;/b&gt;!&lt;br /&gt;난 영원히 당신을 사랑할 거야!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;keep in mind &lt;b&gt;forever&lt;/b&gt;&lt;br /&gt;만세불망하다&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;오픈&lt;br /&gt;&lt;br /&gt;take &lt;b&gt;forever&lt;/b&gt;&lt;br /&gt;직역하면 &amp;lsquo;영원한 시간이 걸린다&amp;rsquo;는 뜻으로, 시간이 오래 걸린다는 뜻이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;since &lt;b&gt;forever&lt;/b&gt;&lt;br /&gt;늘 그래오다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;forever&lt;/b&gt; free&lt;br /&gt;[두운] 영원히 자유로운, 영원히 자유로이&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;friends &lt;b&gt;forever&lt;/b&gt;&lt;br /&gt;[두운] 영원한 친구&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;스탠드업 코미디: I intend to live &lt;b&gt;forever&lt;/b&gt;. So far, so good.&lt;br /&gt;난 영원히 살 작정이야. 아직까진 잘 되고 있지.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;예제&lt;br /&gt;&lt;br /&gt;for ever&lt;br /&gt;영원히.&lt;br /&gt;&lt;br /&gt;I&amp;rsquo;ll love you &lt;b&gt;forever&lt;/b&gt;!&lt;br /&gt;난 영원히 당신을 사랑할 거야!&lt;br /&gt;&lt;br /&gt;It takes her &lt;b&gt;forever&lt;/b&gt; to get dressed.&lt;br /&gt;그녀가 옷을 입는 데는 시간이 아주 오래 걸린다.&lt;br /&gt;&lt;br /&gt;After her death, their lives changed &lt;b&gt;forever&lt;/b&gt;.&lt;br /&gt;그녀가 죽은 후 그들의 삶은 영원히 달라졌다.&lt;br /&gt;&lt;br /&gt;You can&amp;rsquo;t shield her from the truth &lt;b&gt;forever&lt;/b&gt;.&lt;br /&gt;그녀로 하여금 그 진실을 영원히 모르게 할 수는 없어요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VLIVE 자막&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Forever&lt;/b&gt;? - &lt;b&gt;Forever&lt;/b&gt;? - &lt;b&gt;Forever&lt;/b&gt;?&lt;br /&gt;평생? - 평생? - 평생?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Forever&lt;/b&gt;! - &lt;b&gt;Forever&lt;/b&gt;!&lt;br /&gt;포에버! - 영원하자!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Forever&lt;/b&gt;. - &lt;b&gt;Forever&lt;/b&gt;?&lt;br /&gt;계속 해야 돼요 - 계속 해줘야 돼요?&lt;br /&gt;&lt;br /&gt;[012 = &lt;b&gt;forever&lt;/b&gt;] - &lt;b&gt;Forever&lt;/b&gt;. - &lt;b&gt;Forever&lt;/b&gt;!&lt;br /&gt;[012=영원히?] - 영원히! - 영원히!&lt;br /&gt;&lt;br /&gt;&quot;DIA &lt;b&gt;forever&lt;/b&gt;!&quot;. - &lt;b&gt;Forever&lt;/b&gt;.&lt;br /&gt;'다이아 평생 가자'고. - 평생 가야죠.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;{&quot;mean&quot;:[&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt; 미국∙영국[fərˈevə(r)]&amp;lt;br/&amp;gt;영원히&amp;lt;br/&amp;gt;비격식 아주 오랜 시간&amp;lt;br/&amp;gt;비격식 (동사의 진행형과 함께 쓰여) 쉴 새 없이&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;for ever&amp;lt;br/&amp;gt;영국 영원히, 영구히&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;For(n)ever&amp;lt;br/&amp;gt;An awesome album by the alternative rock band Hoobastank that comes out on the 27th of January 2009.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;I'll love you &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;!&amp;lt;br/&amp;gt;난 영원히 당신을 사랑할 거야!&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;keep in mind &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;만세불망하다&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;오픈&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;take &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;직역하면 &amp;lsquo;영원한 시간이 걸린다&amp;rsquo;는 뜻으로, 시간이 오래 걸린다는 뜻이다.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;since &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;늘 그래오다.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt; free&amp;lt;br/&amp;gt;[두운] 영원히 자유로운, 영원히 자유로이&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;friends &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;[두운] 영원한 친구&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;스탠드업 코미디: I intend to live &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;. So far, so good.&amp;lt;br/&amp;gt;난 영원히 살 작정이야. 아직까진 잘 되고 있지.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;예제&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;for ever&amp;lt;br/&amp;gt;영원히.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;I&amp;rsquo;ll love you &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;!&amp;lt;br/&amp;gt;난 영원히 당신을 사랑할 거야!&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;It takes her &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt; to get dressed.&amp;lt;br/&amp;gt;그녀가 옷을 입는 데는 시간이 아주 오래 걸린다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;After her death, their lives changed &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;.&amp;lt;br/&amp;gt;그녀가 죽은 후 그들의 삶은 영원히 달라졌다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;You can&amp;rsquo;t shield her from the truth &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;.&amp;lt;br/&amp;gt;그녀로 하여금 그 진실을 영원히 모르게 할 수는 없어요.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;VLIVE 자막&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;? - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;? - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;?&amp;lt;br/&amp;gt;평생? - 평생? - 평생?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;! - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;!&amp;lt;br/&amp;gt;포에버! - 영원하자!&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;. - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;?&amp;lt;br/&amp;gt;계속 해야 돼요 - 계속 해줘야 돼요?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;[012 = &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;] - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;. - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;!&amp;lt;br/&amp;gt;[012=영원히?] - 영원히! - 영원히!&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;amp;quot;DIA &amp;lt;strong&amp;gt;forever&amp;lt;/strong&amp;gt;!&amp;amp;quot;. - &amp;lt;strong&amp;gt;Forever&amp;lt;/strong&amp;gt;.&amp;lt;br/&amp;gt;'다이아 평생 가자'고. - 평생 가야죠.&amp;lt;/dicwordclass&amp;gt;&quot;],&quot;word&quot;:&quot;forever&quot;,&quot;basicWord&quot;:&quot;forever&quot;,&quot;soundWord&quot;:&quot;forever&quot;,&quot;phoneticSymbol&quot;:&quot;&quot;}&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참여하면 &lt;b&gt;깃허브&lt;/b&gt;의&amp;nbsp;&lt;u&gt;&lt;b&gt;2022 year-book&lt;/b&gt;&lt;/u&gt;에 등재될 수 있다고 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;(2021 year-book은 &lt;a style=&quot;color: #666666;&quot; href=&quot;https://education.github.com/graduation/yearbook?sort=az&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt; 확인할 수 있다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLH0H1/btrA96xnZWZ/ScyqyiZYWmwQWFf26Q9R3k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLH0H1/btrA96xnZWZ/ScyqyiZYWmwQWFf26Q9R3k/img.jpg&quot; data-alt=&quot;GitHub Graduation 2022&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLH0H1/btrA96xnZWZ/ScyqyiZYWmwQWFf26Q9R3k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLH0H1%2FbtrA96xnZWZ%2FScyqyiZYWmwQWFf26Q9R3k%2Fimg.jpg&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;640&quot; height=&quot;296&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitHub Graduation 2022&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/education/GitHubGraduation-2022&quot;&gt;https://github.com/education/GitHubGraduation-2022&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651564985846&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June 11.&quot; data-og-description=&quot;Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June 11. - GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/education/GitHubGraduation-2022&quot; data-og-url=&quot;https://github.com/education/GitHubGraduation-2022&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jXhyc/hyOfd4SGTa/AGVLmX3T2nzch1V1avrUt1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/education/GitHubGraduation-2022&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/education/GitHubGraduation-2022&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jXhyc/hyOfd4SGTa/AGVLmX3T2nzch1V1avrUt1/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;GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June 11.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June 11. - GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;GitHub Graduation 2022에 참여하는 방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. &lt;b&gt;배송 Form&lt;/b&gt;을 &lt;b&gt;제출&lt;/b&gt;한다. 링크에 접속해서 주소, 이름, 개인정보등을 입력하면 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://airtable.com/shrVMo8ItH4wjsO9f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://airtable.com/shrVMo8ItH4wjsO9f&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651565457819&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;Airtable | Everyone's app platform&quot; data-og-description=&quot;Airtable is a low-code platform for building collaborative apps. Customize your workflow, collaborate, and achieve ambitious outcomes. Get started for free.&quot; data-og-host=&quot;www.airtable.com&quot; data-og-source-url=&quot;https://airtable.com/shrVMo8ItH4wjsO9f&quot; data-og-url=&quot;https://airtable.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Prwxc/hyOff9uuU2/7PLNFqkqRUdWOVtbU0bX4k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://airtable.com/shrVMo8ItH4wjsO9f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://airtable.com/shrVMo8ItH4wjsO9f&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Prwxc/hyOff9uuU2/7PLNFqkqRUdWOVtbU0bX4k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Airtable | Everyone's app platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Airtable is a low-code platform for building collaborative apps. Customize your workflow, collaborate, and achieve ambitious outcomes. Get started for free.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.airtable.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. GithubGraduation-2022를 &lt;b&gt;Fork&lt;/b&gt;한다.&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;5036&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s5OQX/btrBajKkenh/mtH9H7m4uCbkaFx6YY6RIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s5OQX/btrBajKkenh/mtH9H7m4uCbkaFx6YY6RIK/img.png&quot; data-alt=&quot;GithubGraduation-2022를 Fork하기.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s5OQX/btrBajKkenh/mtH9H7m4uCbkaFx6YY6RIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs5OQX%2FbtrBajKkenh%2FmtH9H7m4uCbkaFx6YY6RIK%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;5036&quot; height=&quot;228&quot; data-origin-width=&quot;5036&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GithubGraduation-2022를 Fork하기.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우측상단에 Fork를 누르면 내 저장소로 포크된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;잘 모르는 사람들은 링크를 참고하자. (&lt;a href=&quot;https://blog.naver.com/jooeun0502/221932959912&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/jooeun0502/221932959912&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 내 저장소에 포크가 잘 됐다면, &lt;b&gt;내 로컬&lt;/b&gt;에 &lt;b&gt;clone&lt;/b&gt;을 한다.&amp;nbsp;&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;3112&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHZogw/btrBaxauVv9/MIE6yKAKjoB4FqDSwt5DKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHZogw/btrBaxauVv9/MIE6yKAKjoB4FqDSwt5DKk/img.png&quot; data-alt=&quot;내 로컬에 clone.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHZogw/btrBaxauVv9/MIE6yKAKjoB4FqDSwt5DKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHZogw%2FbtrBaxauVv9%2FMIE6yKAKjoB4FqDSwt5DKk%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;208&quot; data-origin-width=&quot;3112&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내 로컬에 clone.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Terminal을 열고, 하단 이미지의 1번처럼 진행한다. (2번, 3번은 나중에)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;번거로우니 Terminal을 닫지 말자.&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;5110&quot; data-origin-height=&quot;1848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8FdaQ/btrBauY7Cpo/ENhF352Sk6kzekmpDLxIV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8FdaQ/btrBauY7Cpo/ENhF352Sk6kzekmpDLxIV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8FdaQ/btrBauY7Cpo/ENhF352Sk6kzekmpDLxIV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8FdaQ%2FbtrBauY7Cpo%2FENhF352Sk6kzekmpDLxIV0%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;217&quot; data-origin-width=&quot;5110&quot; data-origin-height=&quot;1848&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1756&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCVR1z/btrA7GyVJ4G/T1cM7RnEnxbz8lDrnIeX10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCVR1z/btrA7GyVJ4G/T1cM7RnEnxbz8lDrnIeX10/img.png&quot; data-alt=&quot;로컬에 clone 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCVR1z/btrA7GyVJ4G/T1cM7RnEnxbz8lDrnIeX10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCVR1z%2FbtrA7GyVJ4G%2FT1cM7RnEnxbz8lDrnIeX10%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;400&quot; height=&quot;100&quot; data-origin-width=&quot;1756&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로컬에 clone 완료.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 위 이미지처럼, &lt;b&gt;내 깃허브 userName&lt;/b&gt;과&lt;b&gt; 동일한 폴더&lt;/b&gt;를 &lt;b&gt;생성&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의! 반드시 _data폴더 안에 [userName폴더]를 생성해야 한다. (위 이미지처럼 만들면 된다.)&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;size18&quot;&gt;5. &lt;b&gt;userName.md&lt;/b&gt; 파일을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1651566161309&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---
name: Sumin Park
institution: Sejong University  
quote: Live as if you were to die tomorrow. Learn as if you were to live forever.
github_user: SuminPark-developer
---&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;잘 모르겠다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;기존에 있는 &lt;b&gt;yomaokobiah의 .md파일을 복사&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;1724&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDEtrp/btrA6aUQIsC/6ZAk1pD0BLJnd4kDkVZfd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDEtrp/btrA6aUQIsC/6ZAk1pD0BLJnd4kDkVZfd0/img.png&quot; data-alt=&quot;userName.md 파일 생성.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDEtrp/btrA6aUQIsC/6ZAk1pD0BLJnd4kDkVZfd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDEtrp%2FbtrA6aUQIsC%2F6ZAk1pD0BLJnd4kDkVZfd0%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;400&quot; height=&quot;115&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;userName.md 파일 생성.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2478&quot; data-origin-height=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmQ4nB/btrBaux2GpN/dcyMBJQQ9HXWBniOZNqsok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmQ4nB/btrBaux2GpN/dcyMBJQQ9HXWBniOZNqsok/img.png&quot; data-alt=&quot;userName.md 파일 생성 결과.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmQ4nB/btrBaux2GpN/dcyMBJQQ9HXWBniOZNqsok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmQ4nB%2FbtrBaux2GpN%2FdcyMBJQQ9HXWBniOZNqsok%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;2478&quot; height=&quot;800&quot; data-origin-width=&quot;2478&quot; data-origin-height=&quot;800&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;userName.md 파일 생성 결과.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;size18&quot;&gt;6. Terminal에서, 2번과 3번을 입력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2번에서 자신의 루트에 맞게 수정해주는 센스!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3번에서, &lt;b&gt;git push origin&lt;/b&gt; &lt;span style=&quot;color: #dddddd;&quot;&gt;master가 아니라&lt;/span&gt; &lt;b&gt;main&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;5110&quot; data-origin-height=&quot;1848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ejeDyq/btrBbQUGm4g/BokmSqlnJmtoHa0EUwRFYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejeDyq/btrBbQUGm4g/BokmSqlnJmtoHa0EUwRFYk/img.png&quot; data-alt=&quot;Terminal 입력.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejeDyq/btrBbQUGm4g/BokmSqlnJmtoHa0EUwRFYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FejeDyq%2FbtrBbQUGm4g%2FBokmSqlnJmtoHa0EUwRFYk%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;5110&quot; height=&quot;1848&quot; data-origin-width=&quot;5110&quot; data-origin-height=&quot;1848&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Terminal 입력.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;size18&quot;&gt;7. &lt;b&gt;Pull Request&lt;/b&gt;를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Contribute를 누르고, Pull Request를 누르면 된다.&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;1280&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGj25C/btrBbMx3neI/BS81NEc6thSOc88YXfqA61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGj25C/btrBbMx3neI/BS81NEc6thSOc88YXfqA61/img.png&quot; data-alt=&quot;Pull Request 하기.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGj25C/btrBbMx3neI/BS81NEc6thSOc88YXfqA61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGj25C%2FbtrBbMx3neI%2FBS81NEc6thSOc88YXfqA61%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;264&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Pull Request 하기.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;size18&quot;&gt;8. &lt;b&gt;체크리스트&lt;/b&gt;를 &lt;b&gt;체크&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1280&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw72vB/btrBbK75u29/cXNle5L27Yy7qAlWtKKd60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw72vB/btrBbK75u29/cXNle5L27Yy7qAlWtKKd60/img.png&quot; data-alt=&quot;체크리스트 체크 중.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw72vB/btrBbK75u29/cXNle5L27Yy7qAlWtKKd60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw72vB%2FbtrBbK75u29%2FcXNle5L27Yy7qAlWtKKd60%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;400&quot; height=&quot;265&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;체크리스트 체크 중.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf8Xm5/btrA7aOpRv5/hEj3rKZYDeJ5KSSBwbzig1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf8Xm5/btrA7aOpRv5/hEj3rKZYDeJ5KSSBwbzig1/img.png&quot; data-alt=&quot;체크리스트 체크 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf8Xm5/btrA7aOpRv5/hEj3rKZYDeJ5KSSBwbzig1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf8Xm5%2FbtrA7aOpRv5%2FhEj3rKZYDeJ5KSSBwbzig1%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;400&quot; height=&quot;264&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;체크리스트 체크 완료.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;9. Mac에서 작업했는데, 맥의 &lt;b&gt;.DS_Store파일&lt;/b&gt;이 같이 푸쉬돼서 발생한 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;에러&lt;/b&gt;&lt;/span&gt;다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1029&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfX873/btrA7GsfQIU/QaSGHkBcGPxK72apNNQ7e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfX873/btrA7GsfQIU/QaSGHkBcGPxK72apNNQ7e0/img.png&quot; data-alt=&quot;Pull Request 에러 발생.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfX873/btrA7GsfQIU/QaSGHkBcGPxK72apNNQ7e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfX873%2FbtrA7GsfQIU%2FQaSGHkBcGPxK72apNNQ7e0%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;482&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1029&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Pull Request 에러 발생.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9-1. 내 레포지토리에 들어가서 &lt;b&gt;.DS_Store파일&lt;/b&gt;을 &lt;b&gt;삭제&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1280&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b27Qqf/btrA7O5szKF/iO8La5yXLK9WvItKZyAxwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b27Qqf/btrA7O5szKF/iO8La5yXLK9WvItKZyAxwk/img.png&quot; data-alt=&quot;내 레포지토리 - 에러 파일 삭제.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b27Qqf/btrA7O5szKF/iO8La5yXLK9WvItKZyAxwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb27Qqf%2FbtrA7O5szKF%2FiO8La5yXLK9WvItKZyAxwk%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;400&quot; height=&quot;182&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내 레포지토리 - 에러 파일 삭제.&lt;/figcaption&gt;
&lt;/figure&gt;
&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;size18&quot;&gt;9-2. &lt;b&gt;Re-request&lt;/b&gt;를 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;쓰리닷을 누르고, Re-request review를 요청하면 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1280&quot; data-origin-height=&quot;1326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4P5Pt/btrA96EeEA7/ZE9UjNW9gT2ebK6TIM4TF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4P5Pt/btrA96EeEA7/ZE9UjNW9gT2ebK6TIM4TF1/img.png&quot; data-alt=&quot;Re-request 하는 방법.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4P5Pt/btrA96EeEA7/ZE9UjNW9gT2ebK6TIM4TF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4P5Pt%2FbtrA96EeEA7%2FZE9UjNW9gT2ebK6TIM4TF1%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;400&quot; height=&quot;414&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1326&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Re-request 하는 방법.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651567309772&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;Re-Request a PR Review on GitHub&quot; data-og-description=&quot;Learn how to re-request a PR review. At the bottom, above the Merge button, there should be a change requested header if someone has requested a change. Click the down arrow then the three buttons and you can request another review. If the reviewer request&quot; data-og-host=&quot;egghead.io&quot; data-og-source-url=&quot;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&quot; data-og-url=&quot;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://egghead.io/lessons/github-re-request-a-pr-review-on-github&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Re-Request a PR Review on GitHub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how to re-request a PR review. At the bottom, above the Merge button, there should be a change requested header if someone has requested a change. Click the down arrow then the three buttons and you can request another review. If the reviewer request&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;egghead.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;GitHub Graduation 2022 &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참여&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;완료!&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;문제없이 참여 됐다면, 하단 이미지와 같은 메일이 날라온다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;5064&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFUsmC/btrBaR0XdE0/IkMFZTJPPrh6lkE7Or5dS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFUsmC/btrBaR0XdE0/IkMFZTJPPrh6lkE7Or5dS0/img.png&quot; data-alt=&quot;GitHub Graduation 2022 참여 제출 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFUsmC/btrBaR0XdE0/IkMFZTJPPrh6lkE7Or5dS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFUsmC%2FbtrBaR0XdE0%2FIkMFZTJPPrh6lkE7Or5dS0%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;5064&quot; height=&quot;986&quot; data-origin-width=&quot;5064&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitHub Graduation 2022 참여 제출 완료.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ROXjB/btrA7GTmXhI/Hp6g62jIqHOKZ8FJ9fu6sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ROXjB/btrA7GTmXhI/Hp6g62jIqHOKZ8FJ9fu6sK/img.png&quot; data-alt=&quot;GitHub Graduation 2022 PR 성공.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ROXjB/btrA7GTmXhI/Hp6g62jIqHOKZ8FJ9fu6sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FROXjB%2FbtrA7GTmXhI%2FHp6g62jIqHOKZ8FJ9fu6sK%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;400&quot; height=&quot;387&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1239&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitHub Graduation 2022 PR 성공.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;Fork 리스트&lt;/b&gt;에서도 이름을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;https://github.com/education/GitHubGraduation-2022/network/members&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/education/GitHubGraduation-2022/network/members&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651568163530&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June 11.&quot; data-og-description=&quot;Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June 11. - GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &amp;quot;walk the stage&amp;quot; on June...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/education/GitHubGraduation-2022/network/members&quot; data-og-url=&quot;https://github.com/education/GitHubGraduation-2022&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBJVAF/hyOe6YYGGJ/sMZbUsdXnCqbknaNKuy5o0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/education/GitHubGraduation-2022/network/members&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/education/GitHubGraduation-2022/network/members&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBJVAF/hyOe6YYGGJ/sMZbUsdXnCqbknaNKuy5o0/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;GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June 11.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June 11. - GitHub - education/GitHubGraduation-2022: Join the GitHub Graduation Yearbook and &quot;walk the stage&quot; on June...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;888&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu0BkB/btrBgXTInoT/cQalkZRrRKmDyEH2dFfC81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu0BkB/btrBgXTInoT/cQalkZRrRKmDyEH2dFfC81/img.png&quot; data-alt=&quot;GitHub Graduation 2022 Fork 리스트 일부.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu0BkB/btrBgXTInoT/cQalkZRrRKmDyEH2dFfC81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu0BkB%2FbtrBgXTInoT%2FcQalkZRrRKmDyEH2dFfC81%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;483&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;888&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;GitHub Graduation 2022 Fork 리스트 일부.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Live as if you were to die tomorrow. Learn as if you were to live forever.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 발전하기 위해 노력하는 개발자. 늘 열심히 하자.&lt;/p&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3730&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCizft/btrBgV9s3z3/3L4E3A5KsvYgk3eRgZiTF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCizft/btrBgV9s3z3/3L4E3A5KsvYgk3eRgZiTF0/img.png&quot; data-alt=&quot;22.05.04 - 등록 완료 메일.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCizft/btrBgV9s3z3/3L4E3A5KsvYgk3eRgZiTF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCizft%2FbtrBgV9s3z3%2F3L4E3A5KsvYgk3eRgZiTF0%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;3730&quot; height=&quot;456&quot; data-origin-width=&quot;3730&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;22.05.04 - 등록 완료 메일.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>iOS | 앱 개발/iOS 앱 개발</category>
      <category>Github 2022</category>
      <category>Github 2022 Graduation</category>
      <category>Github 2022 year-book</category>
      <category>Github Graduation 참석</category>
      <category>Graduation Github 2022</category>
      <category>Live as if you were to die tomorrow. Learn as if you were to live forever.</category>
      <category>yearbook Github 2022 Graduation</category>
      <category>깃허브</category>
      <category>깃허브 2022</category>
      <category>깃허브 졸업</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/204</guid>
      <comments>https://developer-p.tistory.com/204#entry204comment</comments>
      <pubDate>Tue, 3 May 2022 17:53:24 +0900</pubDate>
    </item>
    <item>
      <title>DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번</title>
      <link>https://developer-p.tistory.com/203</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;dicLayer&quot; style=&quot;color: #000000; font-size: 13px; font-family: 나눔고딕; background: -webkit-linear-gradient(bottom, #ffffff, #ffffff); width: 400px; height: 150px; display: none; left: 271px; top: 1382px;&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;developer &lt;input id=&quot;ee&quot; type=&quot;checkbox&quot; /&gt;Eng&lt;br /&gt;&lt;br /&gt;&lt;b&gt;developer&lt;/b&gt; 미국∙영국[dɪˈveləpə(r)]&lt;br /&gt;(부동산) 개발업자[개발 회사]&lt;br /&gt;(신상품) 개발자[개발 회사]&lt;br /&gt;(사진) 현상액&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;a property &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;부동산 개발 업자[회사]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;late &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;발육[발달, 성장]이 느린 사람; = LATE BLOOMER&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MQ &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;사진 메톨 히드로퀴논 현상약.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;software &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;소프트웨어 개발자&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;오픈&lt;br /&gt;&lt;br /&gt;first party &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;콘솔 제작자가 직접 소유하거나 콘솔 제작자와 특별한 계약을 맺은 개발자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;second-party &lt;b&gt;developer&lt;/b&gt;&lt;br /&gt;콘솔 메이커가 소유하지 않아도 해당 메이커의 콘솔 전용 게임을 제작하는 개발자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm a software &lt;b&gt;developer&lt;/b&gt; at Google.&lt;br /&gt;전 구글에서 개발자로 일하고 있어요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;예제&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;developer&lt;/b&gt; bought the land and divided it into stands.&lt;br /&gt;한 개발업자가 그 땅을 사서 부지로 나누었다.&lt;br /&gt;&lt;br /&gt;a company that is a &lt;b&gt;developer&lt;/b&gt; and marketer of software&lt;br /&gt;소프트웨어를 개발하고 판매하는 회사&lt;br /&gt;&lt;br /&gt;Describe your role as a Software &lt;b&gt;Developer&lt;/b&gt; in your current company.&lt;br /&gt;현 직장에서 소프트웨어 개발자의 역할에 대해 말씀해 보세요.&lt;br /&gt;&lt;br /&gt;Being a software &lt;b&gt;developer&lt;/b&gt;, I continually search the Internet for new trends in programming.&lt;br /&gt;소프트웨어 개발자로서 저는 새로운 프로그래밍 동향을 찾기 위해서 지속적으로 인터넷을 검색합니다.&lt;br /&gt;&lt;br /&gt;Our company is a global market &lt;b&gt;developer&lt;/b&gt; authorized by the Korean government.&lt;br /&gt;본사는 한국 정부가 승인한 글로벌 시장개척 전문기업입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VLIVE 자막&lt;br /&gt;&lt;br /&gt;[Are you a &lt;b&gt;developer&lt;/b&gt;?] And what?&lt;br /&gt;[최소 개발자] 하고 뭐하면 돼요?&lt;br /&gt;&lt;br /&gt;As expected, you're a true &lt;b&gt;developer&lt;/b&gt;. - Of course.&lt;br /&gt;역시 개발자 답네요. - 그럼요.&lt;br /&gt;&lt;br /&gt;I think the &lt;b&gt;developer&lt;/b&gt; for this app likes rabbits.&lt;br /&gt;이거 만든 사람이 토끼를 참 좋아하나 봐요.&lt;br /&gt;&lt;br /&gt;[Endless praise] He was introduced as the genius &lt;b&gt;developer&lt;/b&gt;.&lt;br /&gt;[찬양의 끝] 그때 국내 천재 개발자로 해서...&lt;br /&gt;&lt;br /&gt;If he succeeded as a genius &lt;b&gt;developer&lt;/b&gt; since 1998... - Yes.&lt;br /&gt;98년도부터 이미 천재 개발로 성공을 하셨으면 - 그러니까요.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;{&quot;mean&quot;:[&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; 미국∙영국[dɪˈveləpə(r)]&amp;lt;br/&amp;gt;(부동산) 개발업자[개발 회사]&amp;lt;br/&amp;gt;(신상품) 개발자[개발 회사]&amp;lt;br/&amp;gt;(사진) 현상액&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;a property &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;부동산 개발 업자[회사]&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;late &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;발육[발달, 성장]이 느린 사람; = LATE BLOOMER&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;MQ &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;사진 메톨 히드로퀴논 현상약.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;software &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;소프트웨어 개발자&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;오픈&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;first party &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;콘솔 제작자가 직접 소유하거나 콘솔 제작자와 특별한 계약을 맺은 개발자.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;second-party &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;콘솔 메이커가 소유하지 않아도 해당 메이커의 콘솔 전용 게임을 제작하는 개발자.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;I'm a software &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; at Google.&amp;lt;br/&amp;gt;전 구글에서 개발자로 일하고 있어요.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;예제&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;A &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; bought the land and divided it into stands.&amp;lt;br/&amp;gt;한 개발업자가 그 땅을 사서 부지로 나누었다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;a company that is a &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; and marketer of software&amp;lt;br/&amp;gt;소프트웨어를 개발하고 판매하는 회사&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;Describe your role as a Software &amp;lt;strong&amp;gt;Developer&amp;lt;/strong&amp;gt; in your current company.&amp;lt;br/&amp;gt;현 직장에서 소프트웨어 개발자의 역할에 대해 말씀해 보세요.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;Being a software &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;, I continually search the Internet for new trends in programming.&amp;lt;br/&amp;gt;소프트웨어 개발자로서 저는 새로운 프로그래밍 동향을 찾기 위해서 지속적으로 인터넷을 검색합니다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;Our company is a global market &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; authorized by the Korean government.&amp;lt;br/&amp;gt;본사는 한국 정부가 승인한 글로벌 시장개척 전문기업입니다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;VLIVE 자막&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;[Are you a &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;?] And what?&amp;lt;br/&amp;gt;[최소 개발자] 하고 뭐하면 돼요?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;As expected, you're a true &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;. - Of course.&amp;lt;br/&amp;gt;역시 개발자 답네요. - 그럼요.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;I think the &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; for this app likes rabbits.&amp;lt;br/&amp;gt;이거 만든 사람이 토끼를 참 좋아하나 봐요.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;[Endless praise] He was introduced as the genius &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt;.&amp;lt;br/&amp;gt;[찬양의 끝] 그때 국내 천재 개발자로 해서...&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;If he succeeded as a genius &amp;lt;strong&amp;gt;developer&amp;lt;/strong&amp;gt; since 1998... - Yes.&amp;lt;br/&amp;gt;98년도부터 이미 천재 개발로 성공을 하셨으면 - 그러니까요.&amp;lt;/dicwordclass&amp;gt;&quot;],&quot;word&quot;:&quot;developer&quot;,&quot;basicWord&quot;:&quot;developer&quot;,&quot;soundWord&quot;:&quot;developer&quot;,&quot;phoneticSymbol&quot;:&quot;&quot;}&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP1의 문제양이 많아,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DP1-1&lt;/b&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DP1-2&lt;/b&gt;로 나눕니다. (&lt;b&gt;DP1-1&lt;/b&gt;은 &lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rVxQP/btrAVr9HUYv/4u6CmLNuLLKdZ4jvSTskyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rVxQP/btrAVr9HUYv/4u6CmLNuLLKdZ4jvSTskyK/img.png&quot; data-alt=&quot;DP1-2 문제 번호 모음.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rVxQP/btrAVr9HUYv/4u6CmLNuLLKdZ4jvSTskyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrVxQP%2FbtrAVr9HUYv%2F4u6CmLNuLLKdZ4jvSTskyK%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;400&quot; height=&quot;157&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DP1-2 문제 번호 모음.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651387579841&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&quot; data-og-description=&quot;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; data-og-url=&quot;https://github.com/tony9402/baekjoon&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WFr7a/hyOfbKXKMa/VEAIWtGxbUzgek0DWaZRZk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WFr7a/hyOfbKXKMa/VEAIWtGxbUzgek0DWaZRZk/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;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.01 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.02 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.03 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.05.04 업데이트&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&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651387665345&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dYAXrU/hyOdBYMb30/rIK9qruPsMRsb1IV6gVCBk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dYAXrU/hyOdBYMb30/rIK9qruPsMRsb1IV6gVCBk/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/201&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651810196877&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번, &quot; data-og-description=&quot;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/201&quot; data-og-url=&quot;https://developer-p.tistory.com/201&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/noGlZ/hyOhze77HK/XIt7Nvou5G5rD6nSD8QuB1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/X7zGB/hyOhE8ArKM/h2BjGF8Xpr154WVJnc7Uh1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/eNJOw/hyOhDBQXuz/hdYkEMevSKJutZ0KPkTPx1/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/201&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/201&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/noGlZ/hyOhze77HK/XIt7Nvou5G5rD6nSD8QuB1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/X7zGB/hyOhE8ArKM/h2BjGF8Xpr154WVJnc7Uh1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/eNJOw/hyOhDBQXuz/hdYkEMevSKJutZ0KPkTPx1/img.jpg?width=3024&amp;amp;height=4032&amp;amp;face=0_0_3024_4032');&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;DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번,&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1) DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, DP1-1과 DP1-2로 나눕니다.) 추천문제 번호 모음은 여기서 확인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2294번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 고민해서 풀었지만 틀렸다. 하단의 반례에서 바로 막혔다. 큰 coin부터 돌면서 target을 나눠주고 나뉠때의 count를 배열에 저장하고, 그 중 가장 작은 값을 출력하면 될 거라고 생각했기 때문이다. 최하단의 틀린코드에서 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다른 블로그를 참고해서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;만약 막혀서 글을 찾아오게 된 거라면, dp배열을 0부터 ~ k까지 만들고, dp[0] = 0, 나머지 인덱스엔 10001을 넣고 다시 시도해보길 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;(왜 10001인가? 가능한 합인 k가 최대 10000이니까, 개수를 최대한으로 늘리고 싶으면 1원짜리로 만개를 만들면 된다. 즉, 문제풀이는 동전갯수를 최소한으로 하기 싶기 때문에 dp값의 최대를 100001으로 준다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;TC 1번에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0원을 만들 땐 코인이 0개 필요하다. -&amp;gt; dp[0] = 0&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;&quot;Coin이 1원&quot;&lt;/b&gt;&lt;/u&gt;일 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1원을 만들 땐 코인이 1개 필요하다. -&amp;gt; dp[1] = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2원을 만들 땐 코인이 2개 필요하다. -&amp;gt; dp[2] = dp[1] + 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;... dp[15] = dp[14] + 1 = 15가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;u&gt;&quot;Coin이 5원&quot;&lt;/u&gt;&lt;/b&gt;일 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5원을 만들 땐 코인이 1개 필요하다. 근데 이미 dp[5]에 5가 저장되어 있다. -&amp;gt; dp[5] = min(dp[5], dp[5 - coin] + 1) = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;10원을 만들 땐 코인이 2개 필요하다. 근데 이미 dp[5]에 10이 저장되어 있다. -&amp;gt; dp[10] = min(dp[10], dp[10 - coin] + 1) = 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;... dp[15] = min(dp[15], dp[15 - coin] + 1) = min(15, dp[10] + 1) = min(15, 3) = 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이런식으로 업데이트가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;점화식&lt;/b&gt;&lt;br /&gt;dp[i] = min(dp[i], dp[i - coin] + 1)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;주의해야 할 것은 &lt;b&gt;i - coin&lt;/b&gt;이 범위를 벗어나면 error가 난다. 이는 따로 처리를 해줘야겠지?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;대표 반례&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2 10&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; 5가 아니라 4가 나와야 함.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 링크 : &lt;a href=&quot;https://sihyungyou.github.io/baekjoon-2294/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sihyungyou.github.io/baekjoon-2294/&lt;/a&gt; | &lt;a href=&quot;https://t.ly/RriS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/RriS&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2294번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, k) = (input[0], input[1])
var coins: [Int] = []
for _ in 0..&amp;lt;n {
    coins.append(Int(readLine()!)!)
}
coins.sort(by: &amp;lt;)

var dp: [Int] = [0] + Array(repeating: 10001, count: k) // k의 최대값이 10000이기 때문에. (최대한 개수가 많게 1원짜리로해도 dp값의 최대는 10000이기 때문에.)

for coin in coins {
    for j in 1...k {
        if j - coin &amp;lt; 0 { // dp의 인덱스를 벗어나면 패스.
            continue
        }
        dp[j] = min(dp[j], dp[j - coin] + 1)
    }
}

if dp[k] == 10001 {
    print(-1)
}
else {
    print(dp[k])
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;틀린 코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 코드&lt;/p&gt;
&lt;pre id=&quot;code_1651388119424&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2294번(틀린 코드)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, k) = (input[0], input[1])
var coins: [Int] = []
for _ in 0..&amp;lt;n {
    coins.append(Int(readLine()!)!)
}
coins.sort(by: &amp;gt;)

var possibleCase: [Int] = []
for i in 0..&amp;lt;n {
    var target = k
    var count: Int = 0
    var isDivided: Bool = false // 나눠지는 case인지 구분.
    
    for j in i..&amp;lt;n {
        count += target / coins[j]
        target = target % coins[j]
        if target == 0 { // 이미 k가 됐으면 더 이상 돌아볼 필요 없음.
            isDivided = true
            break
        }
    }
    
    if isDivided {
        possibleCase.append(count)
    }

}

var answer: Int? = possibleCase.min()
if answer == nil { // 만약 가능한 case가 없으면, -1을 출력.
    print(&quot;-1&quot;)
}
else {
    print(answer!)
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 11660번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 백준 11659번을 먼저 풀기를 추천한다. (&lt;a href=&quot;https://www.acmicpc.net/problem/11659&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/11659&lt;/a&gt; | &lt;a href=&quot;https://www.acmicpc.net/board/view/17136&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/17136&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;11659번을 풀고 생각한다면, 하나의 행에서 (a ~ b)의 부분합은 S(b) - S(a-1)일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 이번엔 하나의 행이 아니다. &lt;b&gt;두가지의 단계&lt;/b&gt;를 거치면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;(1,1) ~ (i, j)까지의 합&lt;/b&gt;을 구하는 &lt;b&gt;dp배열&lt;/b&gt;을 우선 구한다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 45.1163%; height: 70px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #c1bef9;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위는 dp배열의 일부이다. 예를 들어 (1,1) ~ (2,2)의 합은 무엇일까? 즉, dp[2][2]는 무엇인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;빨간색과 파란색을 섞으면 보라색이 된다. 보라색은 중복되는 부분이란 소리다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; dp[2][2] = &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;dp[2][1]&lt;/span&gt; + &lt;span style=&quot;background-color: #99cefa;&quot;&gt;dp[1][2]&lt;/span&gt; &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;- dp[1][1]&lt;/span&gt; + arr[2][2]이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열의 점화식은 위와 같다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열을 구했으니, 이젠 &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;답을 구해야 한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예를들어 (2, 2) ~ (3, 4)를 구해보자. 아래는 dp배열의 일부이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;1190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uBZgK/btrAZdQutmK/7gzMqaQNnBkzVeONHKZiHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uBZgK/btrAZdQutmK/7gzMqaQNnBkzVeONHKZiHK/img.png&quot; data-alt=&quot;dp배열 - (2, 2) ~ (3, 4)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uBZgK/btrAZdQutmK/7gzMqaQNnBkzVeONHKZiHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuBZgK%2FbtrAZdQutmK%2F7gzMqaQNnBkzVeONHKZiHK%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;400&quot; height=&quot;317&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;1190&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;dp배열 - (2, 2) ~ (3, 4)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(2, 2) ~ (3, 4)의 &lt;b&gt;구간합&lt;/b&gt;(흰색부분)을 구하기 위해선 어떻게 해야 할까? 위 그림을 참고하면 이해가 쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;전체 D에서 A와 B를 빼주고, 중복으로 뺀 C를 더해주면 흰색부분(구간합)을 구할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, answer = dp[3][4] - dp[3][1] - dp[1][4] + dp[1][1] 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이런식으로 &lt;b&gt;점화식&lt;/b&gt;을 짜면 된다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;점화식&lt;/b&gt;&lt;br /&gt;answer = dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://chanhuiseok.github.io/posts/baek-19/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chanhuiseok.github.io/posts/baek-19/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11660번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var arr: [[Int]] = Array(repeating: [], count: N + 1)
var dp = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)

for _ in 0...N {
    arr[0].append(0)
}

for i in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr[i] = [0] + input
}

for i in 1...N {
    for j in 1...N {
        dp[i][j] = dp[i][j - 1] + dp[i - 1][j] - dp[i - 1][j - 1] + arr[i][j]
    }
}
//print(dp)

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x1, y1, x2, y2) = (input[0], input[1], input[2], input[3])
    
    let answer = dp[x2][y2] - dp[x2][y1 - 1] - dp[x1 - 1][y2] + dp[x1 - 1][y1 - 1]
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 21317번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음엔 푼게 맞은줄 알았다. 근데 아래에 반례를 넣어보니까 안됐다. 처음에 생각했던건 k를 한번만 쓰는거니까 check Bool을 두고, 경우를 나눠줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;왜 틀렸는지에 대해서 생각을 많이 했다. 생각해보니 TC1은 잘 되긴 하지만, N이 짧아서 가능했다. 즉, N이 길어질수록 k가 쓰였을 때의 최소가 되는 값을 알 수 없게 되게 짜서 틀렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp[i][&lt;b&gt;j&lt;/b&gt;]에서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j == 0 : k를 사용하지 않은 경우.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;j == 1 : k를 사용한 경우.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;최소값을 구해야 하는 문제고, 에너지의 최대가 5000이기 때문에 5001을 기본적으로 저장한다. (지금 작성하면서 생각해보니 5001이 아니라, Int의 최대값과 인접한 값을 넣는게 맞는 것 같다. 잘못하면 dp[4][1]의 값에서 문제가 생기는 케이스가 발생할 수 있는 거 같다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1번 돌은 시작점이기 때문에 dp값이 0이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;[0]에 대해 생각해보자.&lt;/b&gt;&lt;/u&gt; (k를 쓰지 않을 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2번 돌은 1번돌에서 smallJ일 때만 가능하기 때문에, dp[2][0] = smallJ[1]이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3번 돌은 1번돌에서 bigJ 혹은 2번돌에서 smallJ가 가능하기 때문에, dp[3][0] = min(dp[1][0] + bigJ[1], dp[2][0] + smallJ[2])이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, [0]의 &lt;b&gt;점화식&lt;/b&gt;은 &lt;b&gt;dp[i][0] = min(dp[i - 1][0] + smallJ[i - 1], dp[i - 2][0] + bigJ[i - 2])&lt;/b&gt; 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4번 돌부터 매우 큰 점프 k를 쓸 수 있다. [0]은 계속 위와 같은 방식이고, &lt;u&gt;&lt;b&gt;[1]에 대해 생각해보자.&lt;/b&gt;&lt;/u&gt;&lt;b&gt; &lt;/b&gt;(k를 쓸 때)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;1번째 돌에서 k를 써서 오는 경우&lt;/u&gt; or &lt;u&gt;2번째 돌에서 bigJ를 써서 오는 경우&lt;/u&gt; or &lt;u&gt;3번째 돌에서 smallJ를 써서 오는 경우&lt;/u&gt;가 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, [1]의&amp;nbsp;&lt;b&gt;점화식&lt;/b&gt;은 &lt;b&gt;dp[i][1] = min(dp[i - 3][0] + k, dp[i - 2][1] + bigJ[i - 2], dp[i - 1][1] + smallJ[i - 1])&lt;/b&gt; 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2928&quot; data-origin-height=&quot;2461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlHV5/btrA96xTCsd/l4hB3tF97hKhUmtIO9kgCk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlHV5/btrA96xTCsd/l4hB3tF97hKhUmtIO9kgCk/img.jpg&quot; data-alt=&quot;백준 Swift 21317번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlHV5/btrA96xTCsd/l4hB3tF97hKhUmtIO9kgCk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlHV5%2FbtrA96xTCsd%2Fl4hB3tF97hKhUmtIO9kgCk%2Fimg.jpg&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;400&quot; height=&quot;336&quot; data-origin-width=&quot;2928&quot; data-origin-height=&quot;2461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 21317번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://blog.naver.com/PostView.nhn?blogId=gustn3964&amp;amp;logNo=222303877311&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/PostView.nhn?blogId=gustn3964&amp;amp;logNo=222303877311&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례&lt;/p&gt;
&lt;pre id=&quot;code_1651485468645&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;6
1 2
2 3
4 5
6 7
8 10
4&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21317번(DP - 반복문)
let N = Int(readLine()!)!
var smallJ: [Int] = [0] + Array(repeating: 0, count: N - 1)
var bigJ: [Int] = [0] + Array(repeating: 0, count: N - 1)
var dp: [[Int]] = Array(repeating: Array(repeating: 5001, count: 2), count: N + 1)
dp[0][0] = 0
dp[0][1] = 0
dp[1][0] = 0
dp[1][1] = 0

for i in 1..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (smallEnergy, bigEnergy) = (input[0], input[1])
    smallJ[i] = smallEnergy
    bigJ[i] = bigEnergy
}

let k: Int = Int(readLine()!)!

if N == 2 {
    dp[2][0] = smallJ[1]
}
else if N == 3 {
    dp[2][0] = smallJ[1]
    dp[3][0] = min(dp[2][0] + smallJ[2], bigJ[1])
}
else if N &amp;gt;= 4 {
    dp[2][0] = smallJ[1]
    dp[3][0] = min(dp[2][0] + smallJ[2], bigJ[1])
    
    for i in 4...N {
        dp[i][0] = min(dp[i - 1][0] + smallJ[i - 1], dp[i - 2][0] + bigJ[i - 2]) // k를 사용하지 않을 때.
        dp[i][1] = min((dp[i - 3][0] + k), (dp[i - 1][1] + smallJ[i - 1]), (dp[i - 2][1] + bigJ[i - 2])) // k를 사용할 때.
    }
}

//print(dp)
print(dp[N].min()!)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린코드&lt;/p&gt;
&lt;pre id=&quot;code_1651582162969&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21317번(DP - 반복문: 틀린코드)
let N = Int(readLine()!)!
var smallJ: [Int] = [0] + Array(repeating: 0, count: N - 1)
var bigJ: [Int] = [0] + Array(repeating: 0, count: N - 1)
var dp: [Int] = [0] + Array(repeating: 0, count: N)

for i in 1..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (smallEnergy, bigEnergy) = (input[0], input[1])
    smallJ[i] = smallEnergy
    bigJ[i] = bigEnergy
}

let k: Int = Int(readLine()!)!

if N == 2 {
    dp[2] = smallJ[1]
}
else if N == 3 {
    dp[2] = smallJ[1]
    dp[3] = min(dp[2] + smallJ[2], bigJ[1])
}
else if N &amp;gt;= 4 {
    dp[2] = smallJ[1]
    dp[3] = min(dp[2] + smallJ[2], bigJ[1])
    
    var useK: Bool = false // k를 썼는지 체크.
    for i in 4...N {
        if !useK { // k를 아직 쓰지 않았을 때,
            var minTemp = min((dp[i - 1] + smallJ[i - 1]), (dp[i - 2] + bigJ[i - 2])) // 잠시 저장.(k를 쓸 때가 가장 작은지 확인하기 위해.)
            
            if dp[i - 3] + k &amp;lt; minTemp { // k를 쓴게 더 작으면,
                minTemp = dp[i - 3] + k
                useK = true // k 사용.
            }
            dp[i] = minTemp
        }
        else { // k를 이미 사용한 상태라면,
            dp[i] = min((dp[i - 1] + smallJ[i - 1]), (dp[i - 2] + bigJ[i - 2]))
        }
    }
}

//print(dp)
print(dp[N])&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 22869번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 풀이를 알고 보면 매우 간단하다. 대부분의 문제가 그렇긴 하겠지만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;최단경로가 아니라, 갈 수 있는지 없는지만 알면 된다. dp배열을 (boolean)배열로 놓고, true일 때만 확인해주면 된다. (난 true/false = 1/0로 했다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고 매 반복문마다 dp[N] == 1인지 체크해서, 1이라면 더 알아볼 필요도 없이 YES하고 break를 하면 시간을 조금 더 단축시킬 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2926&quot; data-origin-height=&quot;2571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdZLe3/btrBfeHYykY/LG1QcXnEDCAXQyFkfpLkBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdZLe3/btrBfeHYykY/LG1QcXnEDCAXQyFkfpLkBk/img.jpg&quot; data-alt=&quot;백준 Swift 22869번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdZLe3/btrBfeHYykY/LG1QcXnEDCAXQyFkfpLkBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdZLe3%2FbtrBfeHYykY%2FLG1QcXnEDCAXQyFkfpLkBk%2Fimg.jpg&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;400&quot; height=&quot;351&quot; data-origin-width=&quot;2926&quot; data-origin-height=&quot;2571&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 22869번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 22869번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var arr: [Int] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

var dp: [Int] = [0] + Array(repeating: 0, count: N)
dp[1] = 1 // 첫번째 돌은 이동가능이라 1로 표시.

var answer: String = &quot;NO&quot;
for i in 1..&amp;lt;N { // 첫번째 돌부터,
    if dp[i] == 1 { // 이동 가능한 곳만 체크.
        for j in i+1...N {
            let power = (j - i) * (1 + abs(arr[i] - arr[j]))
            if power &amp;lt;= K { // 이동가능하다면,
                dp[j] = 1 // 이동가능한곳 1로 표시.
            }
        }
        
        if dp[N] == 1 {
            answer = &quot;YES&quot;
            break
        }
    }
}
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 고민&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2842&quot; data-origin-height=&quot;3844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSLWvb/btrBey0ZkcB/tQkWpKuEYQcij8dNHVcokK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSLWvb/btrBey0ZkcB/tQkWpKuEYQcij8dNHVcokK/img.jpg&quot; data-alt=&quot;백준 Swift 22869번 틀린 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSLWvb/btrBey0ZkcB/tQkWpKuEYQcij8dNHVcokK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSLWvb%2FbtrBey0ZkcB%2FtQkWpKuEYQcij8dNHVcokK%2Fimg.jpg&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;400&quot; height=&quot;541&quot; data-origin-width=&quot;2842&quot; data-origin-height=&quot;3844&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 22869번 틀린 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&lt;span style=&quot;color: #000000; font-size: 1.25em; letter-spacing: -1px; font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;백준 Swift 1106번&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음에 얼추 비슷하게 접근은 했는데 구현을 잘 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열은 i명까지 만드는데 드는 비용을 저장한다. 근데 문제에서 물어보는게 &lt;u&gt;&lt;b&gt;적어도 C명&lt;/b&gt;&lt;/u&gt;일 때의 최소비용이기 때문에, dp[C]가 아니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;적어도 C명이라는건 C명 이상이란 뜻이기도 하고, &lt;b&gt;C를 넘기면서 최소인 상황이 존재하기 때문이다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이해가 되는가? 따라서 &lt;b&gt;dp[C] ~ dp[C+100] 중&lt;/b&gt;에서 &lt;b&gt;최소값&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;비용과 고객 수는 최대 100이다. 값은 Int.max - 100을 해줘야 계산이 error가 안나고, 길이는 C + 100을 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;좀 더 자세한 내용은 아래 풀이에서 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651661029051&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var dp: [Int] = [0] + Array(repeating: Int.max - 100, count: C + 100) // 비용이 최대 100이기 때문에, 최대값 - 100을 해줘야 계산이 가능해진다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&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;1944&quot; data-origin-height=&quot;1700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdsenR/btrBgCcmMdd/6NsIkVN02KIKMWmBHX8AY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdsenR/btrBgCcmMdd/6NsIkVN02KIKMWmBHX8AY1/img.jpg&quot; data-alt=&quot;백준 Swift 1106번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdsenR/btrBgCcmMdd/6NsIkVN02KIKMWmBHX8AY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdsenR%2FbtrBgCcmMdd%2F6NsIkVN02KIKMWmBHX8AY1%2Fimg.jpg&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;400&quot; height=&quot;350&quot; data-origin-width=&quot;1944&quot; data-origin-height=&quot;1700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1106번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://dirmathfl.tistory.com/379&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dirmathfl.tistory.com/379&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1106번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (C, N) = (input[0], input[1])
var ad: [(cost: Int, customer: Int)] = [(0, 0)]

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    ad.append((input[0], input[1]))
}

var dp: [Int] = [0] + Array(repeating: Int.max - 100, count: C + 100) // 비용이 최대 100이기 때문에, 최대값 - 100을 해줘야 계산이 가능해진다.
//var dp: [Int] = [0] + Array(repeating: 10000, count: C + 100)

for (cost, customer) in ad {
    for i in customer...(C+100) {
        dp[i] = min(dp[i], dp[i - customer] + cost)
    }
}

let answer = dp[C...C+100].min()! // C ~ C+100명 늘이는 것 중 돈의 최소값.
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2293번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 쭉 나열해봤는데 모르겠었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;핵심은 &lt;b&gt;새로운 coin이 나타나면서 생길 수 있는 경우의 수&lt;/b&gt;를 &lt;b&gt;기존의 dp값에 더해주는 게 핵심&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;s&gt;내 힘으로 푼 게 아니라서 다음에 다시 풀어봐야겠다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(매우 유사한) 백준 9084번을 다시 풀었다. (풀이 : &lt;a href=&quot;https://developer-p.tistory.com/205&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/205&lt;/a&gt;) - 22.05.12 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1501&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evDJGf/btrBhfPfKFD/cx0aVvITXjbuSm2CgN3ghK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evDJGf/btrBhfPfKFD/cx0aVvITXjbuSm2CgN3ghK/img.jpg&quot; data-alt=&quot;백준 Swift 2293번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evDJGf/btrBhfPfKFD/cx0aVvITXjbuSm2CgN3ghK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevDJGf%2FbtrBhfPfKFD%2Fcx0aVvITXjbuSm2CgN3ghK%2Fimg.jpg&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;400&quot; height=&quot;1074&quot; data-origin-width=&quot;1501&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2293번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;백준 2293번 &lt;b&gt;컴파일 에러&lt;/b&gt;나는 &lt;b&gt;이유 2가지&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 동전의 가치(coin)이 가치들의 합(k)보다 큰 케이스가 있으니, 예외처리를 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 경우의 수가 2^31을 벗어나는 케이스가 있으니, 예외처리를 해줘야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. (Swift만 해당) - 나처럼 바보같이 import Foundation을 빼먹고 작성하면...안된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;pow를 썼는데 어떻게 에러가 뜬 걸 모를 수 있지? 라고 의문이 들 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;작성하던 코드 위쪽에 import Darwin이 있어서 에러가 안나서 몰랐다. (&lt;a href=&quot;https://stackoverflow.com/questions/24012511/mathematical-functions-in-swift&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/24012511/mathematical-functions-in-swift&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2458&quot; data-origin-height=&quot;854&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6KdLd/btrBgoFQXUh/FK8QooS6kybKvVkdAzuKN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6KdLd/btrBgoFQXUh/FK8QooS6kybKvVkdAzuKN0/img.png&quot; data-alt=&quot;백준 Swift 2293번 - 컴파일 에러 지옥.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6KdLd/btrBgoFQXUh/FK8QooS6kybKvVkdAzuKN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6KdLd%2FbtrBgoFQXUh%2FFK8QooS6kybKvVkdAzuKN0%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;208&quot; data-origin-width=&quot;2458&quot; data-origin-height=&quot;854&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2293번 - 컴파일 에러 지옥.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1651671259464&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;반례
1 10000
100000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://seongonion.tistory.com/108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://seongonion.tistory.com/108&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.acmicpc.net/board/view/27103&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/27103&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2293번(DP - 반복문)
import Foundation // pow에 쓰임.
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, k) = (input[0], input[1])
var coins: [Int] = []

for _ in 0..&amp;lt;n {
    coins.append(Int(readLine()!)!)
}
var dp: [Int] = [1] + Array(repeating: 0, count: k) // dp[0] = 1

for coin in coins {
    if coin &amp;gt; k { // 동전의 가치가 합k보다 클 때, 에러를 방지하기 위해.
        continue
    }
    
    for i in coin...k {
        if dp[i] + dp[i - coin] &amp;gt; Int(pow(2.0, 31.0)) { // 경우의 수가 2^31을 벗어나는 경우, 에러를 방지하기 위해.
            dp[i] = 0
        }
        else {
            dp[i] = dp[i] + dp[i - coin]
        }
    }
}

print(dp[k])&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>DP PS 스위프트</category>
      <category>DP Swift</category>
      <category>DP 문제풀이</category>
      <category>Dynamic Programming</category>
      <category>Swift DP PS</category>
      <category>Swift DP문제</category>
      <category>Swift 문제풀이</category>
      <category>Swift 백준 DP 문제풀이</category>
      <category>백준 dp문제</category>
      <category>백준 Swift</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/203</guid>
      <comments>https://developer-p.tistory.com/203#entry203comment</comments>
      <pubDate>Sun, 1 May 2022 15:49:54 +0900</pubDate>
    </item>
    <item>
      <title>DP(1-1) 문제 풀이 모음 | 백준 Swift 2748번, 11051번, 2839번, 1010번, 9655번, 17626번, 1463번, 9095번, 15988번, 11726번, 2579번, 11727번, 2407번, 11053번, 1912번, 11055번, 1890번, 9465번, 15486번, 2156번, 10844번</title>
      <link>https://developer-p.tistory.com/201</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;문제 유형 중,  DP의 추천문제들을 풀어보려고 합니다. (Dynamic Programming 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DP1과 DP2 중 DP1부터 풀어나가겠습니다. (DP1의 문제양이 많아, &lt;b&gt;DP1-1&lt;/b&gt;과 &lt;b&gt;DP1-2&lt;/b&gt;로 나눕니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천문제 번호 모음은 &lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기서&lt;/a&gt; 확인할 수 있습니다. 브론즈, 실버, 골드가 섞여있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;1276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0BLIu/btrzLHY1TtB/qxs6MlsXXxp3WnikTsRLnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0BLIu/btrzLHY1TtB/qxs6MlsXXxp3WnikTsRLnk/img.png&quot; data-alt=&quot;추천문제 번호 모음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0BLIu/btrzLHY1TtB/qxs6MlsXXxp3WnikTsRLnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0BLIu%2FbtrzLHY1TtB%2Fqxs6MlsXXxp3WnikTsRLnk%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;400&quot; height=&quot;744&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;1276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;추천문제 번호 모음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649999428283&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&quot; data-og-description=&quot;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; data-og-url=&quot;https://github.com/tony9402/baekjoon&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jP8vX/hyN2DozYvf/UX9LicASBgBpk4LFn1KUy0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/dynamic_programming_1&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jP8vX/hyN2DozYvf/UX9LicASBgBpk4LFn1KUy0/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;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.15업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.16 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.17 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.18 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.19 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.22 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.23 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.25 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.26 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.28 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.29 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.30 업데이트&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&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649999304140&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXhPcj/hyN2yOqtlL/55kJ3v76J9wBgBHVYICfN0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXhPcj/hyN2yOqtlL/55kJ3v76J9wBgBHVYICfN0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/203&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651810135742&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&quot; data-og-description=&quot;백준 Swift 2293번 Eng 백준 Swift 2293번 {&amp;quot;mean&amp;quot;:[&amp;quot; swift 미국∙영국[swɪft] (일진행 등이) 신속한[재빠른] (움직임이) 빠른[날랜] 칼새 &amp;quot;,&amp;quot; 번 (횟수, 차례, 경우) time, occasion; (시도) try (번호) number..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/203&quot; data-og-url=&quot;https://developer-p.tistory.com/203&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zC4BH/hyOhtsr5li/wDWdixFKTKtx1JEo2zqLDk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DYiit/hyOhuSpkpb/flG9nV6uVVvHx3ffRhktu1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/dm0Rzm/hyOhqCtTrU/kGpqCvQDpWhGXZRZruvPV1/img.jpg?width=1501&amp;amp;height=4032&amp;amp;face=0_0_1501_4032&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/203&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/203&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zC4BH/hyOhtsr5li/wDWdixFKTKtx1JEo2zqLDk/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/DYiit/hyOhuSpkpb/flG9nV6uVVvHx3ffRhktu1/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/dm0Rzm/hyOhqCtTrU/kGpqCvQDpWhGXZRZruvPV1/img.jpg?width=1501&amp;amp;height=4032&amp;amp;face=0_0_1501_4032');&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;DP(1-2) 문제 풀이 모음 | 백준 Swift 2294번, 11660번, 21317번, 22869번, 1106번, 2293번&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift 2293번 Eng 백준 Swift 2293번 {&quot;mean&quot;:[&quot; swift 미국∙영국[swɪft] (일진행 등이) 신속한[재빠른] (움직임이) 빠른[날랜] 칼새 &quot;,&quot; 번 (횟수, 차례, 경우) time, occasion; (시도) try (번호) number..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2748번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 브론즈1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP - 재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2748번(DP - 탑다운)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: 91)
cache[0] = 0
cache[1] = 1

func fibo(_ num: Int) -&amp;gt; Int {
    if cache[num] == -1 {
        cache[num] = fibo(num - 1) + fibo(num - 2)
    }
    return cache[num]
}

let answer = fibo(n)
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;DP - 반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999562621&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2748번(DP - 바텀업)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: n + 1)
cache[0] = 0
cache[1] = 1

if n &amp;gt;= 2 {
    for i in 2...n {
        cache[i] = cache[i - 1] + cache[i - 2]
    }
}
print(cache[n])

//var numArray = [0, 1]
//
//func fibo(_ num: Int) -&amp;gt; Int {
//    if num &amp;gt;= 2 {
//        for i in 2...n {
//            numArray.append(numArray[i-1] + numArray[i-2])
//        }
//    }
//    return numArray[num]
//}
//print(fibo(n))&lt;/code&gt;&lt;/pre&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;백준 Swift 11051번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- DP문제들을 처음 접해보는데, 점화식을 알아내서 세우는 게 어려운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11051번(DP - 재귀함수)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var cache = Array(repeating: Array(repeating: -1, count: K + 1), count: N + 1)

func bino(_ n: Int, _ k: Int) -&amp;gt; Int {
    if cache[n][k] != -1 {
        return cache[n][k]
    }
    
    if k == 0 || k == n {
        cache[n][k] = 1
    }
    else {
        cache[n][k] = (bino(n - 1, k - 1) + bino(n - 1, k)) % 10007 // 나중에 answer에서 mod를 해주면 안됨.(그러면 Int범위 초과)
    }
    
    return cache[n][k]
}

let answer = bino(N, K)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11051번(DP - 반복문)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var cache = Array(repeating: Array(repeating: -1, count: K + 1), count: N + 1)

for j in 1...N {
    for i in 0...K {
        if i == 0 || i == j {
            cache[j][i] = 1
        }
        else {
            cache[j][i] = (cache[j - 1][i - 1] + cache[j - 1][i]) % 10007 // 나중에 mod해주면 Int범위 초과.
        }
    }
}
print(cache[N][K])&lt;/code&gt;&lt;/pre&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;백준 Swift 2839번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀 - 생각 못했다. 그리디로 풀면 풀 수 있을 거 같은데, 재귀로 풀려니까 어려웠다. 분기 조건을 눈치채야 하는데... 쭉 써 봤는데 그래도 알아내는 게 어려운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복문 - 재귀로 풀고 나서 해서 그런지, 쉽게 풀었다. 재귀함수 다루는 걸 어려워 하는 것도 한 몫 하는 것 같다. 얼른 익숙해지도록 노력해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;swift는 for문을 돌릴 때, for문의 범위를 벗어나는 N이 들어오면 Error가 뜬다. 그래서 for문 밖에 if문을 넣어서 해결하면 된다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(파이썬은 에러없이 알아서 패스해주던데...)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://velog.io/@hye0n/BOJPython-2839.%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@hye0n/BOJPython-2839.%EC%84%A4%ED%83%95-%EB%B0%B0%EB%8B%AC&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2839번(DP - 재귀함수)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 5001)
(cache[3], cache[5]) = (1, 1)

func topDown(_ num: Int) -&amp;gt; Int {
    if num &amp;lt;= 0 { // topDown(num-5) 때문에 인덱스를 벗어나게 되면 -1을 리턴.
        return -1
    }

    if cache[num] != -1 { // 결과값이 있다면, 더 돌아볼 필요 없이 결과값 리턴.
        return cache[num]
    }
    
    if num % 5 == 0 { // 5의 배수일 때,
        cache[num] = topDown(num - 5) + 1 // 현재num의 결과값 = 이전 5의배수의 결과값 + 1
    }
    else if num % 3 == 0 { // 3의 배수일 때,
        cache[num] = topDown(num - 3) + 1 // 현재num의 결과값 = 이전 3의배수의 결과값 + 1
    }
    else if topDown(num - 5) != -1 { // 이전(num-5)가 값이 있다면,
        cache[num] = topDown(num - 5) + 1 // 현재num의 결과값 = 이전 결과값 + 1
    }
    else if topDown(num - 3) != -1 { // 이전(num-3)가 값이 있다면,
        cache[num] = topDown(num - 3) + 1 // 현재num의 결과값 = 이전 결과값 + 1
    }
//    else {
//        cache[num] = -1
//    }
    
    return cache[num]
}

print(topDown(N))&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2839번(DP - 반복문)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 5001)
cache[3] = 1

if N &amp;gt;= 5 { // i - 5를 체크할 때 인덱스를 벗어나는걸 방지하기 위해, N &amp;gt;= 5 부터 for문 시작.
    for i in 5...N {
        if i % 5 == 0 { // 5로 나뉘면,
            cache[i] = i / 5
        }
        else if i % 3 == 0 { // 3으로 나뉘면,
            cache[i] = cache[i - 3] + 1 // 이전 결과값 + 1
        }
        else if (cache[i - 5] != -1) { // 이전(i-5)이 값이 있다면,
            cache[i] = cache[i - 5] + 1 // 현재 결과값 = 이전 결과값 + 1
        }
        else if (cache[i - 3] != -1) { // 이전(i-3)이 값이 있다면,
            cache[i] = cache[i - 3] + 1 // 현재 결과값 = 이전 결과값 + 1
        }
    }
}
print(cache[N])&lt;/code&gt;&lt;/pre&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;백준 Swift 1010번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;1750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ooOkX/btrzwPKBMuh/PUG0PECCNaqFKbec5Hxxlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ooOkX/btrzwPKBMuh/PUG0PECCNaqFKbec5Hxxlk/img.jpg&quot; data-alt=&quot;백준 Swift 1010번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ooOkX/btrzwPKBMuh/PUG0PECCNaqFKbec5Hxxlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FooOkX%2FbtrzwPKBMuh%2FPUG0PECCNaqFKbec5Hxxlk%2Fimg.jpg&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;400&quot; height=&quot;174&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;1750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1010번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀 - 오로지 내 힘으로 풀었다! 아까 이항 계수(파스칼의 삼각형) 공식을 배워놔서, 풀 수 있었다. (백준 11051번)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;DP문제를 풀 때 자주 나온다고 하니 잊지 않도록 해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복문 - 역시 재귀와 마찬가지로, 이항계수 점화식을 활용해 풀 수 있었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;이항계수 조건 및 점화식&lt;br /&gt;bino(n, 0) = 1&lt;br /&gt;bino(n, n) = 1&lt;br /&gt;bino(n, r) = bino(n-1, r-1) + bino(n-1, r)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1010번(DP - topDown)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (N, M) = (input[0], input[1])
    
    var cache = Array(repeating: Array(repeating: -1, count: 30), count: 30)
    func bino(_ m: Int, _ n: Int) -&amp;gt; Int { // 이항계수
        if cache[m][n] != -1 {
            return cache[m][n]
        }
        
        if n == 0 || n == m { // mC0 이나 mCm일 때,
            cache[m][n] = 1
        }
        else { // n이 1 ~ m-1일 땐,
            cache[m][n] = bino(m - 1, n - 1) + bino(m - 1, n)
        }
        
        return cache[m][n]
    }
    let answer = bino(M, N)
    print(answer)
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1010번(DP - bottomUp)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (N, M) = (input[0], input[1])
//
//    var cache = Array(repeating: Array(repeating: -1, count: N + 1), count: M + 1)
//
//    for i in 1...M {
//        for j in 0...N {
//            if j == 0 || j == i {
//                cache[i][j] = 1
//            }
//            else {
//                cache[i][j] = cache[i - 1][j - 1] + cache[i - 1][j]
//            }
//        }
//    }
    var cache = Array(repeating: Array(repeating: -1, count: 30), count: 30)
    for i in 1..&amp;lt;30 {
        cache[i][i] = 1
        cache[i][0] = 1
        for j in 1..&amp;lt;i {
            cache[i][j] = cache[i - 1][j - 1] + cache[i - 1][j]
        }
    }
    print(cache[M][N])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 9655번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 이 문제는 DP가 아니라, 그냥 쭉 써보고 홀수&amp;amp;짝수로 나누면 풀리는 문제였다.(3번째 코드)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 DP로 분류가 되어 있으니까 DP로도 풀어보려 했는데, 잘 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;고민하다가 다른 블로그들을 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0urpk/btrzw9CU9hC/N4AFJbyKikFAjkO5IkSsSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0urpk/btrzw9CU9hC/N4AFJbyKikFAjkO5IkSsSk/img.jpg&quot; data-alt=&quot;백준 Swift 9655번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0urpk/btrzw9CU9hC/N4AFJbyKikFAjkO5IkSsSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0urpk%2Fbtrzw9CU9hC%2FN4AFJbyKikFAjkO5IkSsSk%2Fimg.jpg&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;400&quot; height=&quot;300&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9655번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀가 익숙치 않아서 그런지, 문제를 풀 때 반복문이 더 쉬운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;앞으론 DP문제를 접근할 때 반복문으로 먼저 접근을 하고, 재귀로 재접근을 하는 식으로 푸는 게 나을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(알고리즘 코테 강의에선 재귀가 더 쉽다고 했는데... 난이도 느끼는건 사람마다 다른 거니깐...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;BottomUp(반복문)&lt;/b&gt;은 n-3과 n-1의 결과값을 계속 끌고 올라가면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의해야 할 건, n-3이 있기 때문에, cache에 인덱스1, 2, 3의 값은 저장해놓고, n을 4부터 반복문을 돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;TopDown(재귀)&lt;/b&gt;은 주어진 n값에서, n-3과 n-1의 값을 반복해서 호출하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반복문과 마찬가지로, 인덱스 1, 2, 3의 값은 예외처리 해주고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;추가적으로 cache[n] 값이 -1이 아닐 땐 방문한 적이 있다(=값이 저장되어 있다.)는 뜻이므로, 바로 값을 리턴해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://beginnerdeveloper-lit.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://beginnerdeveloper-lit.tistory.com/83&lt;/a&gt; | &lt;/span&gt;&lt;a href=&quot;https://propercoding.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;https://propercoding.tistory.com/21&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9655번(DP - 재귀함수)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001)

func topDown(_ n: Int) -&amp;gt; Int {
    if cache[n] != -1 { // 기록된 적 있으면, 더 확인할 필요 없이 저장된 값을 리턴.
        return cache[n]
    }
    
    if n == 3 || n == 1 { // n이 1이나 3일 땐, 게임횟수 1.
        cache[n] = 1
    }
    else if n == 2 { // n이 2일 땐, 게임횟수 2.
        cache[n] = 2
    }
    else { // n이 4이상일 땐, 이전 기록(n-3, n-1) 중 작은것 + 1
        cache[n] = min(topDown(n - 3), topDown(n - 1)) + 1
    }
    
    return cache[n]
}

if topDown(N) % 2 == 1 { // 게임횟수가 홀수면,
    print(&quot;SK&quot;)
}
else { // 게임횟수가 짝수면,
    print(&quot;CY&quot;)
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9655번(DP - 반복문)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001) // 게임 과정 기록.
cache[2] = 2
cache[3] = 1

if N &amp;gt;= 4 {
    for i in 4...N {
        cache[i] = min(cache[i - 3], cache[i - 1]) + 1
    }
}

if cache[N] % 2 == 1 { // 게임한 횟수가 홀수면,
    print(&quot;SK&quot;)
}
else { // 게임한 횟수가 짝수면,
    print(&quot;CY&quot;)
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;그냥 풀이&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650090648413&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9655번(그냥 풀이)
let N = Int(readLine()!)!
if N % 2 == 1 {
    print(&quot;SK&quot;)
}
else {
    print(&quot;CY&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 17626번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt; 쭉 써봐도 규칙을 못찾겠었다. 결국엔 다른 블로그를 참고해서 이해했다. 점화식을 구하는 게 핵심인데, 아직 어려운 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3VRaK/btrzx93FWHy/aGmtpUwED7M4GkZwpQP1x1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3VRaK/btrzx93FWHy/aGmtpUwED7M4GkZwpQP1x1/img.jpg&quot; data-alt=&quot;백준 Swift 17626번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3VRaK/btrzx93FWHy/aGmtpUwED7M4GkZwpQP1x1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3VRaK%2Fbtrzx93FWHy%2FaGmtpUwED7M4GkZwpQP1x1%2Fimg.jpg&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;400&quot; height=&quot;533&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 17626번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의사항은, i보다 이전 숫자 중, 가장 큰 제곱수의 결과값 + 1이 답이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례 : 12일 때 dp[3^2] + 1을 하면 4인데, 실제론 2^2 + 2^2 + 2^2 해서 3이 나와야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀함수로 푼 코드는 없는 거 같아서, 시도해봤는데 Xcode에서 시간초과가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;혹시나 몰라서 백준에 제출해보니 백준에선 통과가 됐다. 아마 depth가 깊어지면서 xcode에선 막는 것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;어떻게 수정해야 하는진 모르겠는데, 아시는 분은 댓글로 꼭 알려주세요! (&lt;a href=&quot;https://www.acmicpc.net/board/view/88588&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/88588&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;1456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kH1Va/btrzxbgDW1P/g2VkNjVJbYj7n6TQER7bAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kH1Va/btrzxbgDW1P/g2VkNjVJbYj7n6TQER7bAK/img.png&quot; data-alt=&quot;백준 Swift 17626번 - 재귀함수 문제 발생.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kH1Va/btrzxbgDW1P/g2VkNjVJbYj7n6TQER7bAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkH1Va%2FbtrzxbgDW1P%2Fg2VkNjVJbYj7n6TQER7bAK%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;400&quot; height=&quot;364&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;1456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 17626번 - 재귀함수 문제 발생.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://loosie.tistory.com/229&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/229&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17626번(DP - 재귀함수) - 시간초과
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: n + 1)
//cache[0] = 0
//cache[1] = 1

func topDown(_ num: Int) -&amp;gt; Int {
    if cache[num] != -1 {
        return cache[num]
    }
    
    if num == 0 || num == 1 {
        cache[num] = num
    }
    else {
        var minValue = 50001
        var i = 1
        while i * i &amp;lt;= num {
            minValue = min(minValue, topDown(num - i * i))
            i += 1
        }
        cache[num] = minValue + 1
    }
    return cache[num]
}

print(topDown(n))&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17626번(DP - 반복문)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: n + 1)
cache[0] = 0
cache[1] = 1

if n &amp;gt;= 2 {
    for i in 2...n {
        var minValue = 50001
        var j = 1
        while j * j &amp;lt;= i { // 제곱했을 때 i의 범위를 벗어나지 않을 때,
            minValue = min(minValue, cache[i - j * j]) // i보다 작은, 가능한 제곱수들 중 가장 작은 값으로. 가능한 최소여야 하기 때문.
            j += 1
        }
        cache[i] = minValue + 1 // 값 + 1을 해줘야 해당 결과값이 나옴.
//        print(cache)
    }
}
print(cache[n])&lt;/code&gt;&lt;/pre&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;백준 Swift 1463번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;쭉 작성하다 보니까 규칙이 보였다. 처음엔 3이나 2로 나뉘면, 그 값 + 1이 결과값이라고 생각했다. &lt;b&gt;아니다!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하단 이미지의 dp[10]을 보면 알겠지만, 10에서 -1연산을 하고, 3으로 나눠주는 연산을 하는게 최소다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;즉, 3으로 나뉠 때, min(dp [i / 3], dp[i - 1]) + 1이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2로 나뉠때도 마찬가지로, min(dp [i / 2], dp[i - 1]) + 1이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;이렇게 코드를 짜고 틀렸다. 왜 틀렸을까?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의해야 할 것은, &lt;u&gt;&lt;b&gt;3과 2가 동시에 나뉘는 6의 배수일 때다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3과 2로 나뉘는 수일 땐, &lt;b&gt;dp[i/3] 값과 dp[i/2]값 중 작은 값&lt;/b&gt;으로 계산을 해줘야 한다. &lt;b&gt;+1&lt;/b&gt;은 당연히 해줘야 하고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;반례는 642다. (정답: 10, 오답: 11) 6의 배수를 고려하지 않았던 첫 코드는 오답이 나온다. &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(대표 반례 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.acmicpc.net/board/view/49959&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/49959&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV5KHy/btrzyXB7NW8/VYoFsxcX3rcXKU9YuTz1Hk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV5KHy/btrzyXB7NW8/VYoFsxcX3rcXKU9YuTz1Hk/img.jpg&quot; data-alt=&quot;백준 Swift 1463번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV5KHy/btrzyXB7NW8/VYoFsxcX3rcXKU9YuTz1Hk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV5KHy%2FbtrzyXB7NW8%2FVYoFsxcX3rcXKU9YuTz1Hk%2Fimg.jpg&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;400&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1463번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;재귀함수 코드보다, &lt;u&gt;반복문 코드를 먼저 보고 이해하기를 추천한다.&lt;/u&gt; (개인적으론 그게 더 쉽다..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1463번(DP - 재귀함수)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1000001)

func topDown(_ n: Int) -&amp;gt; Int {
    if cache[n] != -1 {
        return cache[n]
    }
    if n &amp;lt;= 0 {
        return -1
    }
    
    if n &amp;lt;= 3 { // 3이하일 땐, 기본값 세팅.
        cache[1] = 0
        cache[2] = 1
        cache[3] = 1
    }
    else { // 4이상일 땐,
        if n % 6 == 0 {
            cache[n] = min(topDown(n / 3), topDown(n / 2), topDown(n - 1)) + 1
        }
        else if n % 3 == 0 {
            cache[n] = min(topDown(n / 3), topDown(n - 1)) + 1
        }
        else if n % 2 == 0 {
            cache[n] = min(topDown(n / 2), topDown(n - 1)) + 1
        }
        else {
            cache[n] = topDown(n - 1) + 1
        }
    }
    
    return cache[n]
}

let answer = topDown(N)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1463번(DP - 반복문)
let N = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1000001)
cache[1] = 0
cache[2] = 1
cache[3] = 1

if N &amp;gt;= 4 {
    for i in 4...N {
        if i % 3 == 0 &amp;amp;&amp;amp; i % 2 == 0 { // 6의 배수일 때 -&amp;gt; (/3 연산, /2 연산, -1연산) 중 작은 값 + 1
            cache[i] = min(cache[i / 3], cache[i / 2], cache[i - 1]) + 1
        }
        else if i % 3 == 0 { // 3의 배수일 때 -&amp;gt; (/3 연산, -1연산) 중 작은 값 + 1
            cache[i] = min(cache[i / 3], cache[i - 1]) + 1
        }
        else if i % 2 == 0 { // 2의 배수일 때 -&amp;gt; (/2 연산, -1연산) 중 작은 값 + 1
            cache[i] = min(cache[i / 2], cache[i - 1]) + 1
        }
        else { // 다 해당되지 않으면, -1연산 값 + 1
            cache[i] = cache[i - 1] + 1
        }
    }
}
print(cache[N])&lt;/code&gt;&lt;/pre&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;백준 Swift 9095번, 15988번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;9095번을 먼저 푸는 걸 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;탑다운dp보다 바텀업dp를 권장한다고 한다. (참고 : &lt;a href=&quot;https://www.acmicpc.net/board/view/70869&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/70869&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;쭉 적어봤을 때 규칙을 찾으려 했는데 못 찾았다. 고민하다 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2789&quot; data-origin-height=&quot;3058&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sggid/btrzDue7weS/ozzQK2NyzcMCzyk29caTb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sggid/btrzDue7weS/ozzQK2NyzcMCzyk29caTb0/img.jpg&quot; data-alt=&quot;백준 Swift 9095번, 15988번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sggid/btrzDue7weS/ozzQK2NyzcMCzyk29caTb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsggid%2FbtrzDue7weS%2FozzQK2NyzcMCzyk29caTb0%2Fimg.jpg&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;400&quot; height=&quot;439&quot; data-origin-width=&quot;2789&quot; data-origin-height=&quot;3058&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9095번, 15988번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그렇게 나온 점화식은 &lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;&lt;u&gt;&lt;b&gt;dp[n] = dp[n-1] + dp[n-2] + dp[n-3]&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;15988번을 기존에 썼던 코드를 확인 안하고 그대로 넣었더니 &lt;b&gt;틀렸다.&lt;/b&gt; 매우 당황스러웠는데, 그 이유는 3가지였다. &lt;b&gt;틀린 이유 3이 제일 중요하다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;틀린 이유 1. cache범위를 늘리지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;틀린 이유 2. 문제에 주어진 수(1000000009)로 나누지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;틀린 이유 3. 시간초과가 나서 생각해보니, 9095번처럼 코드를 짜면 안됐다. 그렇게 하면 매 n마다, cache값을 다시 구하기 때문이다. (이미 값을 구한 적이 있음에도 불구하고.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그래서 모든 값을 먼저 구해서 저장해놓고, 그 다음 결과값만 호출하는 식으로 수정해서 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3, 실버2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://blog.naver.com/PostView.nhn?blogId=vjhh0712v&amp;amp;logNo=221470862600​&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/PostView.nhn?blogId=vjhh0712v&amp;amp;logNo=221470862600​&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;9095번&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9095번(DP - 재귀함수)
let T = Int(readLine()!)!
var cache = Array(repeating: -1, count: 11)

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    
    let answer = topDown(n)
    print(answer)
}

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != -1 {
        return cache[N]
    }
    
    if N &amp;lt;= 3 {
        cache[1] = 1
        cache[2] = 2
        cache[3] = 4
    }
    else {
        cache[N] = topDown(N - 1) + topDown(N - 2) + topDown(N - 3)
    }
    
    return cache[N]
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9095번(DP - 반복문)
let T = Int(readLine()!)!
var cache = Array(repeating: -1, count: 11)
cache[1] = 1
cache[2] = 2
cache[3] = 4

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    
    if n &amp;gt;= 4 { // 4부터 점화식 성립.
        for i in 4...n {
            cache[i] = cache[i - 1] + cache[i - 2] + cache[i - 3]
        }
    }
    
    print(cache[n])
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;15988번&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15988번(DP - 재귀함수) : Xcode에선 에러
let T = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1000001)

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != -1 {
        return cache[N]
    }
    
    if N &amp;lt;= 3 {
        cache[1] = 1
        cache[2] = 2
        cache[3] = 4
    }
    else {
        cache[N] = (topDown(N - 1) + topDown(N - 2) + topDown(N - 3)) % 1000000009
    }
    
    return cache[N]
}

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    let answer = topDown(n)
    print(answer)
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15988번(DP - 반복문)
let T = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1000001)
cache[1] = 1
cache[2] = 2
cache[3] = 4

for i in 4...1000000 { // 4부터 점화식 성립.
    cache[i] = (cache[i - 1] + cache[i - 2] + cache[i - 3]) % 1000000009
}

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    print(cache[n])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11726번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;어렵지 않게 풀 수 있었다. DP문제는 쭉 나열하면서 표를 그린 뒤, 점화식을 구하는 게 핵심인 것 같다. 점화식을 구하는 게 어려워서 그렇지...&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 그림을 보면, 직사각형이 어떻게 채워지고 갯수는 몇 개가 나오는지 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2761&quot; data-origin-height=&quot;2856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnWOtQ/btrzGgAvmaO/dvN6rJNMSclKBAiYsiQik1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnWOtQ/btrzGgAvmaO/dvN6rJNMSclKBAiYsiQik1/img.jpg&quot; data-alt=&quot;백준 Swift 11726번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnWOtQ/btrzGgAvmaO/dvN6rJNMSclKBAiYsiQik1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnWOtQ%2FbtrzGgAvmaO%2FdvN6rJNMSclKBAiYsiQik1%2Fimg.jpg&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;400&quot; height=&quot;414&quot; data-origin-width=&quot;2761&quot; data-origin-height=&quot;2856&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 11726번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11726번(DP - 재귀함수)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001)

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != -1 {
        return cache[N]
    }
    
    if N &amp;lt;= 2 {
        cache[N] = N
    }
    else {
        cache[N] = (topDown(N - 1) + topDown(N - 2)) % 10007
    }
    return cache[N]
}

print(topDown(n))&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11726번(DP - 반복문)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001)
cache[1] = 1
cache[2] = 2

if n &amp;gt;= 3 {
    for i in 3...n {
        cache[i] = (cache[i - 1] + cache[i - 2]) % 10007
    }
}
print(cache[n])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot; style=&quot;color: #000000; font-size: 13px; font-family: 나눔고딕; background: -webkit-linear-gradient(bottom, #ffffff, #ffffff); width: 400px; height: 150px; left: 475px; top: 56855px; display: block;&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;DP &lt;input id=&quot;ee&quot; type=&quot;checkbox&quot; /&gt;Eng&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DP&lt;/b&gt;&lt;br /&gt;data processing, degree of polymerization [화학] 중합도(重合度), [야구] designated player, dew point, displaced person, doctor of pharmacy, double play&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;dp&lt;/b&gt;&lt;br /&gt;data processing, [야구] double play&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;D/P&lt;br /&gt;상업 documents against payment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;D.P.&lt;br /&gt;의학 적당(適當)한 지시(指示)대로, L. directione propria의 약자.&lt;br /&gt;의학 약학박사(藥學博士) Doctor of Pharmacy의 약자.&lt;br /&gt;의학 수족치료의사(手足治療醫師). Doctor of Podiatry의 약자.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;drop point&lt;br /&gt;군사 투하지점&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;오픈&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;예제&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;DP&lt;/b&gt; has been aggressively promoting its campaign.&lt;br /&gt;민주당은 이 무상급식 캠페인을 강력하게 추진해왔다.&lt;br /&gt;&lt;br /&gt;We think some events should be held in North Korea,' said Sohn Kak-kyu, chairman of the &lt;b&gt;DP&lt;/b&gt;.'&lt;br /&gt;일부 경기는 북한에서 개최되어야 한다고 생각한다.'&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DP&lt;/b&gt; lawmakers then used a sledgehammer and crowbars to break down the door to the meeting room.&lt;br /&gt;그러자 민주당 국회의원들은 쇠망치와 쇠지레를 사용해 회의실 문을 부수었다.&lt;br /&gt;&lt;br /&gt;They hoped to keep &lt;b&gt;DP&lt;/b&gt; lawmakers from participating in the process.&lt;br /&gt;이들은 민주당 의원들이 이 절차에 참여하는 것을 막기를 원했다.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;DP&lt;/b&gt; criticized him more specifically for behavior they call unethical.&lt;br /&gt;민주당은 비윤리적인 행동에 대해 명확히 비판하였다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;VLIVE 자막&lt;br /&gt;&lt;br /&gt;What is &quot;&lt;b&gt;DP&lt;/b&gt;&quot;? &quot;&lt;b&gt;DP&lt;/b&gt;&quot;?&lt;br /&gt;플꾸가 뭐야? 폴꾸?&lt;br /&gt;&lt;br /&gt;What is &quot;&lt;b&gt;DP&lt;/b&gt;&quot;?&lt;br /&gt;폴꾸가 뭐예요?&lt;br /&gt;&lt;br /&gt;&quot;&lt;b&gt;DP&lt;/b&gt;&quot;? - What does that mean?&lt;br /&gt;폴꾸? - 무슨 소리지?&lt;br /&gt;&lt;br /&gt;What is that? - Don't you know &lt;b&gt;DP&lt;/b&gt;?&lt;br /&gt;그게 뭐예요? - 폴꾸, 그것도 몰라요?&lt;br /&gt;&lt;br /&gt;What are you doing? - Do you know &lt;b&gt;DP&lt;/b&gt;?&lt;br /&gt;뭐 하는 거예요? - 폴꾸라고 아세요?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;{&quot;mean&quot;:[&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;data processing, degree of polymerization [화학] 중합도(重合度), [야구] designated player, dew point, displaced person, doctor of pharmacy, double play&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;dp&amp;lt;/strong&amp;gt;&amp;lt;br/&amp;gt;data processing, [야구] double play&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;D/P&amp;lt;br/&amp;gt;상업 documents against payment.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;D.P.&amp;lt;br/&amp;gt;의학 적당(適當)한 지시(指示)대로, L. directione propria의 약자.&amp;lt;br/&amp;gt;의학 약학박사(藥學博士) Doctor of Pharmacy의 약자.&amp;lt;br/&amp;gt;의학 수족치료의사(手足治療醫師). Doctor of Podiatry의 약자.&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;drop point&amp;lt;br/&amp;gt;군사 투하지점&amp;lt;br/&amp;gt;&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;오픈&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;예제&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;The &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt; has been aggressively promoting its campaign.&amp;lt;br/&amp;gt;민주당은 이 무상급식 캠페인을 강력하게 추진해왔다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;We think some events should be held in North Korea,' said Sohn Kak-kyu, chairman of the &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;.'&amp;lt;br/&amp;gt;일부 경기는 북한에서 개최되어야 한다고 생각한다.'&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt; lawmakers then used a sledgehammer and crowbars to break down the door to the meeting room.&amp;lt;br/&amp;gt;그러자 민주당 국회의원들은 쇠망치와 쇠지레를 사용해 회의실 문을 부수었다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;They hoped to keep &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt; lawmakers from participating in the process.&amp;lt;br/&amp;gt;이들은 민주당 의원들이 이 절차에 참여하는 것을 막기를 원했다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;The &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt; criticized him more specifically for behavior they call unethical.&amp;lt;br/&amp;gt;민주당은 비윤리적인 행동에 대해 명확히 비판하였다.&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicbridgeLine&amp;gt;&quot;,&quot;VLIVE 자막&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;What is &amp;amp;quot;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;&amp;amp;quot;? &amp;amp;quot;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;&amp;amp;quot;?&amp;lt;br/&amp;gt;플꾸가 뭐야? 폴꾸?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;What is &amp;amp;quot;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;&amp;amp;quot;?&amp;lt;br/&amp;gt;폴꾸가 뭐예요?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;&amp;amp;quot;&amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;&amp;amp;quot;? - What does that mean?&amp;lt;br/&amp;gt;폴꾸? - 무슨 소리지?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;What is that? - Don't you know &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;?&amp;lt;br/&amp;gt;그게 뭐예요? - 폴꾸, 그것도 몰라요?&amp;lt;/dicwordclass&amp;gt;&quot;,&quot;&amp;lt;dicwordclass style=\&quot;user-select: text;\&quot;&amp;gt;What are you doing? - Do you know &amp;lt;strong&amp;gt;DP&amp;lt;/strong&amp;gt;?&amp;lt;br/&amp;gt;뭐 하는 거예요? - 폴꾸라고 아세요?&amp;lt;/dicwordclass&amp;gt;&quot;],&quot;word&quot;:&quot;DP&quot;,&quot;basicWord&quot;:&quot;DP&quot;,&quot;soundWord&quot;:&quot;DP&quot;,&quot;phoneticSymbol&quot;:&quot;&quot;}&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2579번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;생각 못했다. 다른 블로그를 참고해서 풀었다. 1일때부터 어떤 규칙인걸까 생각했는데, n을 기준으로 생각하니까 바로 나오더라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;case가 2가지로 나뉜다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;제일 마지막칸인 n을 기준으로,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;case1.&lt;/b&gt; 직전칸 O : &lt;b&gt;dp[n] = dp[n-3] + arr[n-1] + arr[n]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;가장 마지막칸(n)은 반드시 방문해야 하고, 그 직전칸(n-1)에 방문한다면, n-2칸은 방문하지 못한다. (문제 조건 2에 의해)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그럼 n-3칸은 반드시 방문해야 하기 때문에, dp[n-3]값에 직전칸값(arr[n-1])과 마지막칸값(arr[n])을 더해주면 점화식이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;case2.&lt;/b&gt; 직전칸 X : &lt;b&gt;dp[n] = dp[n-2] + arr[n]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;직전칸(n-1)은 방문하지 않으므로, n-2칸은 반드시 방문해야 한다. 따라서 dp[n-2]값과 마지막칸값(arr[n])을 더해주면 점화식이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;case1과 case2 결과값 중 &lt;b&gt;최대값&lt;/b&gt;을 &lt;b&gt;dp[n]&lt;/b&gt;에 넣어주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;max(&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;(&lt;b&gt;dp[n] = dp[n-3] + arr[n-1] + arr[n]&lt;/b&gt;)&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;,&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #0593d3;&quot;&gt;(&lt;b&gt;dp[n] = dp[n-2] + arr[n]&lt;/b&gt;)&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2928&quot; data-origin-height=&quot;3830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eA7HjR/btrzKR9k4Bf/sQaLXkxR04KYzV9UOFbPvk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eA7HjR/btrzKR9k4Bf/sQaLXkxR04KYzV9UOFbPvk/img.jpg&quot; data-alt=&quot;백준 Swift 2579번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eA7HjR/btrzKR9k4Bf/sQaLXkxR04KYzV9UOFbPvk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeA7HjR%2FbtrzKR9k4Bf%2FsQaLXkxR04KYzV9UOFbPvk%2Fimg.jpg&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;400&quot; height=&quot;523&quot; data-origin-width=&quot;2928&quot; data-origin-height=&quot;3830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2579번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2579번(DP - 재귀문)
let T = Int(readLine()!)!
var stairs = Array(repeating: 0, count: 301)

for i in 1...T {
    let input = Int(readLine()!)!
    stairs[i] = input
}

var cache = Array(repeating: -1, count: 301)

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != -1 {
        return cache[N]
    }
    
    if N &amp;lt;= 3 {
        cache[1] = stairs[1]
        cache[2] = stairs[1] + stairs[2]
        cache[3] = max(stairs[1] + stairs[3], stairs[2] + stairs[3])
    }
    else {
        cache[N] = max(topDown(N - 3) + stairs[N - 1] + stairs[N], topDown(N - 2) + stairs[N])
    }
    
    return cache[N]
}

let answer = topDown(T)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2579번(DP - 반복문)
let T = Int(readLine()!)!
var stairs = Array(repeating: 0, count: 301)

for i in 1...T {
    let input = Int(readLine()!)!
    stairs[i] = input
}

var cache = Array(repeating: -1, count: 301)
cache[1] = stairs[1]
cache[2] = stairs[1] + stairs[2]
cache[3] = max(stairs[1] + stairs[3], stairs[2] + stairs[3])

if T &amp;gt;= 4 {
    for i in 4...T {
        cache[i] = max((cache[i - 3] + stairs[i - 1] + stairs[i]), (cache[i - 2] + stairs[i]))
    }

}
print(cache[T])&lt;/code&gt;&lt;/pre&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;백준 Swift 11727번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;쭉 나열해보면 규칙이 금방 보이는 문제다. n이 4일때까지 쭉 나열한다면 대부분 점화식을 구할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; &lt;b&gt;dp[n] = (2 * dp[n-2]) + dp[n-1]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2621&quot; data-origin-height=&quot;3006&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x9GP2/btrzMa83bZW/sx2kIdPKqLdEGWtMAes4n1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x9GP2/btrzMa83bZW/sx2kIdPKqLdEGWtMAes4n1/img.jpg&quot; data-alt=&quot;백준 Swift 11727번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x9GP2/btrzMa83bZW/sx2kIdPKqLdEGWtMAes4n1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx9GP2%2FbtrzMa83bZW%2Fsx2kIdPKqLdEGWtMAes4n1%2Fimg.jpg&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;400&quot; height=&quot;459&quot; data-origin-width=&quot;2621&quot; data-origin-height=&quot;3006&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 11727번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11727번(DP - 재귀)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001)

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != -1 {
        return cache[N]
    }
    
    if N &amp;lt;= 2 {
        cache[1] = 1
        cache[2] = 3
    }
    else {
        cache[N] = (2 * topDown(N - 2) + topDown(N - 1)) % 10007
    }
    
    return cache[N]
}

let answer = topDown(n)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11727번(DP - 반복문)
let n = Int(readLine()!)!
var cache = Array(repeating: -1, count: 1001)
cache[1] = 1
cache[2] = 3

if n &amp;gt;= 3 {
    for i in 3...n {
        cache[i] = (2 * cache[i - 2] + cache[i - 1]) % 10007
    }
}

print(cache[n])&lt;/code&gt;&lt;/pre&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;백준 Swift 2407번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;문제 자체&lt;/b&gt;는 사실 &lt;b&gt;이항계수&lt;/b&gt;를 알고 있다면 풀 수 있을 것이다. 하지만 &lt;b&gt;이 문제는 그것만으론 풀리지 않는다.&lt;/b&gt; (백준 1010번을 먼저 풀고 오는걸 추천한다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;분명히 1010번과 동일하게 코드를 짰는데도 불구하고 틀렸다고 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음엔 '로직 자체가 틀렸었는데, 1010번이 우연히 맞았던걸까?' 라는 생각에 다시 고민을 해봤다. 하지만 틀린 게 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;질문검색을 참고하니, n과 m값이 커지면서 &lt;b&gt;Int의 범위를 벗어나게 되면서&lt;/b&gt; 생기는 &lt;b&gt;런타임오류&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(100 50을 입력했을 때 &lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;100891344545564193334812497256가 잘 나오는지 확인해봐라.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&lt;b&gt;(X) 생각한 방법1.&lt;/b&gt; Double형으로 바꾸고, 마지막에 출력 시 String(format: &quot;%0.f&quot;, cache[n][m])을 하면 될 거라고 생각했다. 실제로 100C50이 작동해서 맞는줄 알았는데, 작동만 하는 거였지 &lt;b&gt;값이 틀리게 나왔다.&lt;/b&gt; 숫자가 커지면서 계산에 문제가 생기는 듯 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;아래 더보기를 누르면 틀렸던 코드를 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Double을 썼던, 틀린 코드.&lt;/p&gt;
&lt;pre id=&quot;code_1650631775056&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2407번(DP - 반복문)
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])
var cache: [[Double]] = Array(repeating: Array(repeating: -1, count: m + 1), count: n + 1)

for i in 1...n {
    for j in 0...m {
        if j == 0 || j == i {
            cache[i][j] = 1
        }
        else {
            cache[i][j] = cache[i - 1][j - 1] + cache[i - 1][j]
        }
    }
}

//print(cache[n][m])
print(String(format: &quot;%.0f&quot;, cache[n][m]))&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;(O)&lt;/b&gt; &lt;b&gt;생각한 방법2.&lt;/b&gt; String으로 숫자를 계산하기로 했다. 설명을 편하게 하기 위해 &lt;b&gt;문자열 a와 b&lt;/b&gt;로 두겠다. (a = cache[i-1][j-1], b = cache[i-1][j])&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;크게 4가지로 나누어 &lt;u&gt;stringAdd메소드&lt;/u&gt;에 대해 설명하겠다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ex) (a = &quot;123&quot;, b = &quot;99&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- 초기 셋팅&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 계산을 편리하게 하기 위해, a와 b중 긴 문자열을 b로 둔다. 만약 a가 더 길다면 swap한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(Swift에선 String을 다루는 것보다, [String]을 다루는 게 쉽기 때문에 .map을 써서 바꾼다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- 첫번째 for문 흐름&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-1. 우선 a의 문자열의 길이만큼 뒤에서 for문을 돌면서 숫자(문자열)를 더한다. = sum&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-2. 예시에선 sum이 9 + 3 = 12가 되고, sum % 10 = 2를 answerString에 이어 붙인다. - answerString = &quot;2&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-3. carry(올려질 숫자)는 sum / 10 = 1이 되고, 다음 sum에 함께 더해진다. - answerString = &quot;2&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-4. sum은 9 + 2 + 1(carry) = 12이 되고, 2-2처럼 한다. - answerString = &quot;22&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-5. carry(올려질 숫자)는 sum / 10 = 1이 되고, 다음 sum에 함께 더해진다. - answerString = &quot;22&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2-6. carry는 1을 갖고 두번째 for문으로 간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;- 두번째 for문 흐름&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-1. a의 길이만큼은 이미 다 돌았으니까, b의 나머지 길이만큼만 거꾸로 더 이어 붙여주면 된다. 즉, index : len2 - len1 - 1부터 0까지다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3-2. sum이 1 + 1(carry) = 2가 되고, &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;sum % 10 = 2를 answerString에 이어 붙인다. - answerString = &quot;222&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;3-3. carry는 0이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span&gt;- 세번째 if문&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;4. 이 예시에선 if문은 들어오지 않는다. 하지만 &lt;b&gt;길이가 같은 a와 b&lt;/b&gt;였다면 &lt;b&gt;이 조건문에 들어오게 된다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;예를들어 a = &quot;9974&quot;, b = &quot;9999&quot; 에선 두번째 for문엔 들어가지 않고, carry는 첫번째 for문에서 1의 값을 갖고 조건문에 들어온다. (carry는 19 / 10 =&amp;nbsp; 1이다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;answerString에 carry값을 문자로 바꿔서 이어붙여주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span&gt;- 마지막 return&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;b&gt;answerString을 뒤집어주면&lt;/b&gt; &lt;u&gt;두 숫자 문자열을 더할 수 있다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이렇게 stringAdd를 만들어서 cache[i][j] = cache[i-1][j-1] + cache[i-1][j]에 적용하면 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2407번(DP - 재귀)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])
var cache: [[String]] = Array(repeating: Array(repeating: &quot;0&quot;, count: m + 1), count: n + 1)

func stringAdd(_ a: String, _ b: String) -&amp;gt; String { // 큰 숫자 더하기.
    var aArray = a.map{String($0)}
    var bArray = b.map{String($0)}
    
    if aArray.count &amp;gt; bArray.count { // b가 무조건 길게.
        swap(&amp;amp;aArray, &amp;amp;bArray)
    }
    
    let len1 = aArray.count
    let len2 = bArray.count
    var answerString: String = &quot;&quot;
    
    var carry: Int = 0 // 올림되는 숫자값
    let diff = len2 - len1
    
    for i in stride(from: len1-1, through: 0, by: -1) {
        let sum: Int = Int(aArray[i])! + Int(bArray[diff + i])! + carry
        answerString += String(UnicodeScalar(sum % 10 + 48)!) // 48이 &quot;0&quot;의 유니코드값.
        carry = sum / 10
    }
    
    for i in stride(from: len2-len1-1, through: 0, by: -1) {
        let sum: Int = Int(bArray[i])! + carry
        answerString += String(UnicodeScalar(sum % 10 + 48)!)
        carry = sum / 10
    }
    
    if carry &amp;gt; 0 {
        answerString += String(UnicodeScalar(carry + 48)!)
    }
    
//    answerString = answerString.reversed().map{String($0)}.joined(separator: &quot;&quot;)
    answerString = String(answerString.reversed())
    return answerString
}


for i in 1...n {
    for j in 0...m {
        if j == 0 || j == i {
            cache[i][j] = &quot;1&quot;
        }
        else {
//            cache[i][j] = cache[i - 1][j - 1] + cache[i - 1][j]
            cache[i][j] = stringAdd(cache[i - 1][j - 1], cache[i - 1][j])
        }
    }
}

func topDown(_ N: Int, _ M: Int) -&amp;gt; String {
    if cache[N][M] != &quot;0&quot; {
        return cache[N][M]
    }
    
    if M == 0 || M == N {
        cache[N][M] = &quot;1&quot;
    }
    else {
        cache[N][M] = stringAdd(topDown(N - 1, M - 1), topDown(N - 1, M))
    }
    
    return cache[N][M]
}

let answer = topDown(n, m)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2407번(DP - 반복문)
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, m) = (input[0], input[1])
var cache: [[String]] = Array(repeating: Array(repeating: &quot;0&quot;, count: m + 1), count: n + 1)

func stringAdd(_ a: String, _ b: String) -&amp;gt; String { // 큰 숫자 더하기.
    var aArray = a.map{String($0)}
    var bArray = b.map{String($0)}
    
    if aArray.count &amp;gt; bArray.count { // b가 무조건 길게.
        swap(&amp;amp;aArray, &amp;amp;bArray)
    }
    
    let len1 = aArray.count
    let len2 = bArray.count
    var answerString: String = &quot;&quot;
    
    var carry: Int = 0 // 올림되는 숫자값
    let diff = len2 - len1
    
    for i in stride(from: len1-1, through: 0, by: -1) {
        let sum: Int = Int(aArray[i])! + Int(bArray[diff + i])! + carry
        answerString += String(UnicodeScalar(sum % 10 + 48)!) // 48이 &quot;0&quot;의 유니코드값.
        carry = sum / 10
    }
    
    for i in stride(from: len2-len1-1, through: 0, by: -1) {
        let sum: Int = Int(bArray[i])! + carry
        answerString += String(UnicodeScalar(sum % 10 + 48)!)
        carry = sum / 10
    }
    
    if carry &amp;gt; 0 {
        answerString += String(UnicodeScalar(carry + 48)!)
    }
    
//    answerString = answerString.reversed().map{String($0)}.joined(separator: &quot;&quot;)
    answerString = String(answerString.reversed())
    return answerString
}


for i in 1...n {
    for j in 0...m {
        if j == 0 || j == i {
            cache[i][j] = &quot;1&quot;
        }
        else {
//            cache[i][j] = cache[i - 1][j - 1] + cache[i - 1][j]
            cache[i][j] = stringAdd(cache[i - 1][j - 1], cache[i - 1][j])
        }
    }
}


print(cache[n][m])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 11053번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 어려웠다. 이해가 안됐다. 규칙을 찾지 못했다... 결국 다른 블로그를 참고해서 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;가장 긴 증가하는 부분 수열을 LIS(Longest Increasing Subsequence)라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;O(N^2)와 O(NlogN)으로 풀어낼 수 있다고 하는데, 우선 O(N^2)인 이중반복문으로 풀었다. 이 유형이 익숙해지면 이분탐색으로 O(NlogN)으로도 풀어볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 모든 dp 값을 우선 1로 초기화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 기준이 되는 aArray[&lt;b&gt;i&lt;/b&gt;]가 aArray[&lt;b&gt;j&lt;/b&gt;]보다 큰지 비교한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3. 크다면, 현재 위치(i)보다 이전 숫자들 중, dp의 최댓값 + 1이 dp[i]값이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하단 참고 링크에 있는 나무위키 글을 한번 읽어보면 이해가 빠를 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://namu.wiki/w/%EC%B5%9C%EC%9E%A5%20%EC%A6%9D%EA%B0%80%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4#rfn-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://namu.wiki/w/%EC%B5%9C%EC%9E%A5%20%EC%A6%9D%EA%B0%80%20%EB%B6%80%EB%B6%84%20%EC%88%98%EC%97%B4#rfn-1&lt;/a&gt; |&amp;nbsp;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://t.ly/sqXnQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/sqXnQ&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀 - 틀림&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650702744806&quot; class=&quot;vim&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11053번(DP - 재귀함수) : 틀림
let N = Int(readLine()!)!
let aArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp = Array(repeating: 1, count: N)

func topDown(_ index: Int) -&amp;gt; Int {
    if dp[index] != 1 {
        return dp[index]
    }
    
    for j in 0..&amp;lt;index {
        if aArray[index] &amp;gt; aArray[j] {
            dp[index] = max(dp[index], topDown(j) + 1)
        }
    }
    
    return dp[index]
}

var maxAnswer: Int = 0
for i in 1..&amp;lt;N {
    maxAnswer = max(maxAnswer, topDown(i))
}

print(maxAnswer)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문(1) - 참고 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11053번(DP - 반복문)
let N = Int(readLine()!)!
let aArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp = Array(repeating: 1, count: N)

for i in 1..&amp;lt;N {
    
    for j in 0..&amp;lt;i {
        if aArray[i] &amp;gt; aArray[j] {
            dp[i] = max(dp[i], dp[j] + 1)
        }
    }
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문(2) - 11055번 풀고 다시 시도한 혼자 힘으로 작성한 코드. (22.04.25)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650869694864&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11053번 다시
let N = Int(readLine()!)!
let arr = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp = Array(repeating: 0, count: N)
dp[0] = 1

for i in 1..&amp;lt;N {
    let standard = arr[i]
    var maxValue = 0
    for j in 0..&amp;lt;i {
        if arr[j] &amp;lt; standard { // 기준보다 작지만,
            maxValue = max(maxValue, dp[j]) // 그 중 제일 큰 dp값에
        }
    }
    dp[i] = maxValue + 1 // 1을 더한게 dp[n]값.
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1912번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 문제를 보고 바로 떠오르진 않았다. 풀이방법을 매우 보고 싶었지만... 고민하고, &lt;b&gt;값을 쭉 쓰다보니 규칙이 보였다!!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 사진들이 이해가 안된다면, 밑에 설명을 읽고 다시 돌아와서 보면 이해가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_9207.jpg&quot; data-origin-width=&quot;3438&quot; data-origin-height=&quot;2320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QNuEn/btrAgp4ZGn7/mt6bPviu6ZwxlKWporDmi1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QNuEn/btrAgp4ZGn7/mt6bPviu6ZwxlKWporDmi1/img.jpg&quot; data-alt=&quot;백준 Swift 1912번 고민 1.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QNuEn/btrAgp4ZGn7/mt6bPviu6ZwxlKWporDmi1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQNuEn%2FbtrAgp4ZGn7%2Fmt6bPviu6ZwxlKWporDmi1%2Fimg.jpg&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;400&quot; height=&quot;270&quot; data-filename=&quot;IMG_9207.jpg&quot; data-origin-width=&quot;3438&quot; data-origin-height=&quot;2320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1912번 고민 1.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_9208.jpg&quot; data-origin-width=&quot;2777&quot; data-origin-height=&quot;2141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I8aA6/btrAbpskJPG/saPnxHKbFqKRQOUB6QMAMK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I8aA6/btrAbpskJPG/saPnxHKbFqKRQOUB6QMAMK/img.jpg&quot; data-alt=&quot;백준 Swift 1912번 고민2.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I8aA6/btrAbpskJPG/saPnxHKbFqKRQOUB6QMAMK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI8aA6%2FbtrAbpskJPG%2FsaPnxHKbFqKRQOUB6QMAMK%2Fimg.jpg&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;400&quot; height=&quot;308&quot; data-filename=&quot;IMG_9208.jpg&quot; data-origin-width=&quot;2777&quot; data-origin-height=&quot;2141&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1912번 고민2.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 첫번째 인덱스의 값은 그 자체가 최대 합이기 때문에, cache[0] = arr[0]으로 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;cache&lt;/b&gt;는 &lt;u&gt;&lt;b&gt;그 자리에서 나올 수 있는 최대 합을 저장하는 배열&lt;/b&gt;&lt;/u&gt;이다. 그 인덱스에 있는 숫자(=arr[i])는 반드시 포함되어야 한다는 뜻이기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그럼 생각해보자. 이해를 돕기 위해 케이스를 나눠보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;case1.&lt;/span&gt; 지금 인덱스 전까지의 합(= cache[i-1])이 &lt;b&gt;음수&lt;/b&gt;였는데, 지금 인덱스에 있는 값(= arr[i])이 1000으로 엄청 크다면(&lt;b&gt;양수&lt;/b&gt;라면)?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;최대합 cache[i]는 arr[i]일 것이다. &lt;/b&gt;음수합에 양수를 더하는 것보다 본인(arr[i])만 포함시키는게 최대 합에 가까워지지 않겠는가. 그럼 cache[i]는 (cache[i-1] + arr[i]보단) arr[i]값을 넣어야 최대 합일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;case2.&lt;/span&gt; 지금 인덱스 전까지의 합(= cache[i-1])이 &lt;b&gt;음수&lt;/b&gt;였는데, 지금 인덱스에 있는 값(= arr[i])이 &lt;b&gt;음수&lt;/b&gt;라면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; &lt;b&gt;최대합 cache[i]는 arr[i]일 것이다.&lt;/b&gt; 최대 합을 구해야 하는데, 음수를 추가로 더한다면... 더 음수가 되지 않겠는가. 그럼 그나마 이번 값(arr[i])만 넣는게 최대합에 더 가까울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;case3.&lt;/span&gt; 지금 인덱스 전까지의 합(= cache[i-1])이 &lt;b&gt;양수&lt;/b&gt;였는데, 지금 인덱스에 있는 값(= arr[i])이 &lt;b&gt;음수&lt;/b&gt;라면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;-&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;최대합 cache[i]는 cache[i-1] + arr[i]일 것이다. &lt;u&gt;본인(arr[i])만 포함&lt;/u&gt;&lt;/b&gt;되거나 or &lt;u&gt;&lt;b&gt;이전 양수합&lt;/b&gt;(cache[i-1])에 &lt;b&gt;본인 음수&lt;/b&gt;(arr[i])을 추가한 것&lt;/u&gt; 중 큰 건 후자일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;case4.&lt;/span&gt; &lt;span&gt;지금 인덱스 전까지의 합(= cache[i-1])이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;양수&lt;/b&gt;&lt;span&gt;였는데, 지금 인덱스에 있는 값(= arr[i])이&lt;span&gt;&amp;nbsp;&lt;b&gt;양&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;수&lt;/b&gt;라면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;-&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;최대합 cache[i]는 &lt;b&gt;cache[i-1] + arr[i]&lt;/b&gt;일 것이다. &lt;/b&gt;이유는 case3과 같다. &lt;u&gt;&lt;b&gt;본인(arr[i])만 포함&lt;/b&gt;&lt;/u&gt;되거나 or &lt;u&gt;&lt;b&gt;이전 양수합&lt;/b&gt;(cache[i-1])에 &lt;b&gt;본인 양수&lt;/b&gt;(arr[i])을 추가한 것&lt;/u&gt; 중 큰 건 후자일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;위의 케이스를 하나의 점화식으로 나타낼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; &lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;&lt;b&gt;cache[i] = max(arr[i], cache[i-1] + arr[i])&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음 cache값의 max를 출력해주거나, 아래 코드처럼 매번 maxValue보다 큰지 비교한뒤 maxValue값을 출력해주면 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1912번(DP - 재귀함수)
let n = Int(readLine()!)!
let arr = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var cache = Array(repeating: 0, count: n)

func topDown(_ N: Int) -&amp;gt; Int {
    if cache[N] != 0 {
        return cache[N]
    }
    if N == 0 {
        cache[N] = arr[0]
    }
    else {
        cache[N] = max(arr[N], topDown(N-1) + arr[N])
    }
    
    return cache[N]
}

let _ = topDown(n-1)
print(cache.max()!)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1912번(DP - 반복문)
let n = Int(readLine()!)!
let arr = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var cache = Array(repeating: 0, count: n)
cache[0] = arr[0]
var maxValue = cache[0] // cache에 있는 값 중, 최대값(최종 정답)

for i in 1..&amp;lt;n {
    cache[i] = max(arr[i], cache[i-1] + arr[i])
    
    if cache[i] &amp;gt; maxValue {
        maxValue = cache[i]
    }
}

print(maxValue)&lt;/code&gt;&lt;/pre&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;div id=&quot;dicLayerLoader&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 11055번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt; - 비슷한 문제인 11053번문제는 못풀었었는데, 이번 문제는 도움 하나도 없이 풀었다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;지난번 11053번을 풀면서 참고했던 풀이보다, 이번에 풀면서 작성하게 된 코드가 내겐 더 이해가 쉬운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;쭉 적으면서 생각해보니 규칙이 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; &lt;u&gt;&lt;b&gt;자신(arr[n])보단 작고, 그 중 제일 큰 dp값에 본인값(arr[n])을 더한게 dp[n]이다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하단에 코드&amp;amp;주석을 보고 다시 이 문장을 보면 이해가 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1722&quot; data-origin-height=&quot;1921&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38syl/btrAoHZAAiP/FlO2hPxlQ0k3BEwpInN1v1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38syl/btrAoHZAAiP/FlO2hPxlQ0k3BEwpInN1v1/img.jpg&quot; data-alt=&quot;백준 Swift 11055번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38syl/btrAoHZAAiP/FlO2hPxlQ0k3BEwpInN1v1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38syl%2FbtrAoHZAAiP%2FFlO2hPxlQ0k3BEwpInN1v1%2Fimg.jpg&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;400&quot; height=&quot;446&quot; data-origin-width=&quot;1722&quot; data-origin-height=&quot;1921&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 11055번 고민.&lt;/figcaption&gt;
&lt;/figure&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11055번(DP - 바텀업)
let N = Int(readLine()!)!
let arr = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var dp = Array(repeating: 0, count: N)
dp[0] = arr[0]


for i in 1..&amp;lt;N {
    let standard = arr[i] // 기준(자신)
    var maxValue = 0
    for j in 0..&amp;lt;i {
        if arr[j] &amp;lt; standard { // 기준보단 작지만,
            maxValue = max(maxValue, dp[j]) // 그 중 제일 큰 dp값에
        }
    }
    dp[i] = maxValue + standard // 자기자신을 더한게 dp[n]값.
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&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;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1890번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문), DFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 문제를 보자마자 &lt;b&gt;DFS&lt;/b&gt;나 &lt;b&gt;BFS&lt;/b&gt;가 떠올랐다. &lt;b&gt;방문체크도 필요 없어보였다.&lt;/b&gt; 그렇게 DFS와 BFS로 풀어봤다. 결과는 &lt;b&gt;둘 다 시간초과다.&lt;/b&gt; 관련 코드는 아래에 더보기를 누르면 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;사람들이 많이 푼 bottomUp(dp테이블) 방법이 제일 무난하고 쉬운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dfs와 dp를 합쳐서 푼 topDown방식은, 고려해야 할 게 있어서 bottomUp방식보다 더 어려운 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dp없이 DFS or BFS로만 풀면 테스트케이스는 나오지만, &lt;b&gt;시간초과가 난다.&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nij8f/btrAoJwCvbP/xrnkNVTkrBIkdFxuqLsGdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nij8f/btrAoJwCvbP/xrnkNVTkrBIkdFxuqLsGdk/img.png&quot; data-alt=&quot;백준 Swift 1890번 - 시간초과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nij8f/btrAoJwCvbP/xrnkNVTkrBIkdFxuqLsGdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNij8f%2FbtrAoJwCvbP%2FxrnkNVTkrBIkdFxuqLsGdk%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;2248&quot; height=&quot;344&quot; data-origin-width=&quot;2248&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1890번 - 시간초과&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;BFS&lt;/b&gt; - 시간초과&lt;/p&gt;
&lt;pre id=&quot;code_1650874814129&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1890번(BFS - 시간초과)
let N = Int(readLine()!)!
var map: [[Int]] = Array(repeating: [], count: N)

for i in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    map[i] = input
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

var answerCount: Int = 0
func bfs(_ startY: Int, _ startX: Int) {
    var q: [(Int, Int)] = [(startY, startX)]

    while !q.isEmpty {
        let (y, x) = q.removeFirst()
        
        if (y == N - 1) &amp;amp;&amp;amp; (x == N - 1) { // 목적지에 도달하면,
            answerCount += 1 // 경로 개수 1 증가.
            continue
        }
        
        // if map[y][x] == 0 {
        //     continue
        // }

        let ny = y + map[y][x] // 밑으로 가게 될 때의 다음 y좌표.
        let nx = x + map[y][x] // 우측으로 가게 될 때의 다음 x좌표.
        
        if isValidCoord(ny, x) { // 1. 밑으로 갈 때,
            q.append((ny, x))
        }
        if isValidCoord(y, nx) { // 2. 우측으로 갈 때,
            q.append((y, nx))
        }
    }

}

bfs(0, 0)
print(answerCount)&lt;/code&gt;&lt;/pre&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;&lt;b&gt;DFS&lt;/b&gt; - 시간초과&lt;/p&gt;
&lt;pre id=&quot;code_1650874944740&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1890번(DFS - 시간초과)
let N = Int(readLine()!)!
var map: [[Int]] = Array(repeating: [], count: N)

for i in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    map[i] = input
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

var answerCount: Int = 0

func dfs(_ y: Int, _ x: Int) {

    if y == N - 1 &amp;amp;&amp;amp; x == N - 1 {
        answerCount += 1
    }
    else {
        let ny = y + map[y][x]
        let nx = x + map[y][x]
        
        if isValidCoord(ny, x) { // 1. 밑으로 갈 때,
            dfs(ny, x)
        }
        if isValidCoord(y, nx) { // 2. 우측으로 갈 때,
            dfs(y, nx)
        }
    }

}

dfs(0, 0)
print(answerCount)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;map[y][x]값이 0일때 맴돌게 되기 때문에, 맴도는걸 방지하기 위해 처음에 cache를 -1로 초기화 후 방문 시 0으로 초기화해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://sihyungyou.github.io/baekjoon-1890/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sihyungyou.github.io/baekjoon-1890/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1890번(DFS, DP - topDown)
let N = Int(readLine()!)!
var map: [[Int]] = Array(repeating: [], count: N)
var cache = Array(repeating: Array(repeating: -1, count: N), count: N)

for i in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    map[i] = input
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}


func dfs(_ y: Int, _ x: Int) -&amp;gt; Int { // topDown
    
    if y == N - 1 &amp;amp;&amp;amp; x == N - 1 {
        return 1
    }
    else if cache[y][x] == -1 {
        cache[y][x] = 0
        
        let ny = y + map[y][x]
        let nx = x + map[y][x]
        
        if isValidCoord(ny, x) { // 1. 밑으로 갈 때,
            cache[y][x] += dfs(ny, x)
        }
        if isValidCoord(y, nx) { // 2. 우측으로 갈 때,
            cache[y][x] += dfs(y, nx)
        }
    }
    
    return cache[y][x]
}

let answer = dfs(0, 0)
//print(cache)
print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://dailymapins.tistory.com/m/91&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dailymapins.tistory.com/m/91&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1890번(DP - 반복문)
let N = Int(readLine()!)!
var map: [[Int]] = Array(repeating: [], count: N)
var cache = Array(repeating: Array(repeating: 0, count: N), count: N)

for i in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    map[i] = input
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

cache[0][0] = 1

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if cache[y][x] != 0 &amp;amp;&amp;amp; map[y][x] != 0 {
            let ny = y + map[y][x]
            let nx = x + map[y][x]
            
            if isValidCoord(ny, x) { // 1. 밑으로 갈 때,
                cache[ny][x] += cache[y][x]
            }
            
            if isValidCoord(y, nx) { // 2. 우측으로 갈 때,
                cache[y][nx] += cache[y][x]
            }
        }
    }
}
print(cache[N-1][N-1])&lt;/code&gt;&lt;/pre&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;백준 Swift 9465번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 총 3번의 시도끝에 풀었다. 결국 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;첫번째 시도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;: 처음엔 dp배열을 1차원배열로 하면 된다고 생각했다. 이유는 아래 사진처럼 나열해봤을 때, 규칙을 발견한 거 같았기 때문이다. 근데 dp[4]에서 안되는 거 보고 틀린걸 깨달았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;3048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNtEUy/btrAGfJsbL8/W8ltGTohLB3LNDlmGqffj0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNtEUy/btrAGfJsbL8/W8ltGTohLB3LNDlmGqffj0/img.jpg&quot; data-alt=&quot;백준 Swift 9465번 - 1차시도(틀림)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNtEUy/btrAGfJsbL8/W8ltGTohLB3LNDlmGqffj0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNtEUy%2FbtrAGfJsbL8%2FW8ltGTohLB3LNDlmGqffj0%2Fimg.jpg&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;400&quot; height=&quot;560&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;3048&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9465번 - 1차시도(틀림)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;두번째, 세번째 시도&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;: 블로그를 참고해서 dp를 2차원배열로 선언하면 된다는걸 깨달았다. dp를 2차원배열로 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;바로 대각선(0행 기준 dp[1][i-1]) or 한칸 간 뒤 대각선(0행 기준 dp[1][i-2]) 중에 큰 걸 선택하면 된다. + arr[0][i]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;똑같은 로직인데도 불구하고 두번째 시도는 왜 틀렸냐면, &lt;b&gt;0열과 1열일 때&lt;/b&gt; arr의 값을 넣은게 아니라 &lt;b&gt;그 행에서 나올 수 있는 최댓값으로 넣었더니 틀렸다.&lt;/b&gt; 잘 생각해보면, 이렇게 하면 예시 testcase는 맞는데 아래 반례는 틀린다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;처음엔 틀려서 당황했는데, 아래 반례를 보고 생각해보니 2행에서부터 문제가 생긴다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;&lt;span&gt;점화식&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;0행 : dp[0][i] = max(dp[1][i-1], dp[1][i-2]) + arr[0][i]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1행 : dp[1][i] = max(dp[0][i-1], dp[0][i-2]) + arr[1][i]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2884&quot; data-origin-height=&quot;2833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2pBgZ/btrAJTd71Z9/vdcKkcRbceLFaIPV5Mm2e0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2pBgZ/btrAJTd71Z9/vdcKkcRbceLFaIPV5Mm2e0/img.jpg&quot; data-alt=&quot;백준 Swift 9465번 - 2차시도(틀림)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2pBgZ/btrAJTd71Z9/vdcKkcRbceLFaIPV5Mm2e0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2pBgZ%2FbtrAJTd71Z9%2FvdcKkcRbceLFaIPV5Mm2e0%2Fimg.jpg&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;400&quot; height=&quot;393&quot; data-origin-width=&quot;2884&quot; data-origin-height=&quot;2833&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9465번 - 2차시도(틀림)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 더보기 - 반례&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반례&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100 1 1 100&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 1 100 1&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9465번(DP - 반복문)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    var arr: [[Int]] = Array(repeating: [], count: 2)
    
    arr[0] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr[1] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    var dp = Array(repeating: Array(repeating: -1, count: n), count: 2)
    dp[0][0] = arr[0][0] // a
    dp[1][0] = arr[1][0] // b
    
    if n &amp;gt;= 2 {
        dp[0][1] = arr[1][0] + arr[0][1] // (b+c)
        dp[1][1] = arr[0][0] + arr[1][1] // (a+d)
        
        for i in 2..&amp;lt;n {
            dp[0][i] = max(dp[1][i-1], dp[1][i-2]) + arr[0][i] // 위쪽
            dp[1][i] = max(dp[0][i-1], dp[0][i-2]) + arr[1][i] // 아래쪽
        }
    }
    
    let answer = max(dp[0][n-1], dp[1][n-1])
    print(answer)
}&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음짠 잘못된 코드&lt;/p&gt;
&lt;pre id=&quot;code_1651065352319&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9465번(DP - 처음짠 잘못된 코드)
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let n = Int(readLine()!)!
    var arr: [[Int]] = Array(repeating: [], count: 2)
    
    arr[0] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    arr[1] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    var dp = Array(repeating: -1, count: n + 1)
    dp[1] = max(arr[0][0], arr[1][0]) // max(a, b)
    dp[2] = max(arr[0][0] + arr[1][1], arr[1][0] + arr[0][1]) // max(a+d, b+c)
    
    for i in 3...n {
        dp[i] = max(dp[i-1], dp[i-2]) + max(arr[0][i-1], arr[1][i-1])
    }
    print(dp)
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 15486번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 고민해봤는데 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp배열의 값들은 그 날에 받을 수 있는 최대금액을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;각 @일에서 next를 생각해야 하는게 핵심인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;점화식에서 dp[next]를 할 때 자기자신(dp[next])과 비교하는 이유는, 이미 이전 @&lt;span&gt;일차에서 next일차에 접근했을 때의 값이 더 클 수가 있기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;주의사항 2가지&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. 점화식에서, &lt;b&gt;dp[i]값&lt;/b&gt;이 아니라 &lt;u&gt;&lt;b&gt;maxValue값&lt;/b&gt;&lt;/u&gt;으로 해야 한다. 그렇지 않으면 &lt;u&gt;&lt;b&gt;지금까지 쌓인 금액을 제대로 끌고 올라갈 수 없다.&lt;/b&gt;&lt;/u&gt;(바텀업이니까.. 이해가 되려나?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;테스트케이스1~3에선 최소 한번씩은 접근을 했기 때문에 dp[i]로 해도 문제가 안생겼는데, 테스트케이스4의 8일차에서는 이미 많이 진행됐음에도 불구하고 첫접근이여서 문제가 생기는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;테스트케이스4에서, 8일차일 때 dp[next]값은 90이 돼야 하는데, dp[i]로 하게 되면 30이 된다. (=8일차 전까지 이미 쌓인 (최대)금액 50 + 10이 계산이 안된다는 뜻이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이해가 안된다면 &lt;b&gt;테스트케이스4를 함께 돌리면서 글을 다시 읽어봐라.&lt;/b&gt; 빠르게 이해 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2. 마지막 날에 Tn이 1이라면 근무가 가능하다. 이게 무슨 뜻일까? 힌트는 &lt;b&gt;dp배열의 길이&lt;/b&gt;와 관련이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; 즉, &lt;span style=&quot;color: #ffffff;&quot;&gt;N일차때의 계산을 위해 &lt;b&gt;dp배열을 1칸 더 늘려줘야 한다는 뜻&lt;/b&gt;이다.&lt;span style=&quot;color: #000000;&quot;&gt;(드래그를 하면 볼 수 있다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2733&quot; data-origin-height=&quot;3923&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6WX9P/btrAIOdYexH/xLJ4qPfM8ARYybV9NVZYT1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6WX9P/btrAIOdYexH/xLJ4qPfM8ARYybV9NVZYT1/img.jpg&quot; data-alt=&quot;백준 Swift 15486번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6WX9P/btrAIOdYexH/xLJ4qPfM8ARYybV9NVZYT1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6WX9P%2FbtrAIOdYexH%2FxLJ4qPfM8ARYybV9NVZYT1%2Fimg.jpg&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;400&quot; height=&quot;574&quot; data-origin-width=&quot;2733&quot; data-origin-height=&quot;3923&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 15486번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;점화식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;i일차 일 때,&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;next = i + Ti&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;dp[next] = max(dp[next], &lt;s&gt;dp[i]&lt;/s&gt; + Pi) -&amp;gt; dp[next] = max(dp[next], maxValue + Pi)&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://loosie.tistory.com/219&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/219&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15486번(DP - 반복문)
let N = Int(readLine()!)!
var T: [Int] = [0] + Array(repeating: 0, count: N) // 0일 제외
var P: [Int] = [0] + Array(repeating: 0, count: N) // 0일 제외

for i in 1...N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (time, pay) = (input[0], input[1])
    T[i] = time
    P[i] = pay
}

var dp: [Int] = [0] + Array(repeating: 0, count: N) + [0] // 0일 제외, N개 + 1개(마지막날의 T값이 1일 땐 근무 가능. -&amp;gt; 그 값을 저장하기 위해 배열 1 증가시킴.)
var maxValue: Int = -1

for i in 1...N {
    let next = i + T[i]
    maxValue = max(maxValue, dp[i]) // 이전까지의 최대값을 계속 갖고 있어야 함.
    
    if next &amp;lt;= N + 1 {
//        dp[next] = max(dp[next], dp[i] + P[i])
        dp[next] = max(dp[next], maxValue + P[i]) // dp[i]가 아니라 maxValue여야 됨. 예제4에서 틀려서 확인.
    }
}

print(dp.max()!)&lt;/code&gt;&lt;/pre&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;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2156번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 예제 TC는 맞아서 &lt;span&gt;처음엔 맞게 푼 것 같았다.&lt;span&gt; 사실 문제를 보고 어떤 규칙이 없을까 라고 생각하고 무작정 돌입해서 푼 것 같다. min을 생각하고 있었으니...&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;결국 틀렸고 다른 블로그를 참고했다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;현재 잔을 기준&lt;/b&gt;으로, &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;총 3가지의 case&lt;/b&gt;&lt;/span&gt;로 나뉜다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;case1&lt;/b&gt; : 현재 잔(인덱스 i) + 직전 잔 + (3잔연속은 불가능하기 때문에) i-3위치의 최대값&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;case2&lt;/b&gt; : 현재 잔(인덱스 i) + &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(직전 잔은 패스)&lt;/span&gt; + i-2위치의 최대값&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;case3&lt;/b&gt; : &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(현재 잔 패스)&lt;/span&gt; + i-1위치의 최대값&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2824&quot; data-origin-height=&quot;3674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6EYoY/btrAQJixuM7/3kMitK190hbCMXUwazHFK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6EYoY/btrAQJixuM7/3kMitK190hbCMXUwazHFK0/img.jpg&quot; data-alt=&quot;백준 Swift 2156번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6EYoY/btrAQJixuM7/3kMitK190hbCMXUwazHFK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6EYoY%2FbtrAQJixuM7%2F3kMitK190hbCMXUwazHFK0%2Fimg.jpg&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;400&quot; height=&quot;520&quot; data-origin-width=&quot;2824&quot; data-origin-height=&quot;3674&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2156번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;따라서 &lt;b&gt;점화식&lt;/b&gt;은 다음과 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;(i &amp;gt;= 4)&lt;br /&gt;case1 : arr[i] + arr[i-1] + dp[i-3]&lt;br /&gt;case2 : arr[i] + dp[i-2]&lt;br /&gt;case3 : dp[i-1]&lt;br /&gt;&lt;br /&gt;-&amp;gt; &lt;u&gt;&lt;b&gt;dp[i] = max(case1, case2, case3)&lt;/b&gt;&lt;/u&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://myjamong.tistory.com/313&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://myjamong.tistory.com/313&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2156번(DP - 재귀함수)
let n = Int(readLine()!)!
var arr = [0] + Array(repeating: 0, count: 10000) // 0번째는 무시.
var dp = [-1] + Array(repeating: -1, count: 10000) // 0번째는 무시.

for i in 1...n {
    arr[i] = Int(readLine()!)!
}

func topDown(_ N: Int) -&amp;gt; Int {
    if dp[N] != -1 {
        return dp[N]
    }
    if N &amp;lt;= 3 {
        dp[1] = arr[1]
        dp[2] = arr[1] + arr[2]
        dp[3] = max(arr[1] + arr[2], arr[1] + arr[3], arr[2] + arr[3]) // 인덱스 1 + 2, 1 + 3, 2 + 3
    }
    else {
        let case1 = arr[N] + arr[N - 1] + topDown(N - 3) // 현재잔 + 직전잔 + N-3위치의 최대값
        let case2 = arr[N] + topDown(N - 2) // 현재잔 + N-2위치의 최대값
        let case3 = topDown(N - 1) // 현재잔X -&amp;gt; N-1위치의 최대값
        dp[N] = max(case1, case2, case3)
    }
    return dp[N]
}

print(topDown(n))&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2156번(DP - 반복문)
let n = Int(readLine()!)!
var arr = [0] + Array(repeating: 0, count: 10000) // 0번째는 무시.
var dp = [0] + Array(repeating: 0, count: 10000) // 0번째는 무시.

for i in 1...n {
    arr[i] = Int(readLine()!)!
}

dp[1] = arr[1]
dp[2] = arr[1] + arr[2]
dp[3] = max(arr[1] + arr[2], arr[1] + arr[3], arr[2] + arr[3]) // 인덱스 1 + 2, 1 + 3, 2 + 3

if n &amp;gt;= 4 {
    for i in 4...n {
        let case1 = arr[i] + arr[i - 1] + dp[i - 3] // 현재잔 + 직전잔 + i-3위치의 최대값
        let case2 = arr[i] + dp[i - 2] // 현재잔 + i-2위치의 최대값
        let case3 = dp[i - 1] // 현재잔X -&amp;gt; i-1위치의 최대값
        dp[i] = max(case1, case2, case3)
    }
}
print(dp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 코드&lt;/p&gt;
&lt;pre id=&quot;code_1651233499160&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2156번(DP - 반복문 : 틀린코드)
let n = Int(readLine()!)!
var arr = [0] + Array(repeating: 0, count: n) // 0번째는 무시.
var dp = [0] + Array(repeating: 0, count: n) // 0번째는 무시.

for i in 1...n {
    arr[i] = Int(readLine()!)!
}

dp[1] = arr[1]
var minValue: Int = arr[1]
dp[2] = max(minValue + arr[2], arr[2]) // 무조건 arr[1] + arr[2]가 클 수 밖에 없긴 함.
minValue = min(minValue + arr[2], arr[2]) // 무조건 arr[2]가 작을 수 밖에 없긴 함.

if n &amp;gt;= 3 {
    for i in 3...n {
        dp[i] = max(minValue + arr[i], dp[i-2] + arr[i])
        minValue = min(minValue + arr[i], dp[i-2] + arr[i])
    }
}
print(dp)
print(dp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 10844번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : DP(재귀, 반복문)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음 고민한 방식은 틀렸다. 모르겠어서 다른 블로그를 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;dp를 &lt;b&gt;2차원 배열로 생각&lt;/b&gt;하니까 접근이 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 길이(N-1)의 수에서, 끝자리(일의 자리)가 0이라면 -&amp;gt; 이번 길이(N)의 끝자리는 1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 길이(N-1)의 수에서, 끝자리(일의 자리)가 9라면 -&amp;gt; 이번 길이(N)의 끝자리는 8.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이전 길이(N-1)의 수에서, 끝자리(일의 자리)가 1~8이라면 -&amp;gt; 이번 길이(N)의 끝자리는 +-1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;방금 위 3줄을 다시 생각해보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이번 길이(N)의 끝자리가 0일때의 값 dp[N][0]은, dp[N-1][1]일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이번 길이(N)의 끝자리가 9일때의 값 dp[N][9]은, dp[N-1][8]일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이번 길이(N)의 끝자리가 1~8일때의 값 dp[N][1] ~ dp[N][8]은, dp[N-1][+-1]일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;점화식&lt;/b&gt;은 아래의 이미지를 보면 이해가 쉬울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의! mod를 answer 출력할 때도 빼트리면 안된다! (&lt;a href=&quot;https://www.acmicpc.net/board/view/7755&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/7755&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;4032&quot; data-origin-height=&quot;2923&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOQI4x/btrAQRA0IlR/dZKODWU60puCc0KRO9xk71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOQI4x/btrAQRA0IlR/dZKODWU60puCc0KRO9xk71/img.jpg&quot; data-alt=&quot;백준 Swift 10844번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOQI4x/btrAQRA0IlR/dZKODWU60puCc0KRO9xk71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOQI4x%2FbtrAQRA0IlR%2FdZKODWU60puCc0KRO9xk71%2Fimg.jpg&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;400&quot; height=&quot;290&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;2923&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 10844번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 링크 : &lt;a href=&quot;https://t.ly/VYMC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/VYMC&lt;/a&gt; | &lt;a href=&quot;https://st-lab.tistory.com/134&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://st-lab.tistory.com/134&lt;/a&gt; | &lt;a href=&quot;https://www.acmicpc.net/board/view/7755&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/7755&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;재귀&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999756496&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10844번(DP - 재귀함수)
let N = Int(readLine()!)!
var dp = Array(repeating: Array(repeating: 0, count: 10), count: N + 1)

let mod = 1000000000 // mod로 나눈 나머지.
var sum: Int = 0
for j in 0...9 {
    sum += topDown(N, j) % mod
}
print(sum % mod) // mod 빼먹으면 안됨.

func topDown(_ n: Int, _ lastNum: Int) -&amp;gt; Int {
    if dp[n][lastNum] != 0 {
        return dp[n][lastNum]
    }
    
    if n == 1 { // 1일땐 미리 세팅.
        dp[n][lastNum] = 1
        dp[n][0] = 0
    }
    else { // n &amp;gt;= 2일 때,
        if lastNum == 0 {
            dp[n][lastNum] = topDown(n - 1, 1)
        }
        else if lastNum &amp;gt;= 1 &amp;amp;&amp;amp; lastNum &amp;lt;= 8 {
            dp[n][lastNum] = (topDown(n - 1, lastNum - 1) + topDown(n - 1, lastNum + 1))
        }
        else if lastNum == 9 {
            dp[n][lastNum] = topDown(n - 1, 8)
        }
    }
    
    return dp[n][lastNum] % mod
}&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;반복문&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649999795510&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10844번(DP - 반복문)
let N = Int(readLine()!)!
var dp = Array(repeating: Array(repeating: 0, count: 10), count: N + 1)

for j in 1...9 { // N은 1이고, 1부터 9일 때
    dp[1][j] = 1
}

let mod = 1000000000 // mod로 나눈 나머지.
if N &amp;gt;= 2 {
    for i in 2...N {
        for j in 0...9 {
            if j == 0 {
                dp[i][j] = (dp[i - 1][1]) % mod // = dp[i-1][j+1] % mod
            }
            else if j &amp;gt;= 1 &amp;amp;&amp;amp; j &amp;lt;= 8 {
                dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j + 1]) % mod
            }
            else if j == 9 {
                dp[i][j] = (dp[i - 1][8]) % mod // = dp[i-1][j-1] % mod
            }
        }
    }
}

let sum = dp[N].reduce(0, +) % mod // 길이가 N인 계단 수의 개수.
print(sum)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;틀린 코드&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1944&quot; data-origin-height=&quot;3150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yomjV/btrARprvDRF/VG3Wx1Ra2rPR2aSyBq5zaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yomjV/btrARprvDRF/VG3Wx1Ra2rPR2aSyBq5zaK/img.jpg&quot; data-alt=&quot;백준 Swift 10844번 - 틀린 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yomjV/btrARprvDRF/VG3Wx1Ra2rPR2aSyBq5zaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyomjV%2FbtrARprvDRF%2FVG3Wx1Ra2rPR2aSyBq5zaK%2Fimg.jpg&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;324&quot; data-origin-width=&quot;1944&quot; data-origin-height=&quot;3150&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 10844번 - 틀린 고민.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;pre id=&quot;code_1651324532330&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10844번(DP - 반복문: 틀림)
let N = Int(readLine()!)!
var dp: [Int] = [0] + Array(repeating: 0, count: N)
dp[1] = 9

if N &amp;gt;= 2 {
    for i in 2...N {
        dp[i] = (2 * dp[i - 1] - 1) % 1000000000
    }
}
print(dp[N])&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayer&quot;&gt;
&lt;div id=&quot;dicLayerContents&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerSub&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;dicRawData&quot; style=&quot;display: none;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div id=&quot;dicLayerLoader&quot;&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>DP Swift 풀이</category>
      <category>DP 문제풀이</category>
      <category>Dynamic Programming</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>다이나믹 프로그래밍</category>
      <category>백준 DP 문제 모음</category>
      <category>백준 문제풀이</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/201</guid>
      <comments>https://developer-p.tistory.com/201#entry201comment</comments>
      <pubDate>Fri, 15 Apr 2022 14:15:27 +0900</pubDate>
    </item>
    <item>
      <title>이분탐색 문제 풀이 모음 | 백준 Swift 1789번, 2417번, 10815번, 2805번, 1654번, 2512번, 19637번, 11663번, 2110번, 3079번, 2470번, 20444번, 1477번, 1939번, 2473번, 13397번, 1300번,</title>
      <link>https://developer-p.tistory.com/200</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;문제 유형 중, Binary Search의 추천문제들을 풀어보려고 합니다.(Paremetric Search)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천문제 번호 모음은 여기서 확인할 수 있습니다. 실버와 골드가 섞여있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/binary_search&quot;&gt;https://github.com/tony9402/baekjoon/tree/main/binary_search&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649155697681&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&quot; data-og-description=&quot;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/binary_search&quot; data-og-url=&quot;https://github.com/tony9402/baekjoon&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b3S2l6/hyNVQ2kCTi/MySu5dN3qnkJ8uhPZZkAGK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/tony9402/baekjoon/tree/main/binary_search&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/tony9402/baekjoon/tree/main/binary_search&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b3S2l6/hyNVQ2kCTi/MySu5dN3qnkJ8uhPZZkAGK/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;GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.05 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.06업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.07 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.08 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.10 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.11 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.13업데이트&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&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1649155642856&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdP3w0/hyNVH5rorQ/xk4iXJmwByPPpfK2eQO3o0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdP3w0/hyNVH5rorQ/xk4iXJmwByPPpfK2eQO3o0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1789번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 :  이분탐색 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1789번(이분탐색)
let S = Int(readLine()!)!

var low = 1
var high = S
var answer: Int = 0

while low &amp;lt;= high {
    
    let middle = (low + high) / 2
    let sum = (middle) * (middle + 1) / 2 // 합 공식: n*(n+1)/2
    
    if sum &amp;lt;= S {
        low = middle + 1
        answer = middle
    }
    else {
        high = middle - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2417번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Int형의 범위를 초과하는 숫자여서 애를 먹었다. Double로 변경해서 풀어서 해결함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2417번(이분탐색)
let n = Double(readLine()!)! // Int로 하면 middle제곱부분에서 범위 초과.
//var low = 0
//var high = n
//var answer: Int = 0
//
//while low &amp;lt;= high {
//    let middle = (low + high) / 2
//
//    if middle * middle &amp;gt;= Int(n) {
//        high = middle - 1
//        answer = middle
//    }
//    else {
//        low = middle + 1
//    }
//}

var low = 0.0, high = n, answer = 0.0 // Double로 하면 이분탐색 가능.

while low &amp;lt;= high {
    let middle = Double(Int((low + high) / 2)) // 중간에 Int로 바꾸는 이유는, /2를 했을 때 소수점을 없애기 위해서.
    
    if middle * middle &amp;gt;= n {
        high = middle - 1
        answer = middle
    }
    else {
        low = middle + 1
    }
    
}

print(Int(answer))&lt;/code&gt;&lt;/pre&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;백준 Swift 10815번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10815번(이분탐색)
let N = Int(readLine()!)!
let sanggeunCards = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
let M = Int(readLine()!)!
let checkCards = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var answerArray: [String] = Array(repeating: &quot;0&quot;, count: M)

for (index, card) in checkCards.enumerated() {
    var lowIndex: Int = 0
    var highIndex: Int = N - 1
    
    while lowIndex &amp;lt;= highIndex {
        let middleIndex = (lowIndex + highIndex) / 2
        
        if sanggeunCards[middleIndex] == card {
            answerArray[index] = &quot;1&quot;
        }
        
        if sanggeunCards[middleIndex] &amp;lt; card {
            lowIndex = middleIndex + 1
        }
        else {
            highIndex = middleIndex - 1
        }
    }
}

print(answerArray.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;백준 Swift 2805번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 기본 - 단순 합이 아니라, 한번 더 조건을 생각해야 하는 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2805번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
let trees = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

var lowHeight: Int = 0
var highHeight: Int = trees.max()!
var answer: Int = 0 // 절단기 높이

while lowHeight &amp;lt;= highHeight {
    let middleHeight = (lowHeight + highHeight) / 2
    
//    let sum = trees.map{$0 - middleHeight}.reduce(0, +) // 이렇게 하면, 절단기 높이(middleHeight)가 더 높을 때 음수가 같이 더해짐.
    var sum: Int = 0
    for tree in trees {
        sum += tree - middleHeight &amp;gt; 0 ? tree - middleHeight : 0 // (나무 - 중간값) 들의 합 : 만약 음수면 안더함.
    }
    
    if sum &amp;gt;= M {
        lowHeight = middleHeight + 1
        answer = middleHeight
    }
    else {
        highHeight = middleHeight - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1654번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1654번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (K, N) = (input[0], input[1])
var lan: [Int] = [] // 랜선들 모음.
for _ in 0..&amp;lt;K {
    lan.append(Int(readLine()!)!)
}

var low = 1 // 0으로 하면 런타임 에러(자연수라고 했기 때문에)
var high = lan.max()!
var answer: Int = 0

while low &amp;lt;= high {
    let middle = (low + high) / 2
    var countSum: Int = 0 // 생성되는 랜선개수 합
//    for l in lan {
//        countSum += (l / middle)
//    }
    countSum = lan.map{$0 / middle}.reduce(0, +) // for문 축약.
    
    if countSum &amp;gt;= N { // 필요한 랜선이 충분하면, 랜선 길이를 더 늘려본다.(최대 길이를 구해야 하기 때문에)
        low = middle + 1
        answer = middle
    }
    else { // 필요한 랜선이 안나오면, 랜선 길이를 줄여본다.
        high = middle - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2512번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 기본&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2512번(이분탐색)
let N = Int(readLine()!)!
let moneys = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let M = Int(readLine()!)!

var low = 1
var high = moneys.max()!
var answer: Int = 0

while low &amp;lt;= high {
    let middle = (low + high) / 2
    var sum: Int = 0
    
    for money in moneys {
        sum += money &amp;gt; middle ? middle : money
    }
    
    if sum &amp;lt;= M {
        low = middle + 1
        answer = middle
    }
    else {
        high = middle - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 19637번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분 탐색 기본 활용 - 처음에 약간 고민을 했다. power가 기준값(values[middleIndex])보다 낮을 때 highIndex를 -1해주는게 중요했다. (lowIndex를 +1해주면 안된다. 더 높은 기준에서 되는지 체크할 게 아니라, 더 낮은 기준에서 되는지 체크해야 되기 때문이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그리고 입력받을 때, 중복되는 값을 제외하려고 하지 않아도 됐다. 처음엔 해야만 문제가 안생긴다고 생각했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시간초과가 나서 다시 고민해보니 어차피 입력이 오름차순으로 들어오고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예시2처럼 만약 입력이 같더라도 highIndex가 -1이 되면서, 더 최근꺼로 넘어가게 되기 때문에 할 필요가 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 19637번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var titles: [String] = []
var values: [Int] = []
for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
//    if !values.contains(Int(input[1])!) { // (예제2처럼) 중복되는 값은 제외. - 이 부분 필요 없었음. 이유 : 어차피 오름차순으로 들어오고, 같더라도 highIndex가 -1이 되면서 더 최근꺼로 출력하게 되기 때문.
    titles.append(input[0])
    values.append(Int(input[1])!)
//    }
}

for _ in 0..&amp;lt;M {
    let power = Int(readLine()!)!
    var lowIndex: Int = 0
    var highIndex: Int = values.count - 1
    var answerIndex: Int = 0
    
    while lowIndex &amp;lt;= highIndex {
        let middleIndex = (lowIndex + highIndex) / 2
//        print(lowIndex, highIndex, middleIndex)
        
        if power &amp;lt;= values[middleIndex] { // 기준이 더 낮을 때도 포함되는지 확인하기 위해,
            highIndex = middleIndex - 1 // 높은 인덱스를 -1.
            answerIndex = middleIndex
        }
        else { // 기준이 더 높을 때는 포함되는지 확인하기 위해,
            lowIndex = middleIndex + 1 // 낮은 인덱스를 +1.
        }
    }
    print(titles[answerIndex])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11663번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 활용 - 어려웠다. 하루동안 고민한 거 같다. 뭔가 값은 비슷하게 나오는데,&lt;b&gt; 모든 case에 맞는 답이 계속 안나오더라.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준11663번 고민.jpeg&quot; data-origin-width=&quot;2951&quot; data-origin-height=&quot;3002&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YF8mz/btryF9qy019/u7oTTq5T8ngaKcaaLpkpIk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YF8mz/btryF9qy019/u7oTTq5T8ngaKcaaLpkpIk/img.jpg&quot; data-alt=&quot;백준 Swift 11663번 풀이 고민 - 참고용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YF8mz/btryF9qy019/u7oTTq5T8ngaKcaaLpkpIk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYF8mz%2FbtryF9qy019%2Fu7oTTq5T8ngaKcaaLpkpIk%2Fimg.jpg&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;400&quot; height=&quot;407&quot; data-filename=&quot;백준11663번 고민.jpeg&quot; data-origin-width=&quot;2951&quot; data-origin-height=&quot;3002&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 11663번 풀이 고민 - 참고용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다시 종이에 풀면서 고민을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;계속 고민 하다보니, &lt;b&gt;한번에 모든 case에 맞는 답이 나오는 게 아니라,&lt;/b&gt; case를 나눠서 답을 출력해주면 되겠다 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;풀이종이를 함께 보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;case 1 : 인덱스 값끼리 빼준다. ( highIndex - lowIndex)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;case 2 : 인덱스 값끼리 빼주고, 1을 더한다. (highIndex - lowIndex + 1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;케이스가 &lt;/b&gt;이렇게 &lt;b&gt;두가지로 나뉜다는 걸 알았다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그 다음,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;선분의 작은 값(lowCoord)보다 coords[lowIndexAnswer]가 더 작을 때&lt;/span&gt;, 혹은 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;선분의 큰 값(highCoord)보다 coords[highIndexAnswer]가 더 클 때&lt;/span&gt;, 가 case1에 해당하는걸 찾아냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;coords가 [4, 7, 11, 19]일 때,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;case1의 예시는&amp;nbsp;선분이 (5~12), (20~30) 등은 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;왼쪽조건&lt;/span&gt;에 해당하고, 선분이 (1~3)은 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;오른쪽조건&lt;/span&gt;에 해당한다. - 하단 코드 참고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;규칙성을 찾았으니, 케이스가 나뉘는 부분을 코드로 구현해서 해결했다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2308&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9t6fx/btryJjZJbL1/hm3YkMcuBobhHsAhXQ0EN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9t6fx/btryJjZJbL1/hm3YkMcuBobhHsAhXQ0EN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9t6fx/btryJjZJbL1/hm3YkMcuBobhHsAhXQ0EN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9t6fx%2FbtryJjZJbL1%2Fhm3YkMcuBobhHsAhXQ0EN0%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;400&quot; height=&quot;106&quot; data-origin-width=&quot;2308&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아 그리고 케이스 나눠줬으니까 맞게 푼 거 같았는데 또 틀리더라. 절망했지만... 다시 처음부터 확인하면서 고민해보니, coords의 &lt;b&gt;오름차순정렬을 빠트렸었다. &lt;/b&gt;(이런 -_-)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;이분정렬을 할 때는 정렬을 절대 빠트리지 말자!&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;뭔가 힘들었다... 그래도 해결해서 기분은 좋다. 나중에 시간이 지나 잊었을 때 다시 풀어봐야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11663번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
let coords = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)

func findHigh(_ coord: Int) -&amp;gt; Int {
    var lowIndex: Int = 0
    var highIndex: Int = N - 1
    var answerIndex: Int = 0
    
    while lowIndex &amp;lt;= highIndex {
        let middleIndex = (lowIndex + highIndex) / 2
        if coords[middleIndex] &amp;lt;= coord {
            lowIndex = middleIndex + 1
            answerIndex = middleIndex
        }
        else {
            highIndex = middleIndex - 1
        }
    }
    return answerIndex
}

func findLow(_ coord: Int) -&amp;gt; Int {
    var lowIndex: Int = 0
    var highIndex: Int = N - 1
    var answerIndex: Int = 0
    
    while lowIndex &amp;lt;= highIndex {
        let middleIndex = (lowIndex + highIndex) / 2
        if coords[middleIndex] &amp;lt;= coord {
            lowIndex = middleIndex + 1
            answerIndex = middleIndex
        }
        else {
            highIndex = middleIndex - 1
        }
    }
    return answerIndex
}

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (lowCoord, highCoord) = (input[0], input[1])
    
    let highIndexAnswer = findHigh(highCoord)
    let lowIndexAnswer = findLow(lowCoord)
//    print(lowIndexAnswer, highIndexAnswer)
    
    var count: Int = 0
    if coords[lowIndexAnswer] &amp;lt; lowCoord || coords[highIndexAnswer] &amp;gt; highCoord { // ex) coords가 [4, 7, 11, 19]일 때, 선분이 (5~12), (20~30) 등은 왼쪽조건에 해당. 선분이 (1~3)은 오른쪽조건에 해당.
        count = highIndexAnswer - lowIndexAnswer
    }
    else {
        count = highIndexAnswer - lowIndexAnswer + 1
    }
    print(count)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2110번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : Parametric Search, 이분탐색 활용 - 이 문제를 보고 이분탐색인지 알아내는게 어려웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다른 풀이들을 보고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;가능한 거리들을 1부터 최대로 둔 다음, 각각의 거리일 때 공유기의 개수를 확인하는 식으로 코드를 짜면 된다는 걸 알게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;많이 풀다 보면 이 문제가 어떤 유형인지 알 수 있는 날이 오겠...지... ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://assaeunji.github.io/python/2020-05-07-bj2110/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://assaeunji.github.io/python/2020-05-07-bj2110/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2110번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, C) = (input[0], input[1])
var houses: [Int] = []
for _ in 0..&amp;lt;N {
    houses.append(Int(readLine()!)!)
}
houses.sort(by: &amp;lt;)

var lowDistance = 1 // 가능한 거리 중, 최소 거리
var highDistance = houses[N - 1] - houses[0] // 가능한 거리 중, 최대 거리
var answer = 0

while lowDistance &amp;lt;= highDistance {
    let middleDstance = (lowDistance + highDistance) / 2 // gap
    
    var count: Int = 1 // 맨 처음에 공유기 설치.
    var base = houses[0]
    for i in 1..&amp;lt;N { // 둘째집부터 돌면서 체크.
        if (base + middleDstance) &amp;lt;= houses[i] { // 다음 집이 (base+설정한gap)에 포함될 때, 공유기 설치.
            count += 1
            base = houses[i]
        }
    }
    
    if count &amp;gt;= C { // 설치된 공유기가 C개 이상이면, gap을 늘려서 더 큰 거리일 때 되는지 체크가 필요. -&amp;gt; gap 늘림.
        lowDistance = middleDstance + 1
        answer = middleDstance
    }
    else { // 설치된 공유기가 C개보다 적다는 건, 더 설치 필요. -&amp;gt; gap 축소.
        highDistance = middleDstance - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 3079번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문제 유형 : 이분탐색 활용 - 계속 내 힘으로 푸는 게 아니라 참고해서 푼다...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;풀다 보니 느낀건 &lt;u&gt;어떤걸 탐색돌려야 하는지&lt;/u&gt;와, 탐색의 &lt;u&gt;첫 low와 high를 생각 못해서&lt;/u&gt; 못 푸는 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문제를 마주했을 때 &lt;b&gt;생각흐름도&lt;/b&gt;를 정형화해야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;순서 1. 이분탐색 문제인지 확인한다.&lt;br /&gt;순서 2. 이분탐색 문제라면, &lt;b&gt;어떤걸 탐색돌려야 하는지 고민&lt;/b&gt;한다. (중요!)&lt;br /&gt;순서 3. 어떤걸 탐색돌려야 하는지 찾았다면, &lt;b&gt;탐색의 범위(low, high)를 찾는다.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제에선 (정답이 되는) 결과 시간을 탐색돌려야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결과 시간이 x초(middle)일때, 몇 명이 pass했는지 체크하면 되는 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;각 심사대에서 몇 명이 패스했는지 아는 방법은 (x초 / 심사하는데 걸리는 시간)을 하면 몇 명인지 구할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;1801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5oKlf/btryJYuRTEz/jS3TUyU2KDY62g0WOwoDNK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5oKlf/btryJYuRTEz/jS3TUyU2KDY62g0WOwoDNK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5oKlf/btryJYuRTEz/jS3TUyU2KDY62g0WOwoDNK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5oKlf%2FbtryJYuRTEz%2FjS3TUyU2KDY62g0WOwoDNK%2Fimg.jpg&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;400&quot; height=&quot;179&quot; data-origin-width=&quot;4030&quot; data-origin-height=&quot;1801&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3079번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var times: [Int] = []

for _ in 0..&amp;lt;N {
    times.append(Int(readLine()!)!)
}
times.sort(by: &amp;lt;)

var lowTime = 1 // 최소 결과 시간
var highTime = times[N - 1] * M // 최대 결과 시간
var answerTime: Int = 0

while lowTime &amp;lt;= highTime {
    let middleTime = (lowTime + highTime) / 2
    
    var sum: Int = 0
    for time in times {
        sum += middleTime / time // x초(middleTime)까지의 시간이 지났을 때, 각 심사대에서 pass한 인원의 합.
    }
    
    if sum &amp;gt;= M { // M명이상이 이미 통과했으면, 더 적은 시간일 때 어떨지 체크를 위해 high를 감소.
        highTime = middleTime - 1
        answerTime = middleTime
    }
    else { // M명이 아직 통과도 못했으면, 더 긴 시간일 때 어떨지 체크를 위해 low를 증가.
        lowTime = middleTime + 1
    }
    
}
print(answerTime)&lt;/code&gt;&lt;/pre&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;백준 Swift 2470번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 활용 - 어떤걸 탐색돌려야 하는지 고민했을 때 조합을 쓰고, 그 조합결과에서 나온 값들을 탐색돌려야 한다고 생각해서 틀렸었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;조합을 쓰면 한단계를 더 거쳐가는 것이기 때문에 불필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제엔 두가지 핵심이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;첫번째, 용액 자체들을 바로 탐색을 돌리면 되고, &lt;b&gt;middleIndex가 필요 없다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;두번째, 두 용액이 같을 수는 없기 때문에, while문에서 &lt;b&gt;&amp;lt; &lt;/b&gt;로 해야 하는걸 생각해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;while (lowIndex &lt;b&gt;&amp;lt;=&lt;/b&gt; highIndex) 로 하면 안되는 &lt;b&gt;반례&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;6&lt;br /&gt;-4 -3 -1 0 2 5 =&amp;gt; (0 0)이 나온다. (틀림)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;위 반례에서 if문 abs의 &lt;b&gt;&amp;lt;&lt;/b&gt; 나 &lt;b&gt;&amp;lt;=&lt;/b&gt; 에 따라서, (-4 5) 혹은 (-1 0)이 나와야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://data-bank.tistory.com/29&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://data-bank.tistory.com/29&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2470번(이분탐색)
let N = Int(readLine()!)!
let liquids = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
var lowIndex: Int = 0
var highIndex: Int = N - 1

var distance: Int = 2000000000 // 0과의 거리. - 최대 1000000000라서 2배.
var answerLowIndex: Int = 0
var answerHighIndex: Int = N - 1

while lowIndex &amp;lt; highIndex {
    let temp = liquids[lowIndex] + liquids[highIndex]
    if abs(temp) &amp;lt; distance { // 새로운조합이 기존보다 0과의 거리가 더 작으면, (등호가 들어가도 되고 안 들어가도 됨. 등호가 들어가게 되면, 거리가 같은게 있을 때 점점 가운데쪽 인덱스로 가까워짐. 등호가 없으면, 거리가 같은게 있어도 바깥쪽 인덱스에서 가운데쪽으로 가까워지지 않음.)
        distance = abs(temp)
        answerLowIndex = lowIndex
        answerHighIndex = highIndex
        if temp == 0 { // 만약 0이면, 더 이상 확인할 필요 없이 바로 stop.
            break
        }
    }
    
    if temp &amp;lt; 0 { // 음(-)이 더 강하면, 양(+)쪽으로.
        lowIndex += 1
    }
    else { // 양(+)이 더 강하면, 음(-)쪽으로.
        highIndex -= 1
    }
}

print(liquids[answerLowIndex], liquids[answerHighIndex])&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 짠 코드 - 메모리 초과&lt;/p&gt;
&lt;pre id=&quot;code_1649391595666&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2470번(조합, 이분탐색) - 메모리초과
func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var results: [[Int]] = []
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            results.append(nowCombi)
            return
        }
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    combination(0, [])
    return results
}

let N = Int(readLine()!)!
let liquids = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)

let liquidsTwo = combi(liquids, 2)
//print(liquidsTwo)
var sumDict: [Int : Int] = [:]
for (index, nums) in liquidsTwo.enumerated() {
    sumDict[index] = nums.reduce(0, +)
//    sumArray.append(nums.reduce(0, +))
}
//print(sumDict)

let sumArray: [Int] = sumDict.values.sorted(by: &amp;lt;)
//print(sumArray)
var lowIndex: Int = 0
var highIndex: Int = sumArray.count - 1
var minD = 2000000000 // 0과의 거리
var answerIndex: Int = 0

while lowIndex &amp;lt;= highIndex {
    let middleIndex = (lowIndex + highIndex) / 2

    if abs(sumArray[middleIndex]) &amp;lt;= minD { // minD보다 더 작은 거리가 있는지 체크하기 위해, highIndex를 줄임.
        minD = abs(sumArray[middleIndex])
        highIndex = middleIndex - 1
        answerIndex = middleIndex
    }
    else { // minD보다 크면, low를 높여야함.(low보다 index가 더 작은 곳엔, 거리(값)가 더 큰 애들밖에 없음.)
        lowIndex = middleIndex + 1
    }
}

for data in sumDict {
    if data.value == sumArray[answerIndex] {
        print(liquidsTwo[data.key][0], liquidsTwo[data.key][1])
        break
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 20444번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 활용 - 처음의 생각대로 풀었을 땐, 메모리초과가 났다. 배열에 담았다가 값들을 다시 꺼내오는 식으로 구조를 짜서 문제가 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;값들을 바로 탐색 돌리는 식으로 코드를 수정하니 해결 성공!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pe9cD/btryO5uifFR/tETZKBuwX8WNY0l86WhaPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pe9cD/btryO5uifFR/tETZKBuwX8WNY0l86WhaPK/img.jpg&quot; data-alt=&quot;하얀 박스 부분 참고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pe9cD/btryO5uifFR/tETZKBuwX8WNY0l86WhaPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpe9cD%2FbtryO5uifFR%2FtETZKBuwX8WNY0l86WhaPK%2Fimg.jpg&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;400&quot; height=&quot;533&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;하얀 박스 부분 참고&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(가로방향 + 1) * (세로방향 + 1)이 색종이의 총 개수다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;세로방향은 (n - 가로방향)이므로,&amp;nbsp; let count = (middle + 1) * ((n - middle) + 1) 가 된다. 위 사진 참고!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2308&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3HDtA/btryNb9WmRJ/MJrQR0UTScXhDPXCclfWUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3HDtA/btryNb9WmRJ/MJrQR0UTScXhDPXCclfWUk/img.png&quot; data-alt=&quot;백준 Swift 20444번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3HDtA/btryNb9WmRJ/MJrQR0UTScXhDPXCclfWUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3HDtA%2FbtryNb9WmRJ%2FMJrQR0UTScXhDPXCclfWUk%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;400&quot; height=&quot;81&quot; data-origin-width=&quot;2308&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 20444번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20444번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, k) = (input[0], input[1])

var low: Int = 0
var high: Int = n/2 // 전체 n번 중, n/2까지만 확인하면 됨.
var answer: String = &quot;NO&quot;

while low &amp;lt;= high {
    let middle = (low + high) / 2
    let count = (middle + 1) * ((n - middle) + 1) // 종이의 개수 = (가로방향 + 1) * (세로방향 + 1)
    
    if count == k { // 정답일 땐 더 이상 돌아볼 필요 X.
        answer = &quot;YES&quot;
        break
    }
    
    if count &amp;gt; k {
        high = middle - 1
    }
    else {
        low = middle + 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 짠 코드 - 메모리 초과 코드&lt;/p&gt;
&lt;pre id=&quot;code_1649410413977&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20444번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, k) = (input[0], input[1])

//var numArray: [(horizontal: Int, vertical: Int)] = [] // (가로방향으로 자르는 횟수, 세로방향으로 자르는 횟수)
//for i in 0...n/2 {
//    numArray.append((i, n - i))
//}

var countArray: [Int] = []
//for nums in numArray {
//    countArray.append((nums.horizontal + 1) * (nums.vertical + 1))
//}

for i in 0...n/2 {
    countArray.append((i + 1) * ((n - i) + 1))
}

//countArray.sort(by: &amp;lt;)

var lowIndex: Int = 0
var highIndex: Int = countArray.count - 1
var answer: String = &quot;NO&quot;

while lowIndex &amp;lt;= highIndex {
    let middleIndex = (lowIndex + highIndex) / 2
    
    if countArray[middleIndex] == k {
        answer = &quot;YES&quot;
        break
    }
    
    if countArray[middleIndex] &amp;gt; k {
        highIndex = middleIndex - 1
    }
    else {
        lowIndex = middleIndex + 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 1477번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : Parametric Search, 이분탐색 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음 문제를 봤을 때 이분탐색일 거라고 생각이 안 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;첫 풀이는 각각의 거리들을 구해 distance배열에 넣고, M번까지 for문을 돌리면서 distance.max() 값의 /2 를 다시 넣어주고, 그 distance배열의 max값을 출력해주면 된다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;하지만 이 풀이방법은 각각의 거리에, 1개씩만 휴게소가 들어간다는 조건일 때에만 가능한 것인거다. 잘못 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;고민 끝에 다른 게시물을 참고해서 풀었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의사항 1. &lt;b&gt;low를 0으로 해서 런타임 에러&lt;/b&gt;가 계속 났었다. low와 high값을 잘 확인하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의사항 2. distance가 기준값(middle)에 정확히 나눠떨어질 때 마지막 설치에서 겹치기 때문에, &lt;b&gt;count에 -1을 해줘야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;주의사항 3.&amp;nbsp;설치 개수가 M보다 적으면, 간격을 더 줄일 때 - M개를 설치했을 때 구간들의 최댓값을 최소로 하려는 거기 때문에, 여기에 &lt;b&gt;등호가 들어간다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1136&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/20uN0/btry0dx3dgU/7ZdO96Vd0YIq0hrSk0YK11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/20uN0/btry0dx3dgU/7ZdO96Vd0YIq0hrSk0YK11/img.png&quot; data-alt=&quot;백준 Swift 1477번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/20uN0/btry0dx3dgU/7ZdO96Vd0YIq0hrSk0YK11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F20uN0%2Fbtry0dx3dgU%2F7ZdO96Vd0YIq0hrSk0YK11%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;72&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1477번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #666666;&quot; href=&quot;https://paris-in-the-rain.tistory.com/44&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://paris-in-the-rain.tistory.com/44&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1477번(이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, L) = (input[0], input[1], input[2])
let storeCoord: [Int] = [0] + readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;) + [L] // 휴게소들 좌표 저장. (시작 0, 끝 L)

var low: Int = 1 // 설치 가능한 최저
var high: Int = L - 1 // 설치 가능한 최대
var answerDistance: Int = 0 // 정답

while low &amp;lt;= high {
    let middle = (low + high) / 2 // 기준 거리

    var newStoreCount: Int = 0
    
    for i in 1..&amp;lt;storeCoord.count {
        let distance = storeCoord[i] - storeCoord[i - 1] // 각각의 거리.
        
        newStoreCount += distance / middle // 각각의 거리에서 나올 수 있는 휴게소의 개수.
        
        if distance % middle == 0 { // 만약 나눠떨어지면, 끝부분에 중복설치가 됨.
            newStoreCount -= 1 // 그래서 count값에 -1해줌.
        }
    }

    if newStoreCount &amp;lt;= M { // 개수가 M보다 적으면, 간격을 더 줄여야 함. - M개를 설치했을 때 구간들의 최댓값을 최소로 하려는 거기 때문에, 여기에 등호가 들어감.
        high = middle - 1 // (그래야 개수가 늘어나니깐)
        answerDistance = middle
    }
    else { // 개수가 M보다 많으면, 간격을 더 늘려야 함.
        low = middle + 1 // (그래야 개수가 줄어드니깐)
    }
}
print(answerDistance)&lt;/code&gt;&lt;/pre&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;백준 Swift 1939번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 + DFS/BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 문제를 처음 봤을 때, 어디에서 이분탐색을 돌려야 하는지 알지 못했다. 인접행렬을 만든 뒤, 목표지점까지 도달할 수 있는 여러 길들 중, 각각의 길의&amp;nbsp; 결과weight(최소)를 배열에 넣고, 배열에서 최댓값을 출력하면 된다고 생각했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;우선 기본 인접행렬을 하면 두 섬 사이에 다리가 여러 개일 때 문제가 생겼다. 또한, 인접행렬을 해결했다고 하더라도, 방문처리를 하는 과정에서 지나간 길은 다시 못지나가는 문제가 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;1802&quot; data-origin-height=&quot;1412&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BiXq8/btry7u0LCdH/N9YIkGl1lgbSKwkXb84ESK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BiXq8/btry7u0LCdH/N9YIkGl1lgbSKwkXb84ESK/img.png&quot; data-alt=&quot;백준 Swift 1939번 - 초기 생각한 DFS 코드.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BiXq8/btry7u0LCdH/N9YIkGl1lgbSKwkXb84ESK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBiXq8%2Fbtry7u0LCdH%2FN9YIkGl1lgbSKwkXb84ESK%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;400&quot; height=&quot;313&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;1412&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1939번 - 초기 생각한 DFS 코드.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결국 초기의 풀이는 틀린 것으로 판단하고, 다른 블로그들에서 풀이를 보고 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;low와 high를 통해 정해진 &lt;u&gt;&lt;b&gt;mid(기준)중량이 목표지점까지 갈 수 있는지 없는지 체크하는 식으로 해결&lt;/b&gt;&lt;/u&gt;하면 되는 거였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;실제 코테에서 이분탐색만 있는 문제는 거의 안 나오고, 이분탐색과 다른 유형이 합쳐진 문제가 주로 출제된다고 하니깐... 더 열심히 해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;예시&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3346&quot; data-origin-height=&quot;1525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyAGC/btry69P5mUQ/FKADTpkuBfMqtznp8tYz51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyAGC/btry69P5mUQ/FKADTpkuBfMqtznp8tYz51/img.jpg&quot; data-alt=&quot;백준 Swift 1939번 고민.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyAGC/btry69P5mUQ/FKADTpkuBfMqtznp8tYz51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkyAGC%2Fbtry69P5mUQ%2FFKADTpkuBfMqtznp8tYz51%2Fimg.jpg&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;400&quot; height=&quot;182&quot; data-origin-width=&quot;3346&quot; data-origin-height=&quot;1525&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1939번 고민.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size14&quot;&gt;5 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1 2 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5 4 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4 1 6&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;5 1 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;4 3 4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;3 4 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2 3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; 나올 답은 4&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://woongsios.tistory.com/234&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://woongsios.tistory.com/234&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://velog.io/@ckstn0778/%EB%B0%B1%EC%A4%80-1939%EB%B2%88-%EC%A4%91%EB%9F%89%EC%A0%9C%ED%95%9C-1-Python&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@ckstn0778/%EB%B0%B1%EC%A4%80-1939%EB%B2%88-%EC%A4%91%EB%9F%89%EC%A0%9C%ED%95%9C-1-Python&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;이분탐색 + &lt;u&gt;BFS&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1939번(BFS + 이분체크)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var graph: [[(Int, Int)]] = Array(repeating: [], count: N + 1)
var visited = Array(repeating: false, count: N + 1)

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (A, B, C) = (input[0], input[1], input[2])
    graph[A].append((B, C))
    graph[B].append((A, C))
}
let fromTo = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (startX, endX) = (fromTo[0], fromTo[1])

func isEscape(_ island: Int) -&amp;gt; Bool { // 섬번호가 목표지점에 도달하면 탈출.
    return island == endX
}

func bfs(_ startIsland: Int, _ standardWeight: Int) -&amp;gt; Bool {
    var q: [Int] = [startIsland]
    visited[startIsland] = true
    
    while !q.isEmpty {
        let islandNumber = q.removeFirst()
        
        if isEscape(islandNumber) { // 탈출 성공 시,
            return true // middle(기준)중량으로 운송 가능.
        }
        
        for (nextIsland, limitWeight) in graph[islandNumber] {
            if limitWeight &amp;gt;= standardWeight &amp;amp;&amp;amp; !visited[nextIsland] { // 다음섬과 연결된 다리의 중량제한이 middle(기준)중량 이상일 때에만 다음 섬으로 이동 가능. + 미방문시,
                visited[nextIsland] = true
                q.append(nextIsland)
            }
        }
        
        
    }
    return false
}



var low: Int = 1
var high: Int = 1000000001
var answer: Int = 0
while low &amp;lt;= high {
    visited = Array(repeating: false, count: N + 1) // 매 middle(기준)중량일 때, 방문배열 초기화해줘야 함.
    let middle = (low + high) / 2
    
    if bfs(startX, middle) { // 지금 middle(기준) 중량이 운송 가능하다면, 더 높은 중량에서 가능한지 체크하기 위해 low를 높여본다.
        low = middle + 1
        answer = middle
    }
    else { // middle(기준) 중량으로 운송 불가능하다면, 낮춰야 함.
        high = middle - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;size14&quot;&gt;&lt;b&gt;이분탐색 + &lt;u&gt;DFS&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://loosie.tistory.com/313&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/313&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1649664577997&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1939번(DFS + 이분체크)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var graph: [[(Int, Int)]] = Array(repeating: [], count: N + 1)
var visited = Array(repeating: false, count: N + 1)

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (A, B, C) = (input[0], input[1], input[2])
    graph[A].append((B, C))
    graph[B].append((A, C))
}
let fromTo = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (startX, endX) = (fromTo[0], fromTo[1])

func isEscape(_ island: Int) -&amp;gt; Bool { // 섬번호가 목표지점에 도달하면 탈출.
    return island == endX
}

//func bfs(_ startIsland: Int, _ standardWeight: Int) -&amp;gt; Bool {
//    var q: [Int] = [startIsland]
//    visited[startIsland] = true
//
//    while !q.isEmpty {
//        let islandNumber = q.removeFirst()
//
//        if isEscape(islandNumber) { // 탈출 성공 시,
//            return true // middle(기준)중량으로 운송 가능.
//        }
//
//        for (nextIsland, limitWeight) in graph[islandNumber] {
//            if limitWeight &amp;gt;= standardWeight &amp;amp;&amp;amp; !visited[nextIsland] { // 다음섬과 연결된 다리의 중량제한이 middle(기준)중량 이상일 때에만 다음 섬으로 이동 가능. + 미방문시,
//                visited[nextIsland] = true
//                q.append(nextIsland)
//            }
//        }
//    }
//    return false
//}

func dfs(_ island: Int, _ standardWeight: Int) {
    if isEscape(island) {
        canTransit = standardWeight // standardWeight = middle 같음.
        return
    }
    for (nextIsland, limitWeight) in graph[island] {
        if limitWeight &amp;gt;= standardWeight &amp;amp;&amp;amp; !visited[nextIsland] { // 다음섬과 연결된 다리의 중량제한이 middle(기준)중량 이상일 때에만 다음 섬으로 이동 가능. + 미방문시,
            visited[nextIsland] = true
            dfs(nextIsland, standardWeight)
        }
    }
}


var low: Int = 1
var high: Int = 1000000001
var canTransit: Int = -1 // // middle(기준)중량으로 운송 가능한지 체크를 위한 변수.
var answer: Int = 0
while low &amp;lt;= high {
    visited = Array(repeating: false, count: N + 1) // 매 middle(기준)중량일 때, 방문배열 초기화해줘야 함.
    let middle = (low + high) / 2

    canTransit = -1 // middle(기준)중량으로 운송 가능한지 여부.
    visited[startX] = true
    dfs(startX, middle) // canTransit값이 바뀌어 있다면, middle(기준)중량으로 운송 가능.
    
    if canTransit != -1 { // 지금 middle(기준) 중량이 운송 가능하다면, 더 높은 중량에서 가능한지 체크하기 위해 low를 높여본다.
        low = middle + 1
        answer = middle
    }
    else { // middle(기준) 중량으로 운송 불가능하다면, 낮춰야 함.
        high = middle - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2473번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 이분탐색 활용 - 2470번 문제를 풀고, 조금만 더 생각해보면 쉽게 풀 수 있는 문제였다. 2개의 용액이 아닌, 3개의 용액을 선택해야 하기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;index 0..&amp;lt;N-2까지 돌면서 첫번째 용액을 선택 시, 나머지 2개의 용액 선택범위를 low와 high로 선정 후 이분탐색을 돌리면 해결 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2473번(이분탐색)
let N = Int(readLine()!)!
let liquids = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)

var liquidSumDistance: Int = 3000000001 // 세 용액의 합.
var answerIndex1: Int = 0
var answerIndex2: Int = 0
var answerIndex3: Int = 0
outLoop: for i in 0..&amp;lt;N-2 {
    let liq1 = liquids[i] // 첫번째 용액 선택.
    var lowIndex: Int = i + 1
    var highIndex: Int = N - 1

    while lowIndex &amp;lt; highIndex {
        let liq2 = liquids[lowIndex]
        let liq3 = liquids[highIndex]
        
        let sum = liq1 + liq2 + liq3
        if abs(sum) &amp;lt; liquidSumDistance { // 용액의 합(sum)이 0과 더 가깝다면,
            liquidSumDistance = abs(sum) // 더 가까운 합으로 0과의 거리 업데이트.
            (answerIndex1, answerIndex2, answerIndex3) = (i, lowIndex, highIndex)
        }
        
        if sum == 0 { // 더 이상 돌 필요 없이 끝.
            break outLoop
        }
        else if sum &amp;gt; 0 { // 양의 기운이 강한 상태라면, 음쪽으로 가야 함.
            highIndex -= 1
        }
        else { // 음의 기운이 강한 상태라면, 양쪽으로 가야 함.
            lowIndex += 1
        }
    }
}
print(liquids[answerIndex1], liquids[answerIndex2], liquids[answerIndex3])&lt;/code&gt;&lt;/pre&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;백준 Swift 13397번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : Parametric Search, 이분탐색&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 어려웠다. 솔직히 감을 못잡았다. 풀이 안 봤으면 계속 못 풀었을 것 같다... 언제쯤 이런 문제도 쉽게 풀 수 있을까..&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;핵심 1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;구간점수들 중 기준이 될 최댓값(middle)을 잡고, numsArray배열을 돌면서 &lt;u&gt;&lt;b&gt;구간점수(max-min)가 middle보다 클 시, 구간이 바뀌는 곳&lt;/b&gt;&lt;/u&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; (이해가 처음에 안됐는데, 계속 생각하다 보니 알겠더라.) 기준이 되는 middle보다 구간점수가 커진다는 건, 이미 middle이 나올 수 있는 최댓값이라는 걸 isAble에 들어갈 때부터 정하고 while문을 도는 것이기 때문에 사실 불가능한 상황인 거다. =&amp;gt; 그 뜻은, middle보다 구간점수가 커지는 index가 새로운 구간의 시작점이 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;핵심 2&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;구간이 바뀌는 상황일 때 &lt;u&gt;&lt;b&gt;index를 -1 해줘야 한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; 그렇지 않으면, &lt;b&gt;구간에 하나의 숫자만 있는 상황이 고려 되지 않는다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 테스트케이스들에선 문제되는 케이스가 없어서 다른 글에 있는 코드들이 pass가 된건지 or 논리적으로 고려하지 않아도 돼서 안한건지는 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;그래도 나는 위 케이스를 판단해주는 게 맞다고 생각해서 while문으로 작성후 index를 빼줬다. (for문으로 하고 싶었지만, swift에서는 for문 다시 index 되돌아가는 게 없어서...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;참고한 대부분의 블로그에선 하나의 숫자만 있는 상황이 고려되진 않은 것 같다. 참고한 글들 중 유일하게 위 케이스가 고려된 글 - &lt;a style=&quot;color: #666666;&quot; href=&quot;https://loosie.tistory.com/638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/638&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;핵심 3&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;&lt;b&gt;count가 &lt;/b&gt;&lt;/u&gt;0이 아니라&lt;u&gt;&lt;b&gt; 1로 시작해야 한다.&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;-&amp;gt; 가장 마지막 구간은 카운팅이 안되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;=&amp;gt; count가 만약 0으로 시작.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(쉽게 생각하기 위해) 만약 if문에 해당되는 게 없다면(= 구간이 바뀌는 곳이 없다면) count가 0이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열의 모든 숫자가 하나의 구간인 상황이니까 1이 답인데 말이다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고한 글 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://loosie.tistory.com/638&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://loosie.tistory.com/638&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://kyu9341.github.io/algorithm/2020/03/10/algorithm13397/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kyu9341.github.io/algorithm/2020/03/10/algorithm13397/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 13397번(Parametric Search, 이분탐색)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
let numsArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

func isAble(_ standardScore: Int) -&amp;gt; Bool {
    var index: Int = 0
    var count: Int = 1 // 가장 마지막 구간은 카운팅이 안됨. 그래서 1로 시작.
    var temp: [Int] = []
    
    while index &amp;lt; N { // index가 0..&amp;lt;N까지. 그 구간에 1개만 있는 상황 체크를 위해, index를 빼줘야 해서 for문이 아닌 while문으로.
        temp.append(numsArray[index])
        let (max, min) = (temp.max()!, temp.min()!)
        if max - min &amp;gt; standardScore { // 기준값보다 클 때 구간이 바뀜.
            temp.removeAll()
            count += 1
//            temp.append(numsArray[index]) // 구간이 바뀌게 된 숫자부터 다시 시작. - 이 코드는 필요 없음. 이유 : 인덱스를 빼주면, 어차피 (코드상)5줄 위에서 다시 그 구간에 1개만 있는 상황으로 됨.
            index -= 1 // 인덱스를 다시 하나 빼줘야, 구간에 1개만 있는 상황이 체크됨.
        }
        index += 1
    }
    
    return count &amp;lt;= M // middle(standardScore)로 M개 이하의 구간을 만들었는가.
}

var low = 0
var high = numsArray.max()!
var answer: Int = 0
while low &amp;lt;= high {
    let middle = (low + high) / 2

    if isAble(middle) { // 구간점수들 중 최댓값(middle)으로 가능하다면, 더 작은 수로는 가능한지 체크하기 위해.
        high = middle - 1
        answer = middle
    }
    else { // 최솟값(middle)로 불가능하면, 더 큰 수로는 가능한지 체크하기 위해.
        low = middle + 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1300번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 :  이분탐색 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음엔 실제로 2차원 배열을 생성한 뒤 flatMap을 써서 제출했다. 당연하게.. 메모리 초과. 문제는 짧은데, 생각하기가 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;이 문제가 이분탐색 문제라는건 알고 있어서 어떻게 접근하면 좋을까 고민을 하다가 모르겠어서 다른 글들을 참고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제에서 &lt;b&gt;B[k]&lt;/b&gt;를 찾는다는 건, &lt;u&gt;&lt;b&gt;k이하의 숫자가 적어도 k개 있다는 뜻&lt;/b&gt;&lt;/u&gt;이 된다. (=&amp;gt; 즉, &lt;b&gt;이분탐색의 high는 k가 된다.&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;배열을 쓰지 않고(N이 매우 커서 메모리초과가 남) 몇개가 있는지 알아야 k번째 숫자(= 정답)를 구할 수 있을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1. low와 high를 통해 middle(기준값)을 정하고, 기준값을 통해 기준값보다 작거나 같은 숫자 개수를 구한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-1. 기준값을 각 행으로 나눠주면, 그 행에서 나올 수 있는 (기준값보다 작은) 숫자의 개수가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) 구구단의 8단에서, 8의 배수들 중 54보다 작은 숫자의 개수를 구하라고 한다면 어떻게 구할 것인가? 54 / 8 = 6개 일 것이다. 예시와 1-1은 같은 내용이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;1-2. 각 행에서 나올 수 있는 숫자의 개수는 N개일 것이다. NxN행렬이니깐. 하지만, &lt;b&gt;&lt;u&gt;&lt;span style=&quot;background-color: #99cefa;&quot;&gt;(middle(기준값) / i(행렬))&lt;/span&gt; 로만 계산한다면 N개보다 큰 값이 나오게 될 수 있다.&lt;/u&gt;&lt;/b&gt; 따라서, &lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;(middle(기준값) / i(행렬))&lt;/b&gt;&lt;/span&gt; 과 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;&lt;b&gt;N&lt;/b&gt;&lt;/span&gt; 중 &lt;b&gt;작은 숫자&lt;/b&gt;를 더해줘야 한다. =&amp;gt; count += &lt;b&gt;min(middle/i, N)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;ex) N은 3이고 middle은 4일 때, 1행에서 그냥 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;&lt;b&gt;(middle(기준값) / i(행렬))&lt;/b&gt;&lt;/span&gt;로만 계산하면 4가 나오게 된다. 3이 나와야 하는데!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;기준값이 K보다 크거나 같을 때는, 더 작은 기준값일 때도 K개에 해당하는지 찾기 위해 낮춰보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고한 글 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://st-lab.tistory.com/281&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://st-lab.tistory.com/281&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://woongsios.tistory.com/216&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://woongsios.tistory.com/216&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1300번(이분탐색)
let N = Int(readLine()!)!
let k = Int(readLine()!)!
//var A = Array(repeating: Array(repeating: 0, count: N + 1), count: N + 1)
//
//for j in 1..&amp;lt;N+1 {
//    for i in 1..&amp;lt;N+1 {
//        A[j][i] = j * i
//    }
//}
//
//let B = A.flatMap{$0.filter{$0 &amp;gt; 0}}.sorted(by: &amp;lt;)
//print(B[k])

var low: Int = 1
var high: Int = k
var answer: Int = -1
while low &amp;lt;= high {
    let middle = (low + high) / 2
    
    var count: Int = 0
    for i in 1...N {
        count += min(middle / i, N) // (middle/i)와 N 중, 작은 걸 더해야 한다. 예를 들어, 1행(i=1)에서 나올 수 있는 갯수는 최대 N개인데, 더 큰 값이 나올 수도 있기 때문.
    }
    
    if count &amp;gt;= k { // 개수가 K개 이상이면, 더 작은 수일 때도 K개에 해당하는지 찾기 위해 낮춰본다.
        high = middle - 1
        answer = middle
    }
    else { // 개수가 K개보다 아직 적다면, 더 큰 수로 만든다.
        low = middle + 1
    }
}
print(answer)&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>binary search</category>
      <category>Swift Parametric Search</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>Swift 이분탐색</category>
      <category>백준 Swift</category>
      <category>백준 골드</category>
      <category>백준 문제풀이</category>
      <category>백준 실버</category>
      <category>스위프트 파라매트릭 서치</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/200</guid>
      <comments>https://developer-p.tistory.com/200#entry200comment</comments>
      <pubDate>Tue, 5 Apr 2022 22:17:48 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 1743번, 2667번, 2583번, 2468번, 7562번, 1697번, 1182번, 2512번, 10815번,</title>
      <link>https://developer-p.tistory.com/199</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.24 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.27 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.29 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.30 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.04 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.05 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648113226676&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bTm8Tz/hyNNgVkZ8x/vMmloZWPQVmhX2FkBncJH0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bTm8Tz/hyNNgVkZ8x/vMmloZWPQVmhX2FkBncJH0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1743번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1743번(DFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, K) = (input[0], input[1], input[2])
var board = Array(repeating: Array(repeating: &quot;.&quot;, count: M + 1), count: N + 1)
var visited = Array(repeating: Array(repeating: false, count: M + 1), count: N + 1)

for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (r, c) = (input[0], input[1])
    
    board[r][c] = &quot;#&quot; // 음식물 표시.
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool { // board 밖으로 안나가야됨.
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= N) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= M)
}

var count: Int = 0
var temp: [Int] = []

func dfs(_ y: Int, _ x: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == &quot;#&quot; {
            visited[ny][nx] = true
            count += 1
            dfs(ny, nx)
        }
    }
}

for y in 1...N {
    for x in 1...M {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == &quot;#&quot; {
            visited[y][x] = true
            count = 1 // 방문한거로 되면서, 음식물 크기 1부터 시작.
            dfs(y, x)
            
            temp.append(count)
        }
    }
}

print(temp.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1743번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1743번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, K) = (input[0], input[1], input[2])
var board = Array(repeating: Array(repeating: &quot;.&quot;, count: M + 1), count: N + 1)
var visited = Array(repeating: Array(repeating: false, count: M + 1), count: N + 1)

for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (r, c) = (input[0], input[1])
    
    board[r][c] = &quot;#&quot;
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= N) &amp;amp;&amp;amp; (1 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= M)
}


func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true
    var count: Int = 1
    let q = Dequeue([(startY, startX)])
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == &quot;#&quot; {
                visited[ny][nx] = true
                count += 1
                q.pushLast((ny, nx))
            }
        }
    }
    return count
}

var temp: [Int] = []

for y in 1...N {
    for x in 1...M {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == &quot;#&quot; {
            visited[y][x] = true
            let count = bfs(y, x)
            temp.append(count)
        }
        
    }
    
}

print(temp.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 2667번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2667번(DFS)
let N = Int(readLine()!)!
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: false, count: N), count: N)
for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

var count: Int = 0

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func dfs(_ y: Int, _ x: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 1 {
            visited[ny][nx] = true
            count += 1
            dfs(ny, nx)
        }
    }
}


var temp: [Int] = []
for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == 1 {
            count = 1
            visited[y][x] = true
            dfs(y, x)
            temp.append(count)
        }
    }
    
}

temp.sort(by: &amp;lt;)

print(temp.count)

for num in temp {
    print(num)
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2667번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2667번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let N = Int(readLine()!)!
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: false, count: N), count: N)
for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

var count: Int = 0

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX)])
    count = 1
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 1 {
                visited[ny][nx] = true
                count += 1
                q.pushLast((ny, nx))
            }
        }
    }
    return count
}

var temp: [Int] = []

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == 1 {
            visited[y][x] = true
            let count = bfs(y, x)
            temp.append(count)
        }
        
    }
}

temp.sort(by: &amp;lt;)

print(temp.count)

for num in temp {
    print(num)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2583번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2583번(DFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N, K) = (input[0], input[1], input[2])
var board = Array(repeating: Array(repeating: 0, count: N), count: M)
var visited = Array(repeating: Array(repeating: false, count: N), count: M)

for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x1, y1, x2, y2) = (input[0], input[1], input[2], input[3])
    
    for y in y1..&amp;lt;y2 { // 직사각형에 속하는 부분을 다 1처리.
        for x in x1..&amp;lt;x2 {
            board[y][x] = 1
        }
    }
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; M) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
var count: Int = 0

func dfs(_ y: Int, _ x: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 0 {
            visited[ny][nx] = true
            count += 1
            dfs(ny, nx)
        }
    }
}

var temp: [Int] = []
for y in 0..&amp;lt;M {
    for x in 0..&amp;lt;N {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == 0 {
            visited[y][x] = true
            count = 1
            dfs(y, x)
            temp.append(count)
        }
    }
    
}

temp.sort(by: &amp;lt;)
print(temp.count)
print(temp.map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2583번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2583번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N, K) = (input[0], input[1], input[2])
var board = Array(repeating: Array(repeating: 0, count: N), count: M)
var visited = Array(repeating: Array(repeating: false, count: N), count: M)
for _ in 0..&amp;lt;K {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x1, y1, x2, y2) = (input[0], input[1], input[2], input[3])
    
    for y in y1..&amp;lt;y2 {
        for x in x1..&amp;lt;x2 {
            board[y][x] = 1
        }
    }
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; M) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
var count: Int = 0

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true
    count = 1
    let q = Dequeue([(startY, startX)])
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == 0 {
                visited[ny][nx] = true
                count += 1
                q.pushLast((ny, nx))
            }
        }
    }
    return count
}


var temp: [Int] = []
for y in 0..&amp;lt;M {
    for x in 0..&amp;lt;N {
        if !visited[y][x] &amp;amp;&amp;amp; board[y][x] == 0 {
            visited[y][x] = true
            let area = bfs(y, x)
            temp.append(area)
        }
        
    }
}

temp.sort(by: &amp;lt;)
print(temp.count)
print(temp.map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;백준 Swift 2468번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2468번(DFS)
let N = Int(readLine()!)!
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: false, count: N), count: N)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]


func dfs(_ y: Int, _ x: Int, _ standardHeight: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; (board[ny][nx] &amp;gt; standardHeight) {
            visited[ny][nx] = true
            dfs(ny, nx, standardHeight)
        }
    }
    
}



var area: [Int] = []
let maxHeight = board.flatMap{$0}.max()! // 기준점 - 제일 높은곳까지

for height in 0...maxHeight { // 비가 안 올 때부터 ~ 비가 최대로 올 때까지.
    visited = Array(repeating: Array(repeating: false, count: N), count: N) // 매 기준점마다, 방문기록 초기화.
    var count: Int = 0 // 영역 카운팅
    
    for y in 0..&amp;lt;N {
        for x in 0..&amp;lt;N {
            if !visited[y][x] &amp;amp;&amp;amp; board[y][x] &amp;gt; height {
                visited[y][x] = true
                count += 1
                dfs(y, x, height)
            }
        }
    }
    area.append(count)
}

print(area.max()!)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2468번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2468번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let N = Int(readLine()!)!
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: false, count: N), count: N)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    board.append(input)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}

func bfs(_ startY: Int, _ startX: Int, _ standardHeight: Int) {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX)])
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] &amp;gt; standardHeight {
                visited[ny][nx] = true
                q.pushLast((ny, nx))
            }
        }
    }
    
}

var area: [Int] = []
let maxHeight: Int = board.flatMap{$0}.max()!

for height in 0...maxHeight { // 비가 0부터, 최대높이까지 올 때.
    visited = Array(repeating: Array(repeating: false, count: N), count: N) // 방문기록 초기화.
    var count: Int = 0
    
    for y in 0..&amp;lt;N {
        for x in 0..&amp;lt;N {
            if !visited[y][x] &amp;amp;&amp;amp; board[y][x] &amp;gt; height { // 방문기록 없고, 안전할 시
                visited[y][x] = true
                count += 1
                bfs(y, x, height)
            }
            
        }
        
    }
    area.append(count)
}

print(area.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 7562번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 7562번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let T = Int(readLine()!)!

let dx = [1, 2, 2, 1, -1, -2, -2, -1]
let dy = [2, 1, -1, -2, -2, -1, 1, 2]


for _ in 0..&amp;lt;T {
    let l = Int(readLine()!)!
    var board = Array(repeating: Array(repeating: 0, count: l), count: l)
    var visited = Array(repeating: Array(repeating: -1, count: l), count: l)
    
    var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (stX, stY) = (input[0], input[1])
    input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (endX, endY) = (input[0], input[1])
    
    board[stY][stX] = 1
    board[endY][endX] = 2 // 임의로 2로 정함.
    
    
    func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
        return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; l) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; l)
    }
    
    func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
        return board[y][x] == 2 // board값이 (임의로 정한) 2일 때 탈출.
    }
    
    func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
        let q = Dequeue([(startY, startX)])
        visited[startY][startX] = 0
        
        while !q.isEmpty {
            let (y, x) = q.popFirst()
            
            if isEscape(y, x) { // 목표에 도달하면,
                return visited[y][x]
            }
            
            for k in 0..&amp;lt;8 {
                let ny = y + dy[k]
                let nx = x + dx[k]
                
                if isValidCoord(ny, nx) &amp;amp;&amp;amp; visited[ny][nx] == -1 &amp;amp;&amp;amp; board[ny][nx] != 1 { // 유효 범위고, 방문한적이 없고, 시작지점이 아니면,
                    visited[ny][nx] = visited[y][x] + 1
                    q.pushLast((ny, nx))
                }
            }
            
        }
        return -1 // 불가능 시 -1 return.
    }
    
    let answer = bfs(stY, stX)
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1697번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS 최단거리 - &amp;nbsp;+1, -1은 상관 없는데 2배조건 때문에 dx를 쓰지 못하고, 각각을 if조건 처리해줌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(+1,-1,*2 각각의 케이스를 모두 체크해야 하는 거기 때문에 else if로 하면 안됨!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버1&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1697번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var board = Array(repeating: 0, count: 100001) // 0부터 100000까지.
var visited = Array(repeating: -1, count: 100001) // 0부터 100000까지.

func isValidCoord(_ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= 100000)
}

func isEscape(_ x: Int) -&amp;gt; Bool { // 수빈이를 만나면 탈출.
    return (x == K)
}

func bfs(_ startX: Int) -&amp;gt; Int {
    let q = Dequeue([startX])
    visited[startX] = 0 // 첫 위치 0으로 초기화.
    
    while !q.isEmpty {
        let x = q.popFirst()
        
        if isEscape(x) { // 탈출 성공 시,
            return visited[x]
        }
        
        if isValidCoord(x + 1) &amp;amp;&amp;amp; board[x + 1] == 0 &amp;amp;&amp;amp; visited[x + 1] == -1 { // x+1한게 유효한 범위고, x+1이 갈 수 있는 곳이고, 미방문한 곳이면,
            visited[x+1] = visited[x] + 1
            q.pushLast(x+1)
        }
        if isValidCoord(x - 1) &amp;amp;&amp;amp; board[x - 1] == 0 &amp;amp;&amp;amp; visited[x - 1] == -1 { // x-1한게 유효한 범위고, x-1이 갈 수 있는 곳이고, 미방문한 곳이면,
            visited[x-1] = visited[x] + 1
            q.pushLast(x-1)
        }
        if isValidCoord(2 * x) &amp;amp;&amp;amp; board[2 * x] == 0 &amp;amp;&amp;amp; visited[2 * x] == -1 { // 2*x한게 유효한 범위고, 2*x이 갈 수 있는 곳이고, 미방문한 곳이면,
            visited[2*x] = visited[x] + 1
            q.pushLast(2*x)
        }
    }
    return -1
}

let answer = bfs(N)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1182번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 조합 or DFS&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버2&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1182번(DFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, S) = (input[0], input[1])
let numArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var visited = Array(repeating: false, count: N)
//var sum: Int = 0
var count: Int = 0

//func dfs(_ startIndex: Int, _ depth: Int) { // ver1
//
//    if sum == S &amp;amp;&amp;amp; depth &amp;gt; 0 { // 부분수열의 합이 S일 때,
//        count += 1
//    }
//
//    for k in startIndex..&amp;lt;N {
//        if !visited[k] {
//            visited[k] = true
//            sum += numArray[k]
//
//            dfs(k, depth + 1)
//
//            sum -= numArray[k]
//            visited[k] = false
//        }
//    }
//
//}

func dfs(_ startIndex: Int, _ depth: Int, _ sum: Int) { // ver2(개선)
    if sum == S &amp;amp;&amp;amp; depth &amp;gt; 0 { // 부분수열의 합이 S일 때,
        count += 1
    }
    
    for k in startIndex..&amp;lt;N {
        if !visited[k] {
            visited[k] = true
            dfs(k + 1, depth + 1, sum + numArray[k])
            visited[k] = false
        }
    }
    
    
}



dfs(0, 0, 0)
print(count)&lt;/code&gt;&lt;/pre&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;조합 - 속도 느림.&lt;/p&gt;
&lt;pre id=&quot;code_1649072844883&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1182번(조합)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, S) = (input[0], input[1])
let nums = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var count: Int = 0

func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var result: [[Int]] = []

    func combination(_ index: Int , _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            result.append(nowCombi)
            return
        }

        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    combination(0, [])
    return result
}


for k in 1...N {
    let numArray = combi(nums, k)

    for nums in numArray {
        if nums.reduce(0, +) == S {
            count += 1
        }
    }
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 2512번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : 파라메트릭 서치, Binary Search(이진 탐색)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 이진탐색문제를 처음 풀어봐서 그런지, 이 문제가 이진탐색을 활용해야 하는지조차 생각하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버3&lt;/p&gt;
&lt;pre id=&quot;code_1649142090208&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2512번(Binary Search)
let N = Int(readLine()!)!
let moneyArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let M = Int(readLine()!)!
var answerMax: Int = 0

var low = 0
var high = moneyArray.max()!
var middle = (low + high) / 2

func isPossible(_ middle: Int) -&amp;gt; Bool {
    var sum: Int = 0
    for money in moneyArray {
        sum += min(money, middle)
    }
    return sum &amp;lt;= M
}

while low &amp;lt;= high { // Parametric Search &amp;amp; Binary Search
    if isPossible(middle) { // 기준예산(middle)으로 충당이 가능하면,
        low = middle + 1 // 기준예산보다 위로 다시 체크.
        answerMax = middle
    }
    else { // 기준예산(middle)으로 충당이 불가능하면,
        high = middle - 1 // 기준예산보다 밑으로 다시 체크.
    }
    
    middle = (low + high) / 2
}

print(answerMax)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;더보기 - 개선전 코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개선전 코드&lt;/p&gt;
&lt;pre id=&quot;code_1649142107592&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2512번(Binary Search)
let N = Int(readLine()!)!
let moneyArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let M = Int(readLine()!)!
var answerMax: Int = 0

if moneyArray.reduce(0, +) &amp;lt;= M { // 모든 요청이 배정될 수 있는 경우,
    answerMax = moneyArray.max()!
}
else { // 모든 요청이 배정될 수 없는 경우,
    var start: Int = 0
    var end: Int = moneyArray.max()!
    var mid = (start + end) / 2
    
    while start &amp;lt;= end {
        var sum: Int = 0
        mid = (start + end) / 2
        for money in moneyArray {
            sum += money &amp;gt; mid ? mid : money // money가 기준(중간값)보다 크면 기준을 더하고, 기준보다 작거나 같으면 money를 더함.
        }
        if sum &amp;gt; M {
            end = mid - 1
        }
        else {
            start = mid + 1
        }
    }
    answerMax = end
}

print(answerMax) // 배정된 예산들 중 최댓값&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 10815번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 :  이분탐색(이진탐색)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 실버4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10815번(이진 탐색)
let N = Int(readLine()!)!
let sanggeunCards = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
let M = Int(readLine()!)!
let checkCards = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var answerArray = Array(repeating: &quot;0&quot;, count: M)

for (index, card) in checkCards.enumerated() {
    var lowIndex: Int = 0
    var highIndex: Int = N - 1
    
    while lowIndex &amp;lt;= highIndex { // 이진 탐색
        let middleIndex: Int = (lowIndex + highIndex) / 2
        
        if sanggeunCards[middleIndex] == card {
            answerArray[index] = &quot;1&quot;
            break
        }
        
        if sanggeunCards[middleIndex] &amp;lt; card {
            lowIndex = middleIndex + 1
        }
        else {
            highIndex = middleIndex - 1
        }
    }
    
}

print(answerArray.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift Silver</category>
      <category>백준 Swift</category>
      <category>백준 Swift PS</category>
      <category>백준 스위프트 문제풀이</category>
      <category>백준 실버</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 문제</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/199</guid>
      <comments>https://developer-p.tistory.com/199#entry199comment</comments>
      <pubDate>Thu, 24 Mar 2022 18:47:02 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 17298번, 2696번, 1715번, 5397번, 10026번, 6593번, 5427번, 3055번, 2206번, 14442번, 7576번, 5014번, 12851번, 16397번, 9019번, 1525번, 1039번, 2412번,</title>
      <link>https://developer-p.tistory.com/198</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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.22 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.25 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.27 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.28 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.29 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.30 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.31 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.03 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.04 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.04.13 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647936084811&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/edEX0m/hyNLFHBqL4/SvQ12tvSltev4OXKQMGHp0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/edEX0m/hyNLFHBqL4/SvQ12tvSltev4OXKQMGHp0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 17298번(시간초과)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17298번(시간초과)
let N = Int(readLine()!)!
var nge: [Int] = [] // 오큰수 NGE 배열.

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

for i in 0..&amp;lt;N {
    
    var flag: Bool = false
    for j in i+1..&amp;lt;N {
        if input[j] &amp;gt; input[i] { // 오큰수가 있으면,
            nge.append(input[j])
            flag = true
            break // 가장 왼쪽(처음)나오는 수만 있으면 됨.
        }
    }
    
    if !flag {
        nge.append(-1)
    }
    
}

for num in nge {
    print(num, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 17298번(stack 사용)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17298번(stack 사용)
let N = Int(readLine()!)!
var array = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var stack: [Int] = [] // 오큰수가 아닌 수의 index를 저장.

for i in 0..&amp;lt;N {
    
    while !stack.isEmpty &amp;amp;&amp;amp; (array[stack.last!] &amp;lt; array[i]) {
        array[stack.popLast()!] = array[i]
    }
    
    stack.append(i)
    
}

for index in stack { // 여전히 stack에 남아 있는 index는 오큰수 없음.
    array[index] = -1
}

//for num in array { // 이렇게 출력하면 시간초과
//    print(num, terminator: &quot; &quot;)
//}

print(array.map{String($0)}.joined(separator: &quot; &quot;))&lt;/code&gt;&lt;/pre&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;백준 Swift 2696번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2696번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let M = Int(readLine()!)!
    var numArray: [Int] = []
    
    if M &amp;lt;= 10 {
        numArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    }
    else { // 11이상이면,
        var line: Int = 0
        if M % 10 == 0 {
            line = M / 10
        }
        else {
            line = M / 10 + 1
        }
        for _ in 0..&amp;lt;line {
            numArray += readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
        }
    }
    
    var middleArray: [Int] = []
    var tempArray: [Int] = []
    for i in 0..&amp;lt;M {
        tempArray.append(numArray[i])
        if i % 2 == 0 { // 홀수번째 수일 때,
            tempArray.sort(by: &amp;lt;)
            middleArray.append(tempArray[(i+1)/2])
        }
    }
    
    print(middleArray.count)
    var answer = &quot;&quot;
    for i in 0..&amp;lt;middleArray.count {
        if (i != 0) &amp;amp;&amp;amp; (i % 10 == 0) { // 첫번째 값 아니고, 10개씩 출력.
            answer += &quot;\n&quot;
        }
        answer += String(middleArray[i]) + &quot; &quot;
    }
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1715번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소값 힙 사용 - 참고 : &lt;a href=&quot;https://developer-p.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/196&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1715번 : https://developer-p.tistory.com/196
struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: T) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}

let N = Int(readLine()!)!
var myMinHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!
    myMinHeap.insert(input)
}

var result: Int = 0
for _ in 0..&amp;lt;N-1 {
    let first = myMinHeap.pop()!
    let second = myMinHeap.pop()!
    let temp = first + second
    result += temp
    myMinHeap.insert(temp)
}

print(result)&lt;/code&gt;&lt;/pre&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;백준 Swift 5397번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5397번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.map{String($0)}
    var stack1: [String] = []
    var stack2: [String] = []
    
    for ch in input {
        if ch == &quot;&amp;lt;&quot; {
            if !stack1.isEmpty {
                stack2.append(stack1.popLast()!)
            }
        }
        else if ch == &quot;&amp;gt;&quot; {
            if !stack2.isEmpty {
                stack1.append(stack2.popLast()!)
            }
        }
        else if ch == &quot;-&quot; {
            if !stack1.isEmpty {
                stack1.removeLast()
            }
        }
        else { // 알파벳일 때,
            stack1.append(ch)
        }
    }
    
    let answer = stack1 + stack2.reversed()
    print(answer.joined(separator: &quot;&quot;))
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10026번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10026번(DFS)
let N = Int(readLine()!)!
var board: [[String]] = []
var colorBoard = Array(repeating: Array(repeating: &quot;&quot;, count: N), count: N)
var visited = Array(repeating: Array(repeating: false, count: N), count: N)

var count1: Int = 0
var count2: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{String($0)}
    board.append(input)
}

for i in 0..&amp;lt;N {
    for j in 0..&amp;lt;N {
        if board[i][j] == &quot;G&quot; || board[i][j] == &quot;R&quot; {
            colorBoard[i][j] = &quot;R&quot;
        }
        else {
            colorBoard[i][j] = &quot;B&quot;
        }
    }
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}
 
let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

// 적록색약이 아닌 사람
func dfs1(_ y: Int, _ x: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; (board[y][x] == board[ny][nx]) {
            visited[ny][nx] = true
            dfs1(ny, nx)
        }
    }
}

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] {
            visited[y][x] = true
            count1 += 1
            dfs1(y, x)
        }
    }
}

// 적록색약인 사람
visited = Array(repeating: Array(repeating: false, count: N), count: N) // 방문기록 초기화.

func dfs2(_ y: Int, _ x: Int) {
    for k in 0..&amp;lt;4 {
        let ny = y + dy[k]
        let nx = x + dx[k]
        if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; ( colorBoard[y][x] == colorBoard[ny][nx]) {
            visited[ny][nx] = true
            dfs2(ny, nx)
        }
    }
}

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] {
            visited[y][x] = true
            count2 += 1
            dfs2(y, x)
        }
    }
}

print(count1, count2)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 10026번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10026번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let N = Int(readLine()!)!
var board: [[String]] = []
var colorBoard = Array(repeating: Array(repeating: &quot;&quot;, count: N), count: N)
var visited = Array(repeating: Array(repeating: false, count: N), count: N)

var count1: Int = 0
var count2: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{String($0)}
    board.append(input)
}

for i in 0..&amp;lt;N {
    for j in 0..&amp;lt;N {
        if board[i][j] == &quot;G&quot; || board[i][j] == &quot;R&quot; {
            colorBoard[i][j] = &quot;R&quot;
        }
        else {
            colorBoard[i][j] = &quot;B&quot;
        }
    }
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; N)
}
 
let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

// 적록색약이 아닌 사람
func bfs1(_ startY: Int, _ startX: Int) {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX)])
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; (board[y][x] == board[ny][nx]) {
                visited[ny][nx] = true
                q.pushLast((ny, nx))
            }
        }
        
    }

}


for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] {
//            visited[y][x] = true
            count1 += 1
            bfs1(y, x)
        }
    }
}

// 적록색약인 사람
visited = Array(repeating: Array(repeating: false, count: N), count: N) // 방문기록 초기화.

func bfs2(_ startY: Int, _ startX: Int) {
    visited[startY][startX] = true
    let q = Dequeue([(startY, startX)])
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; (colorBoard[y][x] == colorBoard[ny][nx]) {
                visited[ny][nx] = true
                q.pushLast((ny, nx))
            }
        }
        
    }
    
}

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;N {
        if !visited[y][x] {
            visited[y][x] = true
            count2 += 1
            bfs2(y, x)
        }
    }
}

print(count1, count2)&lt;/code&gt;&lt;/pre&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;백준 Swift 6593번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 6593번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

while true {
    
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (L, R, C) = (input[0], input[1], input[2])
    if (L == 0) &amp;amp;&amp;amp; (R == 0) &amp;amp;&amp;amp; (C == 0) {
        break
    }
    
    var board = Array(repeating: Array(repeating: Array(repeating: &quot;&quot;, count: C), count: R), count: L)
    var visited = Array(repeating: Array(repeating: Array(repeating: false, count: C), count: R), count: L)

    for z in 0..&amp;lt;L {
        for y in 0..&amp;lt;R {
            let input = readLine()!.map{String($0)}
            for x in 0..&amp;lt;C {
                board[z][y][x] = input[x]
            }
        }
        readLine()
    }

    func isValidCoord(_ z: Int, _ y: Int, _ x: Int) -&amp;gt; Bool {
        return (0 &amp;lt;= z &amp;amp;&amp;amp; z &amp;lt; L) &amp;amp;&amp;amp; (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; R) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; C)
    }

    let dz = [0, 0, 0, 0, 1, -1]
    let dy = [0, 1, 0, -1, 0 ,0]
    let dx = [1, 0, -1, 0, 0, 0]
    
    func bfs(_ startZ: Int, _ startY: Int, _ startX: Int) -&amp;gt; Int {
        visited[startZ][startY][startX] = true
        let q = Dequeue([(startZ, startY, startX, 0)])
        
        while !q.isEmpty {
            let (z, y, x, d) = q.popFirst()
            
            for k in 0..&amp;lt;6 {
                let nz = z + dz[k]
                let ny = y + dy[k]
                let nx = x + dx[k]
                let nd = d + 1 // 이동 횟수(시간)
                if isValidCoord(nz, ny, nx) &amp;amp;&amp;amp; !visited[nz][ny][nx] &amp;amp;&amp;amp; board[nz][ny][nx] == &quot;.&quot; { // 통로면,
                    visited[nz][ny][nx] = true
                    q.pushLast((nz, ny, nx, nd))
                }
                else if isValidCoord(nz, ny, nx) &amp;amp;&amp;amp; !visited[nz][ny][nx] &amp;amp;&amp;amp; board[nz][ny][nx] == &quot;E&quot; { // 탈출통로면,
                    visited[nz][ny][nx] = true
                    return nd // 탈출 시간 return.
                }
            }
        }
         
        return -1 // 탈출 불가 시, -1 return. (Trapped!)
        
    }
    
    var time: Int = 0
outLoop: for z in 0..&amp;lt;L {
        for y in 0..&amp;lt;R {
            for x in 0..&amp;lt;C {
                if !visited[z][y][x] &amp;amp;&amp;amp; board[z][y][x] == &quot;S&quot; {
                    visited[z][y][x] = true
                    time = bfs(z, y, x)
                    break outLoop
                }
            }
        }
    }
    
    if time == -1 {
        print(&quot;Trapped!&quot;)
    }
    else {
        print(&quot;Escaped in \(time) minute(s).&quot;)
    }
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5427번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5427번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T] = []
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let N = Int(readLine()!)!

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (w, h) = (input[0], input[1])
    var board: [[String]] = []
    var visited = Array(repeating: Array(repeating: -1, count: w), count: h)
    var fireVisited = Array(repeating: Array(repeating: -1, count: w), count: h)
    
    for _ in 0..&amp;lt;h {
        let input = readLine()!.map{String($0)}
        board.append(input)
    }
    
    func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
        return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; h) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; w)
    }
    
    let dy = [0, 1, 0, -1]
    let dx = [1, 0, -1 ,0]
    
    let fireQ: Dequeue&amp;lt;(Int, Int)&amp;gt; = Dequeue([])
    
    func fireBfs() {
        
        while !fireQ.isEmpty {
            let (y, x) = fireQ.popFirst()
            
            for k in 0..&amp;lt;4 {
                let ny = y + dy[k]
                let nx = x + dx[k]
                if isValidCoord(ny, nx) &amp;amp;&amp;amp; (fireVisited[ny][nx] == -1) &amp;amp;&amp;amp; board[ny][nx] != &quot;#&quot; { // 범위 안이고, 불이 방문한 적 없고, 벽이 아니면,
                    fireVisited[ny][nx] = fireVisited[y][x] + 1
                    fireQ.pushLast((ny, nx))
                }
            }
        }
        
    }
    
    
    func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
        let userQ = Dequeue([(startY, startX)])
//        visited[startY][startX] = 0 // 사람 시작하는 곳 0으로 초기화.
        
        while !userQ.isEmpty {
            let (y, x) = userQ.popFirst()
            
            for k in 0..&amp;lt;4 {
                let ny = y + dy[k]
                let nx = x + dx[k]
                
                if (ny &amp;lt; 0 || ny &amp;gt;= h) || (nx &amp;lt; 0 || nx &amp;gt;= w) { // 탈출 성공 시,
                    return (visited[y][x] + 1)
                }
                
                if (visited[ny][nx] == -1) &amp;amp;&amp;amp; (board[ny][nx] != &quot;#&quot;) { // 사람이 방문한 적 없고, 벽이 아닐 때,
                    if (fireVisited[ny][nx] == -1) || (fireVisited[ny][nx] &amp;gt; visited[y][x] + 1) { // 불이 방문한 적 없거나, 불이 옮겨붙을 때 이동하면,
                        visited[ny][nx] = visited[y][x] + 1
                        userQ.pushLast((ny, nx))
                    }
                }
                
            }
        }
        return -100
    }
    
    var userStartY: Int = 0
    var userStartX: Int = 0
    for y in 0..&amp;lt;h {
        for x in 0..&amp;lt;w {
            if board[y][x] == &quot;*&quot; { // 불은 여러곳일 수 있음.
                fireVisited[y][x] = 0 // 불 붙은 곳 0으로 초기화.
                fireQ.pushLast((y, x))
            }
            else if board[y][x] == &quot;@&quot; { // 사람일 경우,
                visited[y][x] = 0 // 사람 시작하는 곳 0으로 초기화.
                (userStartY, userStartX) = (y, x)
            }
        }
    }
    
    fireBfs() // 불 먼저 붙임.
    let answer = bfs(userStartY, userStartX) // 그 다음, 사람 움직이면서, 괜찮은지 체크.
    
    if answer == -100 {
        print(&quot;IMPOSSIBLE&quot;)
    }
    else {
        print(answer)
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 5427번(BFS - index사용)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5427번(BFS - Index 사용)
let N = Int(readLine()!)!

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (w, h) = (input[0], input[1])
    var board: [[String]] = []
    var visited = Array(repeating: Array(repeating: false, count: w), count: h)
    var fireVisited = Array(repeating: Array(repeating: false, count: w), count: h)
    
    for _ in 0..&amp;lt;h {
        let input = readLine()!.map{String($0)}
        board.append(input)
    }
    
    func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
        return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; h) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; w)
    }
    
    func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
        return (y == 0 || y == h - 1) || (x == 0 || x == w - 1)
    }
    
    let dy = [0, 1, 0, -1]
    let dx = [1, 0, -1, 0]
    var fireQ: [(Int, Int, Int)] = []
    var userQ: [(Int, Int, Int)] = []
    var isSuccessEscape: Bool = false
    
    func bfs() -&amp;gt; Int {
        var index: Int = 0
        var fireIndex: Int = 0
        var userIndex: Int = 0
        
        while index &amp;lt; userQ.count &amp;amp;&amp;amp; !isSuccessEscape {
            index += 1
            
            let fireCount = fireQ.count // fireQ의 카운트를 저장해서 호출해야 함. 그냥 while문에 fireQ.count를 쓰면, 계속 append되면서 오류 발생함.
            while fireIndex &amp;lt; fireCount &amp;amp;&amp;amp; !isSuccessEscape {
                let (y, x, d) = fireQ[fireIndex]
                
                for k in 0..&amp;lt;4 {
                    let ny = y + dy[k]
                    let nx = x + dx[k]
                    let nd = d + 1
                    
                    if isValidCoord(ny, nx) &amp;amp;&amp;amp; !fireVisited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] != &quot;#&quot; {
                        fireVisited[ny][nx] = true
                        fireQ.append((ny, nx, nd))
                    }
                }
                fireIndex += 1
            }
            
            let userCount = userQ.count
            while userIndex &amp;lt; userCount &amp;amp;&amp;amp; !isSuccessEscape {
                let (y, x, d) = userQ[userIndex]
                
                if isEscape(y, x) { // 탈출 성공 시,
                    isSuccessEscape = true // 이 부분 없어도 됨.
                    return (d + 1)
                }
                
                for k in 0..&amp;lt;4 {
                    let ny = y + dy[k]
                    let nx = x + dx[k]
                    let nd = d + 1
                    
                    if isValidCoord(ny, nx) &amp;amp;&amp;amp; !fireVisited[ny][nx] &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; board[ny][nx] == &quot;.&quot; {
                        visited[ny][nx] = true
                        userQ.append((ny, nx, nd))
                    }
                }
                userIndex += 1
            }
            
        }
        
        return -1 // 탈출 실패 시,
        
    }
    
    for y in 0..&amp;lt;h {
        for x in 0..&amp;lt;w {
            if board[y][x] == &quot;*&quot; { // 불은 여러개일 수 있음.
                fireQ.append((y, x, 0))
            }
            else if board[y][x] == &quot;@&quot; { // 사람일 때,
                userQ.append((y, x, 0))
            }
        }
    }
    
    let answer = bfs()
    
    answer != -1 ? print(answer) : print(&quot;IMPOSSIBLE&quot;)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3055번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3055번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (R, C) = (input[0], input[1])
var board: [[String]] = []
var visited = Array(repeating: Array(repeating: -1, count: C), count: R)
var waterVisited = Array(repeating: Array(repeating: -1, count: C), count: R)

for _ in 0..&amp;lt;R {
    let input = readLine()!.map{String($0)}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; R) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; C)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
let waterQ: Dequeue&amp;lt;(Int, Int)&amp;gt; = Dequeue([])

func waterBfs() {
    while !waterQ.isEmpty {
        let (y, x) = waterQ.popFirst()
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; (waterVisited[ny][nx] == -1) &amp;amp;&amp;amp; board[ny][nx] == &quot;.&quot; { // 유효한 좌표 범위고, 물이 방문한 적이 없고, 통로면,
                waterVisited[ny][nx] = waterVisited[y][x] + 1
                waterQ.pushLast((ny, nx))
            }
        }
    }
}

func userBfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    let userQ = Dequeue([(startY, startX)])
    
    while !userQ.isEmpty {
        let (y, x) = userQ.popFirst()
        
        if board[y][x] == &quot;D&quot; { // 탈출 성공 시,
            return visited[y][x]
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; (visited[ny][nx] == -1) &amp;amp;&amp;amp; board[ny][nx] != &quot;X&quot; { // 유효한 좌표 범위고, 사람이 방문한 적이 없고, 돌이 아닐 때,
                if (waterVisited[ny][nx] == -1) || waterVisited[ny][nx] &amp;gt; visited[y][x] + 1 { // (물과 독립된 길이라) 물이 방문한 적이 없거나 or (물이 방문하기 전에) 고슴도치가 먼저 방문하면(고슴도치가 가고 물이 차오르는건 상관X),
                    visited[ny][nx] = visited[y][x] + 1
                    userQ.pushLast((ny, nx))
                }
            }
        }
    }
    return -1 // 탈출 실패
}


var userStartY: Int = 0
var userStartX: Int = 0
for y in 0..&amp;lt;R {
    for x in 0..&amp;lt;C {
        if board[y][x] == &quot;*&quot; { // 물은 여러곳일 수 있음.
            waterVisited[y][x] = 0
            waterQ.pushLast((y, x))
        }
        else if board[y][x] == &quot;S&quot; { // 고슴도치면,
            visited[y][x] = 0
            (userStartY, userStartX) = (y, x)
        }
    }
}

waterBfs()
let answer = userBfs(userStartY, userStartX)

if answer == -1 {
    print(&quot;KAKTUS&quot;)
}
else {
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2206번(BFS)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;방문여부를 이렇게 기록해야 하는 이유 - &lt;a style=&quot;color: #666666;&quot; href=&quot;https://www.acmicpc.net/board/view/67446&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/67446&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;방문배열은 '모든 경우'를 나타낼 수 있어야 한다.&lt;br /&gt;이 문제에서의 모든 경우는&lt;br /&gt;'해당 위치에 벽을 부쉈던 상태로 이미 왔었거나, 해당 위치에 아직 벽을 부수지 않은 상태로 이미 왔었다.' 임.&lt;br /&gt;이를 표현하기 위해 3차원 배열로 나타냄.&lt;br /&gt;(위 링크의 설명글에서 인용)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;풀이 참고 - &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;http://t.ly/QiwU&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://t.ly/QiwU&lt;/a&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2206번(BFS)
// 참고) 방문여부를 이렇게 기록해야 하는 이유 - https://www.acmicpc.net/board/view/67446
// 참고) 풀이 참고 - https://velog.io/@aurora_97/%EB%B0%B1%EC%A4%80-2206%EB%B2%88-%EB%B2%BD-%EB%B6%80%EC%88%98%EA%B3%A0-%EC%9D%B4%EB%8F%99%ED%95%98%EA%B8%B0-Swift
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: [0, 0], count: M), count: N) // [0, 0]에서 - 왼쪽은 벽미사용 방문거리, 오른쪽은 벽사용 방문거리

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; M)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (y == N - 1) &amp;amp;&amp;amp; (x == M - 1)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    let q = Dequeue([(startY, startX, 0)]) // 0이면 벽 미사용, 1이면 벽 사용
    visited[startY][startX][0] = 1 // 시작하는 칸도 포함.
    
    while !q.isEmpty {
        let (y, x, wall) = q.popFirst()
        
        if isEscape(y, x) {
            return (visited[y][x][wall])
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) {
                if board[ny][nx] == 1 &amp;amp;&amp;amp; wall == 0 { // 벽이 있고, 벽 미사용이면,
                    visited[ny][nx][1] = visited[y][x][0] + 1 // 벽 사용한 방문거리에 저장.
                    q.pushLast((ny, nx, 1))
                }
                else if board[ny][nx] == 0 &amp;amp;&amp;amp; visited[ny][nx][wall] == 0 { // 길이고, (벽을 쓰고 or 안쓰고) 미방문일 때,
                    visited[ny][nx][wall] = visited[y][x][wall] + 1
                    q.pushLast((ny, nx, wall))
                }
            }
        }
    }
    return -1
}


let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 14442번(BFS) - 18%에서 시간초과&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14442번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, T) = (input[0], input[1], input[2]) // K -&amp;gt; T로 임의 변경.
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: Array(repeating: 0, count: T + 1), count: M), count: N)

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; M)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (y == N - 1) &amp;amp;&amp;amp; (x == M - 1)
}


let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    let q = Dequeue([(startY, startX, 0)])
    visited[startY][startX][0] = 1 // 시작하는 칸 포함.
    
    while !q.isEmpty {
        let (y, x, wall) = q.popFirst()
        
        if isEscape(y, x) {
            return visited[y][x][wall]
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) {
                if (board[ny][nx] == 1) &amp;amp;&amp;amp; (wall &amp;lt; T) &amp;amp;&amp;amp; (visited[ny][nx][wall+1] == 0) { // 벽이 있고, 벽뚫는사용회수가 T보다 적고, (벽+1)이 방문한 적이 없으면.
                    visited[ny][nx][wall + 1] = visited[y][x][wall] + 1 // wall +1 증가.
                    q.pushLast((ny, nx, wall + 1)) // 벽 사용회수 +1 증가.
                }
                else if board[ny][nx] == 0 &amp;amp;&amp;amp; visited[ny][nx][wall] == 0 { // 벽이 없고, (벽을 사용했던 or 안했던 그에 맞게) 방문한 적이 없으면,
                    visited[ny][nx][wall] = visited[y][x][wall] + 1
                    q.pushLast((ny, nx, wall))
                }
            }
        }
    }
    return -1
}

let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;index 사용코드&lt;/b&gt; (똑같이 18%에서 시간초과.)&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1648550148412&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14442번(BFS) - index 사용.
//class Dequeue&amp;lt;T&amp;gt; {
//    var enQueue: [T]
//    var deQueue: [T] = []
//
//    var count: Int {
//        return enQueue.count + deQueue.count
//    }
//
//    var isEmpty: Bool {
//        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
//    }
//
//    init(_ queue: [T]) {
//        enQueue = queue
//    }
//
//    func pushLast(_ element: T) {
//        enQueue.append(element)
//    }
//
//    func pushFirst(_ element: T) {
//        deQueue.append(element)
//    }
//
//    func popLast() -&amp;gt; T {
//        if enQueue.isEmpty {
//            enQueue = deQueue.reversed()
//            deQueue.removeAll()
//        }
//        return enQueue.popLast()!
//    }
//
//    func popFirst() -&amp;gt; T {
//        if deQueue.isEmpty {
//            deQueue = enQueue.reversed()
//            enQueue.removeAll()
//        }
//        return deQueue.popLast()!
//    }
//}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, T) = (input[0], input[1], input[2]) // K -&amp;gt; T로 임의 변경.
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: Array(repeating: 0, count: T + 1), count: M), count: N)

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; M)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (y == N - 1) &amp;amp;&amp;amp; (x == M - 1)
}


let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
//    let q = Dequeue([(startY, startX, 0)])
    var q = [(startY, startX, 0)]
    visited[startY][startX][0] = 1 // 시작하는 칸 포함.
    var index: Int = 0
    
    while index &amp;lt; q.count {
//        let (y, x, wall) = q.popFirst()
        let (y, x, wall) = q[index]
        
        if isEscape(y, x) {
            return visited[y][x][wall]
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) {
                if (board[ny][nx] == 1) &amp;amp;&amp;amp; (wall &amp;lt; T) &amp;amp;&amp;amp; (visited[ny][nx][wall+1] == 0) { // 벽이 있고, 벽뚫는사용회수가 T보다 적고, (벽+1)이 방문한 적이 없으면.
                    visited[ny][nx][wall + 1] = visited[y][x][wall] + 1 // wall +1 증가.
//                    q.pushLast((ny, nx, wall + 1)) // 벽 사용회수 +1 증가.
                    q.append((ny, nx, wall + 1)) // 벽 사용회수 +1 증가.
                }
                else if board[ny][nx] == 0 &amp;amp;&amp;amp; visited[ny][nx][wall] == 0 { // 벽이 없고, (벽을 사용했던 or 안했던 그에 맞게) 방문한 적이 없으면,
                    visited[ny][nx][wall] = visited[y][x][wall] + 1
//                    q.pushLast((ny, nx, wall))
                    q.append((ny, nx, wall))
                }
            }
        }
        index += 1
    }
    return -1
}

let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;백준 Swift 7576번(BFS)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS 최단거리 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 7576번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (M, N) = (input[0], input[1])
var board: [[Int]] = []
var visited = Array(repeating: Array(repeating: -1, count: M), count: N)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    board.append(input)
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; N) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; M)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1 ,0]
let q: Dequeue&amp;lt;(Int, Int)&amp;gt; = Dequeue([])

func bfs() {
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; (visited[ny][nx] == -1) &amp;amp;&amp;amp; board[ny][nx] == 0 { // 유효범위고, 방문한 적 없고, 익지 않은 토마토가 근처이면,
                visited[ny][nx] = visited[y][x] + 1
                q.pushLast((ny, nx))
            }
        }
    }
    
}

for y in 0..&amp;lt;N {
    for x in 0..&amp;lt;M {
        if board[y][x] == 1 { // 익은 토마토 발견 시,
            visited[y][x] = 0
            q.pushLast((y, x))
        }
        else if board[y][x] == -1 { // 토마토가 없는 칸 발견 시, 접근 자체가 불가능.
            visited[y][x] = -2 // 나중에 전체 토마토가 익었는지 체크를 위해, 미방문과 구분을 위해 -2로 둠.
        }
    }
}

bfs()

if visited.flatMap({$0}).contains(-1) { // 미방문한 토마토가 있으면,
    print(-1)
}
else { // 모든 토마토가 익었다면,
    print(visited.flatMap{$0}.max()!) // 최대값이 모두를 익게 하는 최소 일수임.
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5014번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS 최단거리&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5014번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (F, S, G, U, D) = (input[0], input[1], input[2], input[3], input[4])
var board = Array(repeating: Array(repeating: 0, count: 1), count: F + 1) // (0층 제외) 1층부터 F층까지 생성.
var visited = Array(repeating: Array(repeating: -1, count: 1), count: F + 1) // (0층 제외) 1층부터 F층까지 생성.
board[0][0] = -1 // 0층은 제외.

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (1 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= F) &amp;amp;&amp;amp; (x == 0)
}

func isEscape(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (y == G) &amp;amp;&amp;amp; (x == 0) // 목표(G)층에 도달하면 탈출.
}

let dy = [U, (D * -1)] // 위나 아래로만 이동 가능.

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    let q = Dequeue([(startY, startX)])
    visited[startY][startX] = 0 // 시작부분 0으로 시작.
    
    while !q.isEmpty {
        let (y, x) = q.popFirst()
        
        if isEscape(y, x) {
            return visited[y][x]
        }
        
        for k in 0..&amp;lt;2 {
            let ny = y + dy[k]
            let nx = x // x는 계속 0
            
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; board[ny][nx] == 0 &amp;amp;&amp;amp; visited[ny][nx] == -1 { // 유효 범위고, (0층제외한) 1층부터 F층이고, 미방문이면,
                visited[ny][nx] = visited[y][x] + 1
                q.pushLast((ny, nx))
            }
        }
    }
    return -1
}

let answer = bfs(S, 0) // S층에서 시작.
answer == -1 ? print(&quot;use the stairs&quot;) : print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 12851번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS - pop을 할 때 방문처리를 해 줘야, 같은 방문횟수level의 방문을 체크할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드5&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 12851번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])
var board = Array(repeating: 0, count: 100001) // 0부터 100000까지.
var visited = Array(repeating: false, count: 100001)

func isValidCoord(_ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= 100000)
}

func isEscape(_ x: Int) -&amp;gt; Bool { // 수빈이를 만나면 탈출.
    return (x == K)
}

var fastTimeArray: [Int] = []
func bfs(_ startX: Int) {
    let q = Dequeue([(startX, 0)])
    visited[startX] = true // 첫 시작 true로 초기화.
    
    while !q.isEmpty {
        let (x, d) = q.popFirst()
        visited[x] = true // 숨바꼭질1과 다르게, 큐에서 pop할 때 방문처리해줘야 함.
        
        if isEscape(x) { // 탈출 가능인데,
            if fastTimeArray.isEmpty { // 처음이면,
                fastTimeArray.append(d)
            }
            else { // 처음이 아닌데,
                if d == fastTimeArray[0] { // 가장 빠른 시간과 같다면 방법 1개 증가.
                    fastTimeArray.append(d)
                }
            }
        }
        
        if isValidCoord(x + 1) &amp;amp;&amp;amp; board[x + 1] == 0 &amp;amp;&amp;amp; visited[x + 1] == false { // (x+1) - 유효 범위고, 방문할 수 있는 곳이고, 방문한 적 없으면,
            q.pushLast((x+1, d+1))
        }
        if isValidCoord(x - 1) &amp;amp;&amp;amp; board[x - 1] == 0 &amp;amp;&amp;amp; visited[x - 1] == false { // (x-1) - 유효 범위고, 방문할 수 있는 곳이고, 방문한 적 없으면,
            q.pushLast((x-1, d+1))
        }
        if isValidCoord(2 * x) &amp;amp;&amp;amp; board[2 * x] == 0 &amp;amp;&amp;amp; visited[2 * x] == false { // (2*x) - 유효 범위고, 방문할 수 있는 곳이고, 방문한 적 없으면,
            q.pushLast((2*x, d+1))
        }
    }
    
}

bfs(N)
print(fastTimeArray.first!)
print(fastTimeArray.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 16397번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS - 최단거리 : board는 필요 없었고, d(버튼 누른 횟수)가 T보다 작다는 조건이 추가로 필요했음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16397번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, T, G) = (input[0], input[1], input[2])
var visited = Array(repeating: false, count: 100000) // 0~99999 미방문 체크.

func isValidCoord(_ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= 99999)
}

func isEscape(_ x: Int) -&amp;gt; Bool {
    return (x == G)
}

func bfs(_ startX: Int) -&amp;gt; Int {
    let q = Dequeue([(startX, 0)])
    visited[startX] = true
    
    while !q.isEmpty {
        let (x, d) = q.popFirst()
        
        if isEscape(x) {
            return d
        }
        
        if isValidCoord(x + 1) &amp;amp;&amp;amp; !visited[x + 1] &amp;amp;&amp;amp; (d &amp;lt; T) { // 유효 범위고, 방문한 적 없고, 버튼 누른 회수가 T회 미만이면,
            visited[x + 1] = true
            q.pushLast((x + 1, d + 1))
        }
        
        if isValidCoord(2 * x) { // 2배한 숫자가 유효 범위고,
            var temp = String(2 * x).map{String($0)}
            for i in 0..&amp;lt;temp.count {
                if temp[i] != &quot;0&quot; {
                    temp[i] = String(Int(temp[i])! - 1)
                    break
                }
            }
            let pressB = Int(temp.reduce(&quot;&quot;, +))! // B를 누른 결과 숫자.
            if !visited[pressB] &amp;amp;&amp;amp; (d &amp;lt; T) { // B를 누른 결과의 숫자에 방문한 적 없고, 버튼 누른 회수가 T회 미만이면,
                visited[pressB] = true
                q.pushLast((pressB, d + 1))
            }
        }
    }
    return -1
}

let answer = bfs(N)
answer == -1 ? print(&quot;ANG&quot;) : print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 9019번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;문제 유형&lt;/b&gt; : BFS인데, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;시간초과&lt;/b&gt;&lt;/span&gt;로 애를 먹었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJQfOg/btryb1yytkA/Z5KPNz9in61Si01zuonqA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJQfOg/btryb1yytkA/Z5KPNz9in61Si01zuonqA0/img.png&quot; data-alt=&quot;백준 Swift 9019번 - 시간초과 및 해결.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJQfOg/btryb1yytkA/Z5KPNz9in61Si01zuonqA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJQfOg%2Fbtryb1yytkA%2FZ5KPNz9in61Si01zuonqA0%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;230&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 9019번 - 시간초과 및 해결.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;런타임 에러&lt;/b&gt; : 처음에 (n == 0)이 아니라 (n-1 == 0)으로 잘못했었는데, 이 부분만 문제인 줄 알았다. (이 외에, 시간초과를 유발하는 많은 이유가 있었다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;예상 시간 초과 원인 1.&lt;/b&gt; : 직접 만든 Dequeue 클래스를 써서, 기존의 배열(q)보단 빠를 것으로 예상되나, &lt;b&gt;(덱의) q.popFirst() 혹은 q.removeFirst()&lt;/b&gt;에서 많은 시간이 쓰이는 것 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;예상 시간 초과 원인 2.&lt;/b&gt; : 원인1을 해결하기 위해, &lt;b&gt;index를 도입&lt;/b&gt;해 데이터를 접근하는 식으로 변경했으나 여전히 타임 오버.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;예상 시간 초과 원인 3.&lt;/b&gt; : String d를 둬서 각각의 결과(문자)를 이어 붙이는 과정에서, 많은 질문글을 찾아보니 String이 시간초과를 유발한다고 함. (물론 Swift로 된 질문은 없었...다...ㅠㅠ)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;[여담으로, 원인3은 사실 할 말이 많다. 타 블로그에 올라와 있는 C언어나 파이썬으로 된 코드들은 원인3을 해결하지 않아도, 기존에 했던 방식처럼 (d + &quot;S&quot;) 이런식으로 해도 문제 없이 통과 되는데, Swift의 상대적으로 느린 속도는 문제다... 추가시간을 달라! 슬프군..]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 링크 : &lt;a href=&quot;https://www.acmicpc.net/board/view/54644&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/board/view/54644&lt;/a&gt;&amp;nbsp;| &lt;a href=&quot;https://www.acmicpc.net/source/40983157&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/source/40983157&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드4&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9019번(BFS) - 시간초과 개선
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (A, B) = (input[0], input[1])
    var visited = Array(repeating: false, count: 10000)
    
    func bfs(_ startX: Int) -&amp;gt; String {
        var q: [(Int, Int)] = [(startX, 0)] // (Int, String)으로 하면 시간초과.
        visited[startX] = true
        var index: Int = 0
        var answer: String = &quot;&quot;
        
        while index &amp;lt; q.count {
            let (x, d) = q[index] // d는 원래는 String으로 이어붙이는 식으로 했었는데, 그렇게 하면 시간초과나서 Int로 계산해주고, 마지막에 이어붙이는 식으로 함.
            
            if x == B { // B에 도달하면,
                for ch in String(d) {
                    switch ch {
                    case &quot;1&quot;:
                        answer += &quot;D&quot;
                    case &quot;2&quot;:
                        answer += &quot;S&quot;
                    case &quot;3&quot;:
                        answer += &quot;L&quot;
                    case &quot;4&quot;:
                        answer += &quot;R&quot;
                    default:
                        break
                    }
                }
                return answer // 명령어(answer) 반환.
            }
            
            if x*2 &amp;gt; 9999 { // D일 때, - 9999보다 큰 경우.
                let temp = x*2 % 10000
                if !visited[temp] {
                    visited[temp] = true
                    q.append((temp, d * 10 + 1))
                }
            }
            else { // D일 때, - 9999이하인 경우.
                if !visited[x*2] {
                    visited[x*2] = true
                    q.append((x*2, d * 10 + 1))
                }
            }
            
            if x == 0 { // S일 때, - n이 0인 경우. ( x-1이 0일때가 아니라, x가 0일 때임.)
                let temp = 9999
                if !visited[temp] {
                    visited[temp] = true
                    q.append((temp, d * 10 + 2))
                }
            }
            else { // S일 때, - n이 0이 아닌 경우.
                if !visited[x-1] {
                    visited[x-1] = true
                    q.append((x-1, d * 10 + 2))
                }
            }
            
            // L 부분.
            let lFront = x % 1000
            let lBack = x / 1000
            let lNum = (lFront * 10) + lBack // L을 사용시 나오는 숫자.
            if !visited[lNum] {
                visited[lNum] = true
                q.append((lNum, d * 10 + 3))
            }
            
            // R 부분.
            let rFront = x % 10
            let rBack = x / 10
            let rNum = (rFront * 1000) + rBack // R을 사용시 나오는 숫자.
            if !visited[rNum] {
                visited[rNum] = true
                q.append((rNum, d * 10 + 4))
            }
            index += 1
        }
        return &quot;no&quot; // 여기 오는 일은 없음.
    }
    
    let answer = bfs(A)
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1525번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- BFS의 처음보는 활용이었다. 그 동안은 배열을 이용해 bfs를 풀어왔는데, board배열의 값을 매번 바꿔줘야 하는 점에서 풀이를 생각하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;상하좌우 모두 방문하면서, 그 때 마다 board를 바꿔주면, 그 다음부턴 망가져버리기 때문이다. ( 매 방문마다의 배열을 저장할 수도 없는 노릇이니...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결국엔 다른 사람의 풀이를 참고해서 풀게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;board를 2차원배열이 아닌 &lt;u&gt;&lt;b&gt;[String]으로 처리해서 시간을 단축&lt;/b&gt;&lt;/u&gt;시키고, &lt;u&gt;&lt;b&gt;Set으로 방문처리를 해서 시간단축&lt;/b&gt;&lt;/u&gt;을 하는게 중요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;방문처리를 만약 배열로 했다면 contains체크시 O(N)이 걸린다. 하지만 &lt;span&gt;Set의 .contains는 시간복잡도가 O(1)이기 때문에,&lt;span&gt; 큰 시간단축이 됐다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;span&gt;(&lt;a href=&quot;https://stackoverflow.com/questions/46385749/swift-3-array-contains-vs-set-contains&quot;&gt;https://stackoverflow.com/questions/46385749/swift-3-array-contains-vs-set-contains&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;|&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50240554/swift-set-contains-complexity&quot;&gt;https://stackoverflow.com/questions/50240554/swift-set-contains-complexity&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(다른 언어의 풀이들에선 String으로 하던데, Swift는 String을 다루긴 힘들어서 배열String으로 처리했다. &lt;a href=&quot;https://zeunny.tistory.com/37&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;그냥 String은 인덱스 접근이 뭔가 어렵다.&lt;/a&gt; 쉽게 하는 방법 아시는 분 있으면 댓글달아주세요...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드2&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #666666;&quot; href=&quot;https://2hs-rti.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://2hs-rti.tistory.com/78&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1525번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

let target = &quot;123456780&quot;
var board: [String] = []
var visited: Set&amp;lt;[String]&amp;gt; = []

for _ in 0..&amp;lt;3 {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
    board.append(input[0])
    board.append(input[1])
    board.append(input[2])
}

var startY: Int = 0
var startX: Int = 0

for (index, ch) in board.enumerated() {
    if ch == &quot;0&quot; {
        startY = index / 3
        startX = index % 3
        break
    }
}

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt; 3) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt; 3)
}

func isEscape(_ arr: [String]) -&amp;gt; Bool {
    return arr.reduce(&quot;&quot;, +) == target
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    let q = Dequeue([(startY, startX, 0, board)])
    visited.insert(board)
    
    while !q.isEmpty {
        var (y, x, d, strArray) = q.popFirst()
//        print(&quot;\(y), \(x), \(d), \(visited)&quot;)
        
        if isEscape(strArray) {
            return d
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            let nd = d + 1
            
            if isValidCoord(ny, nx) { // 유효한 범위이면서,
                let index = y * 3 + x
                let nextIndex = ny * 3 + nx
                let temp = strArray[index] // swap.
                strArray[index] = strArray[nextIndex]
                strArray[nextIndex] = temp
                
                if !visited.contains(strArray) { // 방문한 적 없으면,
                    visited.insert(strArray)
                    q.pushLast((ny, nx, nd, strArray))
                }
                
                strArray[nextIndex] = strArray[index] // strArray를 망가뜨리면 안되기 때문에 다시 재swap.
                strArray[index] = temp
            }
        }
    }
    return -1
}


let answer = bfs(startY, startX)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1039번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;핵심 : 전체 숫자들의 방문체크가 아닌, 각 순차적으로 증가하는 K(depth)일 때의 숫자들의 방문체크를 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음엔 방문체크를 While문 안에 Set&amp;lt;[String]&amp;gt; 으로 했었다. 전역변수로 방문체크를 하면 안되고, 그 depth에 해당하는 숫자들의 방문체크를 해줘야 했기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;내가 짠 코드는 근데 그렇게 하면 K-1번째꺼 까지의 방문체크는 되는데, &lt;b&gt;K번째일 때의 방문체크가 안되는 것이다!  &lt;/b&gt; 이거때문에 계속 고민하고... 근데 결국 못함. (메모리 초과) &lt;span style=&quot;color: #9d9d9d;&quot;&gt;[이 방법 참고 글 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://gusdnr69.tistory.com/266&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gusdnr69.tistory.com/266&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결국 이 방법으로는 해결하지 못하고, 2차원배열로 방문체크를 하는 방법으로 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고로 index를 활용한 Ver1이 조금 더 빠르다. (근데 난 큐의 isEmpty를 쓰는게 더 편하다.. Ver2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2304&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IZzV4/btrypjzFje0/T4Go83Mu8xJJJrqkuRddAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IZzV4/btrypjzFje0/T4Go83Mu8xJJJrqkuRddAk/img.png&quot; data-alt=&quot;백준 Swift 1039번&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IZzV4/btrypjzFje0/T4Go83Mu8xJJJrqkuRddAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIZzV4%2FbtrypjzFje0%2FT4Go83Mu8xJJJrqkuRddAk%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;140&quot; data-origin-width=&quot;2304&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1039번&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;참고 링크 : &lt;a style=&quot;color: #666666;&quot; href=&quot;https://vapor3965.tistory.com/36&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vapor3965.tistory.com/36&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Ver1.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1039번(BFS)
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (N, K) = (input[0].map{String($0)}, Int(input[1])!)
var visited = Array(repeating: Array(repeating: false, count: 1000001), count: 11) // 각 depth일 때의 방문체크가 필요함.
//var maxAnswer: Int = 0
var answerArray: [Int] = [] // depth가 K번째일 때의 정답숫자들 모음.

func bfs(_ startX: [String]) {
    var q: [([String], Int)] = [(startX, 0)]
    var index: Int = 0
    
    while index &amp;lt; q.count {
        let (x, d) = q[index]
        
        index += 1 // 그 depth에 해당하는 값들을 비교해야 하기 때문에, index증가부분이 밑이 아니라 여기있어야 함.
        
        if d == K { // K번째일 때,
            answerArray.append(Int(x.reduce(&quot;&quot;, +))!)
//            maxAnswer = max(maxAnswer, Int(x.reduce(&quot;&quot;, +))!)
            continue // d가 K번째일 때꺼까지만 필요하고, 더 이상 진행하면 X.
        }
        
        for i in 0..&amp;lt;N.count {
            for j in i+1..&amp;lt;N.count {
                var swapTemp: [String] = x // x의 스왑을 위한 임시변수.
                swapTemp.swapAt(i, j)
                let swapNum = Int(swapTemp.reduce(&quot;&quot;, +))!
                if swapTemp[0] != &quot;0&quot; &amp;amp;&amp;amp; !visited[d][swapNum] {
                    visited[d][swapNum] = true
                    q.append((swapTemp, d + 1))
                }
                
            }
        }
    }
}

bfs(N)

answerArray.isEmpty ? print(&quot;-1&quot;) : print(answerArray.max()!)&lt;/code&gt;&lt;/pre&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;&lt;b&gt;Ver 2.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 늘 쓰던 큐의 isEmpty를 쓰는 버전.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(index 쓰는 Ver1이 조금 더 빠르다.)&lt;/p&gt;
&lt;pre id=&quot;code_1649059410232&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1039번(BFS) - index 말고 큐 isEmpty쓰는 버전.
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (N, K) = (input[0].map{String($0)}, Int(input[1])!)
var visited = Array(repeating: Array(repeating: false, count: 1000001), count: 11) // 각 depth일 때의 방문체크가 필요함.
//var maxAnswer: Int = 0
var answerArray: [Int] = [] // depth가 K번째일 때의 정답숫자들 모음.

func bfs(_ startX: [String]) {
    var q: [([String], Int)] = [(startX, 0)]
//    var index: Int = 0
    
    while !q.isEmpty {
        let (x, d) = q.removeFirst()
        
//        index += 1 // 그 depth에 해당하는 값들을 비교해야 하기 때문에, index증가부분이 밑이 아니라 여기있어야 함.
        
        if d == K { // K번째일 때,
            answerArray.append(Int(x.reduce(&quot;&quot;, +))!)
//            maxAnswer = max(maxAnswer, Int(x.reduce(&quot;&quot;, +))!)
            continue // d가 K번째일 때꺼까지만 필요하고, 더 이상 진행하면 X.
        }
        
        for i in 0..&amp;lt;N.count {
            for j in i+1..&amp;lt;N.count {
                var swapTemp: [String] = x // x의 스왑을 위한 임시변수.
                swapTemp.swapAt(i, j)
                let swapNum = Int(swapTemp.reduce(&quot;&quot;, +))!
                if swapTemp[0] != &quot;0&quot; &amp;amp;&amp;amp; !visited[d][swapNum] {
                    visited[d][swapNum] = true
                    q.append((swapTemp, d + 1))
                }
                
            }
        }
    }
}

bfs(N)

answerArray.isEmpty ? print(&quot;-1&quot;) : print(answerArray.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 2412번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;문제 유형 : BFS 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 처음 문제를 보고 BFS문제라는건 파악했다. 최소로 하면서 정상에 올라야 한다는 건, &lt;b&gt;최단거리&lt;/b&gt;라는 뜻이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;처음 풀이는 시간초과가 났다. &lt;b&gt;steps배열&lt;/b&gt;을 매번 처음부터 돌면서, visited배열을 체크해서 그런 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&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;2328&quot; data-origin-height=&quot;334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdPngX/btrzhqR7L0n/vc1VWGeNZ8HevzSaMaa1h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdPngX/btrzhqR7L0n/vc1VWGeNZ8HevzSaMaa1h0/img.png&quot; data-alt=&quot;백준 Swift 2412번 - BFS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdPngX/btrzhqR7L0n/vc1VWGeNZ8HevzSaMaa1h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdPngX%2FbtrzhqR7L0n%2Fvc1VWGeNZ8HevzSaMaa1h0%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;400&quot; height=&quot;57&quot; data-origin-width=&quot;2328&quot; data-origin-height=&quot;334&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 2412번 - BFS&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;다른 블로그의 풀이를 참고해보니, &lt;b&gt;steps&lt;/b&gt;를 &lt;u&gt;&lt;b&gt;set&lt;/b&gt;&lt;/u&gt;로 하면, (홈들의 위치를 받아놓고,) 방문 시 지워주기만 하면 &lt;b&gt;방문체크를 따로 하지 않아도 됐다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;또한 abs(~~)계산을 매번 하게 짜지 않고, &lt;b&gt;dy와 dx로 접근하는 방법&lt;/b&gt;을 &lt;b&gt;생각하지 못한 게 아쉬웠다. &lt;/b&gt;(비슷한 문제가 나왔을 때 다음부턴 이 방법을 생각하자!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;난이도 : 골드3&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 링크 :&amp;nbsp;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://t.ly/cf8A&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://t.ly/cf8A&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2412번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        self.enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, T) = (input[0], input[1])
//var steps: [(y: Int, x: Int)] = []
var steps: Set&amp;lt;[Int]&amp;gt; = []

var maxTemp: Int = -1
for _ in 0..&amp;lt;n {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (y, x) = (input[1], input[0])
    steps.insert([y, x])
    maxTemp = max(maxTemp, x)
}
//print(steps)


func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= T) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= maxTemp)
}

func isEscape(_ y: Int) -&amp;gt; Bool {
    return (y == T) // 정상 도달
}

let dy = [-2, -1, 0, 1, 2]
let dx = [-2, -1, 0, 1, 2]
func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
//    var q: [(Int, Int, Int)] = [(startY, startX, 0)]
    let q = Dequeue([(startY, startX, 0)])
//    visited[startY][startX] = true

    while !q.isEmpty {
        let (y, x, d) = q.popFirst()

        if isEscape(y) {
            return d
        }
        
        for k in 0..&amp;lt;5 { // -2 &amp;lt;= y &amp;lt;= 2
            for v in 0..&amp;lt;5 { // -2 &amp;lt;= x &amp;lt;= 2
                let ny = y + dy[k]
                let nx = x + dx[v]
                let nd = d + 1
                if isValidCoord(ny, nx) &amp;amp;&amp;amp; steps.contains([ny, nx]) { // 유효 범위고, 그 자리에 홈이 있으면,
                    steps.remove([ny, nx]) // 홈 방문 했으니, 지움. (=얘가 방문체크를 대체함.)
                    q.pushLast((ny, nx, nd))
                }
            }
        }
    }
    return -1
}

let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;시간 초과 코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 초과 코드&lt;/p&gt;
&lt;pre id=&quot;code_1649834317369&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2412번(BFS)
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        self.enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (n, T) = (input[0], input[1])
var steps: [(x: Int, y: Int)] = []

var maxTemp: Int = -1
for _ in 0..&amp;lt;n {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x, y) = (input[0], input[1])
    steps.append((x, y))
    maxTemp = max(maxTemp, x)
}
steps.sort(by: &amp;lt;)
//print(steps)

var visited = Array(repeating: Array(repeating: false, count: maxTemp + 1), count: T + 1)

func isValidCoord(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= T) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= maxTemp)
}

func isEscape(_ y: Int) -&amp;gt; Bool {
    return (y == T) // 정상 도달
}

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
//    var q: [(Int, Int, Int)] = [(startY, startX, 0)]
    let q = Dequeue([(startY, startX, 0)])
    visited[startY][startX] = true
    
    while !q.isEmpty {
        let (y, x, d) = q.popFirst()
        
        if isEscape(y) {
            return d
        }
        
        for k in 0..&amp;lt;steps.count {
            let ny = steps[k].y
            let nx = steps[k].x
            let nd = d + 1
            if isValidCoord(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; (abs(ny - y) &amp;lt;= 2) &amp;amp;&amp;amp; (abs(nx - x) &amp;lt;= 2) {
                visited[ny][nx] = true
//                q.append((ny, nx, nd))
                q.pushLast((ny, nx, nd))
            }
        }
    }
    return -1
}

let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&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;</description>
      <category>Swift 5 | 코테/백준 | 골드 - 문제풀이</category>
      <category>swift algorithm</category>
      <category>Swift Problem Solving</category>
      <category>Swift PS</category>
      <category>Swift 백준 Gold</category>
      <category>백준 Gold</category>
      <category>백준 Swift</category>
      <category>백준 Swift 문제풀이</category>
      <category>백준 스위프트 문제</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/198</guid>
      <comments>https://developer-p.tistory.com/198#entry198comment</comments>
      <pubDate>Tue, 22 Mar 2022 17:57:43 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 1302번, 11047번, 1449번, 11724번, 2178번, 7785번, 1021번, 1158번, 2346번, 1406번, 1935번, 1874번, 1764번, 10799번, 2304번, 2841번, 3986번, 1966번</title>
      <link>https://developer-p.tistory.com/197</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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.15 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.16 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.17 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.19 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.20 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.21 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.22 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;모든 백준 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647343709277&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/coettD/hyNHZFGV1d/doKOh4K6lSS6KyOTQPnIm0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/coettD/hyNHZFGV1d/doKOh4K6lSS6KyOTQPnIm0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1302번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1302번
let N = Int(readLine()!)!
var books: [String: Int] = [:]

for _ in 0..&amp;lt;N {
    let input = readLine()!

    if books.keys.contains(input) { // 이미 팔린적 있으면
        books[input]! += 1
    }
    else { // 팔린적 없으면, 추가
        books[input] = 1
    }
}

var bestSeller: [String] = []
for book in books {
    if book.value == books.values.max()! { // 가장 많이 팔린 책이면,
        bestSeller.append(book.key)
    }
}

bestSeller.sort(by: &amp;lt;)
print(bestSeller.first!)&lt;/code&gt;&lt;/pre&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;백준 Swift 11047번 - 그리디(Greedy)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11047번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (N, K) = (input[0], input[1])

var coins: [Int] = []
for _ in 0..&amp;lt;N {
    coins.append(Int(readLine()!)!)
}

coins.reverse()

var count: Int = 0
for coin in coins {
    count += K / coin
    K = K % coin
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1449번 - 그리디(Greedy)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1449번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, L) = (input[0], input[1])
var pipe = Array(repeating: false, count: 1001) // 1부터 1000까지.(index 0은 생략)

let leak: [Int] = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

for index in leak {
    pipe[index] = true
}

var answer: Int = 0
var index: Int = 0
while index &amp;lt;= 1000 {
    if pipe[index] == true { // 새는 곳이면,
        index += L // 테이프의 길이 만큼 움직여 줌.
        answer += 1 // 테이프 1개 추가.
    }
    else { // 새는 곳이 아니면,
        index += 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 11724번(DFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11724번(DFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var adj = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)
var check = Array(repeating: false, count: N + 1) // 방문체크
var answer: Int = 0

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (u, v) = (input[0], input[1])
    adj[u][v] = true
    adj[v][u] = true
}

func dfs(_ index: Int) {
    for next in 1...N {
        if (index != next) &amp;amp;&amp;amp; (adj[index][next] == true) &amp;amp;&amp;amp; (check[next] == false) { // 자기자신X, 연결되어 있고, 방문한 적 없으면,
            check[next] = true
            dfs(next)
        }
    }
    
}

for i in 1...N {
    if check[i] == false {
        check[i] = true
        answer += 1
        dfs(i)
    }
    
}

print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 11724번(BFS)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11724번(BFS)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var adj = Array(repeating: Array(repeating: false, count: N + 1), count: N + 1)
var check = Array(repeating: false, count: N + 1) // 방문 체크
var answer: Int = 0

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (u, v) = (input[0], input[1])
    adj[u][v] = true
    adj[v][u] = true
}

class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
}

func bfs(_ startIndex: Int) {
    var q = Dequeue([startIndex])
    
    while !q.isEmpty {
        let now = q.popFirst()
        for next in 1...N {
            if (adj[now][next] == true) &amp;amp;&amp;amp; (check[next] == false) { // 연결되어 있고, 방문한 적 없으면,
                check[next] = true
                q.pushLast(next)
            }
        }
    }
    
}

for i in 1...N {
    if check[i] == false {
        check[i] = true
        answer += 1
        bfs(i)
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2178번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2178번
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var adj: [[Int]] = []

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{Int(String($0))!}
    adj.append(input)
}

let dy = [0, 1, 0, -1]
let dx = [1, 0, -1, 0]
var visited = Array(repeating: Array(repeating: false, count: M), count: N)

func isValid(_ y: Int, _ x: Int) -&amp;gt; Bool {
    return (0 &amp;lt;= y &amp;amp;&amp;amp; y &amp;lt;= N - 1) &amp;amp;&amp;amp; (0 &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= M - 1)
}

func bfs(_ startY: Int, _ startX: Int) -&amp;gt; Int {
    visited[startY][startX] = true // 시작위치 방문 포함.
    let q = Dequeue([(startY, startX, 1)])
    
    while !q.isEmpty {
        let (y, x, d) = q.popFirst()
        
        if y == N-1 &amp;amp;&amp;amp; x == M-1 { // 끝에 도달했으면,
            return d
        }
        
        for k in 0..&amp;lt;4 {
            let ny = y + dy[k]
            let nx = x + dx[k]
            let nd = d + 1
            if isValid(ny, nx) &amp;amp;&amp;amp; !visited[ny][nx] &amp;amp;&amp;amp; adj[ny][nx] == 1 { // 정상 좌표고, 방문한 적 없고, 길이 갈 수 있으면(1이면),
                visited[ny][nx] = true
                q.pushLast((ny, nx, nd))
            }
        }
    }
    
    return 1
    
}

let answer = bfs(0, 0)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 7785번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 7785번
let N = Int(readLine()!)!
var names: Set&amp;lt;String&amp;gt; = []

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
    let (name, state) = (input[0], input[1])
    
    if state == &quot;enter&quot; { // enter
        names.insert(name)
    }
    else if state == &quot;leave&quot; { // leave
        if names.contains(name) {
            names.remove(name)
        }
    }
    
}

let temp = names.sorted(by: &amp;gt;)

for name in temp {
    print(name)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1021번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1021번
class Dequeue&amp;lt;T: Comparable&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
    func firstIndex(_ num: T) -&amp;gt; Int {
        let newQue = deQueue.reversed() + enQueue
        if let i = newQue.firstIndex(where: {$0 == num}) {
            return i
        }
        return 0
    }
}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
let position = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var myQ = Dequeue([0])
for i in 1...N {
    myQ.pushLast(i)
}
myQ.popFirst() // 0 제거

var answer: Int = 0
for pos in position {
    let index = myQ.firstIndex(pos) // myQ에서의 그 숫자의 index
    let count = myQ.count
    
    // index기준으로 전체에서 - 왼쪽으로 가는게 짧은지, 오른쪽으로 가는게 짧은지 비교해서 분기.
    
    if index &amp;lt;= (count / 2) { // 2번 케이스 - (절반 기준으로) 왼쪽으로 가는게 짧으면,
        for _ in 0..&amp;lt;index {
            myQ.pushLast(myQ.popFirst()) // 맨 앞을 빼서 맨 뒤에 붙임.
            answer += 1
        }
        myQ.popFirst() // 1번 케이스
    }
    else { // 3번 케이스 - (절반 기준으로) 오른쪽으로 가는게 짧으면,
        for _ in 0..&amp;lt;count-index {
            myQ.pushFirst(myQ.popLast()) // 맨 뒤를 빼서 맨 앞에 붙임.
            answer += 1
        }
        myQ.popFirst()
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1158번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dequeue을 사용하면 되려 시간초과.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 배열 혹은 Arrayslice&amp;lt;Int&amp;gt;(1...N)을 사용해야 함.&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1158번
//class Dequeue&amp;lt;T&amp;gt; {
//    var enQueue: [T]
//    var deQueue: [T] = []
//
//    var count: Int {
//        return enQueue.count + deQueue.count
//    }
//
//    var isEmpty: Bool {
//        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
//    }
//
//    init(_ queue: [T]) {
//        enQueue = queue
//    }
//
//    func pushLast(_ element: T) {
//        enQueue.append(element)
//    }
//
//    func pushFirst(_ element: T) {
//        deQueue.append(element)
//    }
//
//    func popLast() -&amp;gt; T {
//        if enQueue.isEmpty {
//            enQueue = deQueue.reversed()
//            deQueue.removeAll()
//        }
//        return enQueue.popLast()!
//    }
//
//    func popFirst() -&amp;gt; T {
//        if deQueue.isEmpty {
//            deQueue = enQueue.reversed()
//            enQueue.removeAll()
//        }
//        return deQueue.popLast()!
//    }
//}

let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, K) = (input[0], input[1])

var result: [Int] = []
//var myQ = Dequeue(Array(1...N)) // https://stackoverflow.com/questions/34571043/how-to-create-an-array-with-incremented-values-in-swift
//var myQ = ArraySlice&amp;lt;Int&amp;gt;(1...N)
var myQ = Array(1...N)
var index: Int = K - 1 // 빼낼 인덱스.

for _ in 0..&amp;lt;N {

    if index &amp;gt;= myQ.count {
        index %= myQ.count // modulo
    }
    
    let pop = myQ.remove(at: index)
    result.append(pop)
    
    index += K - 1 // 빼낼 인덱스 옮김.
}

print(&quot;&amp;lt;&quot; + result.map{String($0)}.joined(separator: &quot;, &quot;) + &quot;&amp;gt;&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 2346번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2346번
class Dequeue&amp;lt;T&amp;gt; {
    var enQueue: [T]
    var deQueue: [T] = []
    
    var count: Int {
        return enQueue.count + deQueue.count
    }
    
    var isEmpty: Bool {
        return enQueue.isEmpty &amp;amp;&amp;amp; deQueue.isEmpty
    }
    
    init(_ queue: [T]) {
        enQueue = queue
    }
    
    func pushLast(_ element: T) {
        enQueue.append(element)
    }
    
    func pushFirst(_ element: T) {
        deQueue.append(element)
    }
    
    func popLast() -&amp;gt; T {
        if enQueue.isEmpty {
            enQueue = deQueue.reversed()
            deQueue.removeAll()
        }
        return enQueue.popLast()!
    }
    
    func popFirst() -&amp;gt; T {
        if deQueue.isEmpty {
            deQueue = enQueue.reversed()
            enQueue.removeAll()
        }
        return deQueue.popLast()!
    }
    
}

let N = Int(readLine()!)!
let balloons = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var indexBallons: [(index: Int, value: Int)] = []
for i in 0..&amp;lt;N {
    indexBallons.append((i+1, balloons[i]))
}
var myQ = Dequeue(indexBallons)
var answer: [Int] = []

var index: Int = 0

var pop = myQ.popFirst() // 1번 풍선 값.
answer.append(pop.index)

for _ in 1..&amp;lt;N {
    
    if pop.value &amp;gt; 0 { // 풍선이 양수면, 오른쪽으로 이동.
        for _ in 0..&amp;lt;pop.value-1 {
            myQ.pushLast(myQ.popFirst())
        }
        pop = myQ.popFirst()
        answer.append(pop.index)
    }
    else { // 풍선이 음수면, 왼쪽으로 이동.
        for _ in 0..&amp;lt;abs(pop.value)-1 {
            myQ.pushFirst(myQ.popLast())
        }
        pop = myQ.popLast()
        answer.append(pop.index)
    }
    
}

for num in answer {
    print(num, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1406번&lt;/h4&gt;
&lt;pre id=&quot;code_1647871313518&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1406번(stack사용)
var stackL = readLine()!.map{String($0)}
var stackR: [String] = []

let M = Int(readLine()!)!

for _ in 0..&amp;lt;M {
    let input = readLine()!
    // .split이 시간을 잡아 먹음.
//    var (command, char) = (&quot;&quot;, &quot;&quot;)
//    if input.contains(&quot; &quot;) { // 문자 입력(P)이면,
//        let temp = input.split(separator: &quot; &quot;).map{String($0)}
//        (command, char) = (temp[0], temp[1])
//    }
//    else { // L, D, B 이면,
//        command = input
//    }
    
    switch input {
    case &quot;L&quot;:
        if !stackL.isEmpty {
            stackR.append(stackL.popLast()!)
        }
    case &quot;D&quot;:
        if !stackR.isEmpty {
            stackL.append(stackR.popLast()!)
        }
    case &quot;B&quot;:
        if !stackL.isEmpty {
            stackL.removeLast()
        }
    default: // P일 때,
        stackL.append(String(input.last!))
    }
    
}

let answer = stackL + stackR.reversed()
print(answer.joined(separator: &quot;&quot;))&lt;/code&gt;&lt;/pre&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;아래 더보기 - 시간초과 코드&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1406번(시간초과)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1406번(시간초과)
var input = readLine()!.map{String($0)}
var answer = input
let M = Int(readLine()!)!

var index: Int = input.count

for _ in 0..&amp;lt;M {
    let input = readLine()!
    var (command, char) = (&quot;&quot;, &quot;&quot;)
    if input.contains(&quot; &quot;) { // 문자 입력(P)이면,
        let temp = input.split(separator: &quot; &quot;).map{String($0)}
        (command, char) = (temp[0], temp[1])
    }
    else { // L, D, B 이면,
        command = input
    }
    
//    print(&quot;beforeIndex: \(index)&quot;)
    switch command {
    case &quot;P&quot;:
        answer.insert(char, at: index)
        index += 1
    case &quot;L&quot;:
        if index != 0 { // 커서가 문장의 맨 앞이 아니면,
            index -= 1
        }
    case &quot;D&quot;:
        if index != answer.count { // 커서가 문장의 맨 뒤가 아니면,
            index += 1
        }
    case &quot;B&quot;:
        if index != 0 { // 커서가 문장의 맨 앞이 아니면,
            answer.remove(at: index-1)
            index -= 1
        }
    default:
        print(&quot;default는 없음.&quot;)
    }
//    print(&quot;afterIndex: \(index)&quot;)
    
}

print(answer.joined(separator: &quot;&quot;))&lt;/code&gt;&lt;/pre&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;/div&gt;
&lt;/div&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;백준 Swift 1935번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1935번
import Foundation
let N = Int(readLine()!)!
let input = readLine()!.map{String($0)}

var nums: [Double] = Array(repeating: 0.0, count: 26)
for i in 0..&amp;lt;N {
    let num = Double(readLine()!)!
    nums[i] = num
}

var stack: [Double] = []
var index: Int = 0
for i in 0..&amp;lt;input.count {
    
    if Int(UnicodeScalar(input[i])!.value) &amp;gt;= 65 &amp;amp;&amp;amp; Int(UnicodeScalar(input[i])!.value) &amp;lt;= 97 { // 알파벳을 만났을 때,
        stack.append(nums[Int(UnicodeScalar(input[i])!.value) - 65])
    }
    else { // 기호를 만났을 때,
        let back: Double = stack.popLast()!
        let front: Double = stack.popLast()!
        
        switch input[i] {
        case &quot;+&quot;:
            stack.append(front + back)
        case &quot;-&quot;:
            stack.append(front - back)
        case &quot;*&quot;:
            stack.append(front * back)
        case &quot;/&quot;:
            stack.append(front / back)
        default:
            print(&quot;default는 없음.&quot;)
        }
    }
    
}

let answer = stack.first!
print(String(format: &quot;%.2f&quot;, answer))&lt;/code&gt;&lt;/pre&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;백준 Swift 1874번(풀이1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1874번(풀이1)
let N = Int(readLine()!)!

var stack: [Int] = []
var op: [String] = []
var num: Int = 1
for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!
    
    while num &amp;lt;= input {
        stack.append(num)
        op.append(&quot;+&quot;)
        num += 1
    }
    
    if stack.last! == input {
        stack.removeLast()
        op.append(&quot;-&quot;)
    }
    else {
        op.append(&quot;NO&quot;)
        break
    }
}

if op.contains(&quot;NO&quot;) {
    print(&quot;NO&quot;)
}
else {
    for o in op { // operator 출력.
        print(o)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1874번(풀이2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1874번(풀이2)
let N = Int(readLine()!)!
var numArray: [Int] = []
for _ in 0..&amp;lt;N {
    numArray.append(Int(readLine()!)!)
}

var stack: [Int] = []
var operatorArray: [String] = []
var index: Int = 0

for i in 1...N {
    stack.append(i)
    operatorArray.append(&quot;+&quot;)
    
    while !stack.isEmpty &amp;amp;&amp;amp; stack.last! == numArray[index] { // stack이 비어있지 않고, 스택의 마지막이 pop을 해야하는 정수면,
        stack.removeLast()
        index += 1
        operatorArray.append(&quot;-&quot;)
    }
    
}

if !stack.isEmpty {
    print(&quot;NO&quot;)
}
else {
    for op in operatorArray {
        print(op)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1764번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1764번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var setA: Set&amp;lt;String&amp;gt; = []
var setB: Set&amp;lt;String&amp;gt; = []

for _ in 0..&amp;lt;N {
    setA.insert(readLine()!)
}
for _ in 0..&amp;lt;M {
    setB.insert(readLine()!)
}

var interSet: Set&amp;lt;String&amp;gt; = setA.intersection(setB) // setA와 setB 교집합.
let answer: [String] = Array(interSet).sorted(by: &amp;lt;)

print(answer.count)
for name in answer {
    print(name)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10799번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10799번
let input = readLine()!.map{String($0)}

var index: Int = 0
var stack: [String] = []
var answer: Int = 0

while index &amp;lt; input.count {
    
    if input[index] == &quot;(&quot; &amp;amp;&amp;amp; input[index+1] == &quot;)&quot; { // 레이저일 때,
        answer += stack.count
        index += 2
    }
    else if input[index] == &quot;(&quot; { // 막대 시작일 때,
        stack.append(&quot;(&quot;)
        index += 1
    }
    else { // 막대 끝일 때,
        stack.removeLast()
        index += 1
        answer += 1 // 막대 값 하나 증가.
    }
    
    
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2304번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2304번
let N = Int(readLine()!)!
var info: [(coord: Int, height: Int)] = []
var array = Array(repeating: 0, count: 1001)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    info.append((input[0], input[1]))
    array[input[0]] = input[1] // 좌표별 값 대입.
}

info.sort(by: &amp;lt;)
var maxCoord: Int = 0
var maxHeight: Int = 0
for data in info {
    if data.height &amp;gt; maxHeight {
        maxHeight = data.height // 가장 큰 기둥 높이 저장.
        maxCoord = data.coord // 가장 큰 기둥의 위치 저장.
    }
}

var answer: Int = 0
var temp: Int = 0
for i in 0..&amp;lt;maxCoord+1 { // 왼쪽 -&amp;gt; 오른쪽(큰기둥)
    if array[i] &amp;gt; temp { // 더 큰 기둥을 만나면,
        temp = array[i]
    }
    answer += temp
}
temp = 0
for i in stride(from: 1000, to: maxCoord, by: -1) { // 오른쪽 -&amp;gt; 왼쪽(큰기둥)
    if array[i] &amp;gt; temp { // 더 큰 기둥을 만나면,
        temp = array[i]
    }
    answer += temp
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2841번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2841번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, P) = (input[0], input[1])
var lineStack = Array(repeating: Array(repeating: 0, count: 0), count: 7)
var answer: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (line, fret) = (input[0], input[1])
    
    if lineStack[line].isEmpty { // 그 줄의 스택이 비었으면,
        lineStack[line].append(fret)
        answer += 1
    }
    else {
        if lineStack[line].last! &amp;lt; fret { // 새로운 프렛이 더 크면,
            lineStack[line].append(fret)
            answer += 1
        }
        else { // 새로운 프렛이 작은게 들어오면,
            while !lineStack[line].isEmpty &amp;amp;&amp;amp; lineStack[line].last! &amp;gt; fret { // 새로운 프렛이 더 커질 때까지,
                lineStack[line].removeLast()
                answer += 1
            }
            if lineStack[line].isEmpty || lineStack[line].last! != fret { // 스택이 비었거나, 프렛이 마지막과 다를때만 넣음.(같을땐 패스.)
                lineStack[line].append(fret) // 새로운 프렛 스택에 추가.
                answer += 1
            }
            
        }
    }
//    print(&quot;\(i)번째, 값 : \(answer)&quot;)
}


print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 3986번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3986번
let N = Int(readLine()!)!
var count: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{String($0)}
    var stack: [String] = []
    
    if input.count % 2 == 1 { // 홀수면, 더 볼 필요도 없이 패스.
        continue
    }
    
    for ch in input {
        if stack.isEmpty { // 스택이 비어있으면,
            stack.append(ch)
        }
        else {
            if stack.last! == ch {
                stack.removeLast()
            }
            else {
                stack.append(ch)
            }
        }
    }
    
    if stack.isEmpty {
        count += 1
    }
    
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1966번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1966번
let testCase = Int(readLine()!)!
for _ in 0..&amp;lt;testCase {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (N, M) = (input[0], input[1])
    var importance = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    var myQ: [(index: Int, priority: Int)] = []
    for i in 0..&amp;lt;N {
        myQ.append((i, importance[i]))
    }
    importance.sort(by: &amp;lt;)

    var printArray: [Int] = []
    
    while !myQ.isEmpty {
        if myQ.first!.priority == importance.max()! { // 중요도가 제일 높은 문서이면,
            printArray.append(myQ.removeFirst().index) // 인쇄.
            importance.removeLast() // 중요도 제일 높은 숫자 삭제.
        }
        else {
            myQ.append(myQ.removeFirst())
        }
    }

    let answer = printArray.firstIndex(of: M)! + 1
    print(answer)
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 실버</category>
      <category>Swift 실버 문제</category>
      <category>백준 Swift</category>
      <category>백준 Swift 실버 문제</category>
      <category>백준 스위프트</category>
      <category>백준 스위프트 문제풀이</category>
      <category>스위프트 백준 실버 문제풀이</category>
      <category>스위프트 실버</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/197</guid>
      <comments>https://developer-p.tistory.com/197#entry197comment</comments>
      <pubDate>Tue, 15 Mar 2022 20:32:40 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 최소 힙, 최대 힙, 절댓값 힙 (백준 Swift 1927번, 11279번, 11286번)</title>
      <link>https://developer-p.tistory.com/196</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;백준 Swift 힙(Heap) 세트 문제입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;절댓값 힙 문제&lt;/b&gt;&lt;/span&gt;는 총 3가지의 아이디어로 풀 수 있었습니다. (&lt;a href=&quot;https://www.acmicpc.net/problem/11286&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 11286번&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;(idea 1 : 단순 값 비교 / idea 2 : 튜플 사용 / idea 3 : 최소힙과 최대힙을 동시 사용)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;최소 힙 | 백준 Swift 1927번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;관련 글 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://developer-p.tistory.com/190&quot;&gt;https://developer-p.tistory.com/190&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/nz7CX/btrvVLF1cbb/pf1zZ0QFdKRgX11KZxEhRK/%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%20%ED%81%90%20%EB%B0%98%EB%A1%80.txt?attach=1&amp;amp;knm=tfile.txt&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;우선순위 큐 반례.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;200&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZKfLD/btrwIhqGk1u/vbkSmSrdYsGRl4k1AkYnBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZKfLD%2FbtrwIhqGk1u%2FvbkSmSrdYsGRl4k1AkYnBK%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;400&quot; height=&quot;169&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;백준 1927번 MinHeap 반례 추가.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1927번(최소 힙)
import Foundation

struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: T) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}

let N = Int(readLine()!)!
var myMinHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!

    if input == 0 {
        let answer = myMinHeap.pop()
        answer == nil ? print(&quot;0&quot;) : print(answer!)
    }
    else {
        myMinHeap.insert(input)
    }
}&lt;/code&gt;&lt;/pre&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;최대 힙 | 백준 Swift 11279번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련 글 : &lt;a href=&quot;https://developer-p.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/190&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11279번(최대 힙)
struct MaxHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []

    var isEmpty: Bool {
        heap.count &amp;lt;= 1 ? true : false
    }

    init() {}
    init(_ element: T) {
        heap.append(element)
        heap.append(element)
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // rootNode
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;gt; heap[parentIndex] ? true : false
        }
        
        var insertIndex: Int = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus {case left, right, none}
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우, (완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우,
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;gt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들보다 자신이 모두 큰 경우(자신이 제일 큰 경우)
            if (heap[poppedIndex] &amp;gt; heap[leftChildIndex]) &amp;amp;&amp;amp; (heap[poppedIndex] &amp;gt; heap[rightChildIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 큰 경우(왼쪽과 오른쪽 자식 중, 더 큰 자식을 선별)
            if (heap[poppedIndex] &amp;lt; heap[leftChildIndex]) &amp;amp;&amp;amp; (heap[poppedIndex] &amp;lt; heap[rightChildIndex]) {
                return heap[leftChildIndex] &amp;gt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 큰 경우, (= 둘 중 하나의 자식만 큰 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;gt; heap[rightChildIndex] ? .left : .right
            }
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(leftChildIndex, poppedIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = poppedIndex * 2 + 1
                heap.swapAt(rightChildIndex, poppedIndex)
                poppedIndex = rightChildIndex
            }
        }
        
    }
    
}

let N = Int(readLine()!)!
var myMaxHeap: MaxHeap&amp;lt;Int&amp;gt; = MaxHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!

    if input == 0 {
        let answer = myMaxHeap.pop()
        answer == nil ? print(&quot;0&quot;) : print(answer!)
    }
    else {
        myMaxHeap.insert(input)
    }
}&lt;/code&gt;&lt;/pre&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;절댓값 힙 (1) | 백준 Swift 11286번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접근 아이디어 1&lt;/b&gt; : 최소 힙에서, comparer를 활용해서 비교해주면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고 : 글 아래 2번 풀이가 더 쉽고 간편하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(참고 : https://www.acmicpc.net/source/37235051)
// MARK: - 11286번(풀이 1 : comparer 추가)
struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [Int] = []
    
    var comparer: (Int, Int) -&amp;gt; Bool = {(a, b) in
        if abs(a) == abs(b) {
            return a &amp;gt; b
        }
        else {
            return abs(a) &amp;gt; abs(b)
        }
    }
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: Int) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: Int) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
//            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
            return comparer(heap[parentIndex], heap[insertIndex])
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; Int? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
//                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
                return comparer(heap[poppedIndex], heap[leftChildIndex]) ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
//            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
            if (comparer(heap[leftChildIndex], heap[poppedIndex])) &amp;amp;&amp;amp; (comparer(heap[rightChildIndex], heap[poppedIndex])) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
//            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
            if (comparer(heap[poppedIndex], heap[leftChildIndex])) &amp;amp;&amp;amp; (comparer(heap[poppedIndex], heap[rightChildIndex])) {
//                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
                return comparer(heap[rightChildIndex], heap[leftChildIndex]) ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
//            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
            if (comparer(heap[poppedIndex], heap[leftChildIndex])) || (comparer(heap[poppedIndex], heap[rightChildIndex])) {
//                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
                return comparer(heap[rightChildIndex], heap[leftChildIndex]) ? .left : .right
            }
            
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}

let N = Int(readLine()!)!
var myAbsHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!
    
    if input == 0 {
        let answer = myAbsHeap.pop()
        answer == nil ? print(&quot;0&quot;) : print(answer!)
    }
    else {
        myAbsHeap.insert(input)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;절댓값 힙 (2) | 백준 Swift 11286번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접근 아이디어 2&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt; 튜플을 (아래처럼 선언 뒤) 최소힙에 넣고, 튜플을 정렬시킨 뒤, 원본값을 출력한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1647246619271&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;튜플 : (절댓값, 원본값)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;알게된 점 : 튜플도 정렬이 된다!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;상세 설명&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(오름차순 정렬 시) 앞의 값을 기준으로 먼저 정렬되고, 그 다음 뒤의 값을 기준으로 정렬된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 문제의 조건인 &lt;b&gt;(앞) &lt;/b&gt;절대값을 기준으로 오름차순 정렬되고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 다음 &lt;b&gt;(뒤) &lt;/b&gt;원본값도 오름차순으로 (작은 것부터) 정렬되기 때문에,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;최소힙에 튜플을 넣음으로써 쉽게 풀 수 있다.&lt;/span&gt;&lt;span&gt;&lt;/span&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;&amp;nbsp;&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11286번(풀이 2 - 튜플을 넣어서 비교)
struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [(T, T)] = []
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: (T, T)) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: (T, T)) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; (T, T)? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}

let N = Int(readLine()!)!
var myMinHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!
    
    if input == 0 {
        let answer = myMinHeap.pop()
        answer == nil ? print(&quot;0&quot;) : print(answer!.1) // 튜플의 뒷부분(원본값) 출력.
    }
    else {
        myMinHeap.insert((abs(input), input))
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;절댓값 힙 (3) | 백준 Swift 11286번&lt;/h4&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;minHeap : 양수 - 양수일 땐, 절댓값이 작은 게 원본값도 작다. -&amp;gt; 따라서 minHeap에서 pop하면, 절댓값이 가장 작은 게 튀어나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maxHeap : 음수 - 음수일 땐, 절댓값이 작은 게 원본값이 크다. -&amp;gt; 따라서 maxHeap에서 pop하면, 절댓값이 가장 작은 게 튀어나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흐름1) 근데 만약, pop한 값이 둘 다 같으면 -&amp;gt; 음수가 들어 있는 maxHeap값을 pop해줘야 함.(원본값이 작은 걸 먼저 출력해야 하기 때문에)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흐름2) 둘 중 하나의 heap이 비어 있으면, 값이 있는 heap에서 pop을 해주면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흐름3) 둘 다 비어 있으면, 0을 출력 해주면 됨.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11286번(풀이 3 : minHeap과 maxHeap을 사용)
// minHeap : 양수 - 양수일 땐, 절댓값이 작은 게 원본값도 작다. -&amp;gt; 따라서 minHeap에서 pop하면, 절댓값이 가장 작은 게 튀어나온다.
// maxHeap : 음수 - 음수일 땐, 절댓값이 작은 게 원본값이 크다. -&amp;gt; 따라서 maxHeap에서 pop하면, 절댓값이 가장 작은 게 튀어나온다.
// 흐름1) 근데 만약, pop한 값이 둘 다 같으면 -&amp;gt; 음수가 들어 있는 maxHeap값을 pop해줘야 함.(원본값이 작은 걸 먼저 출력해야 하기 때문에)
// 흐름2) 둘 중 하나의 heap이 비어 있으면, 값이 있는 heap에서 pop을 해주면 됨.
// 흐름3) 둘 다 비어 있으면, 0을 출력 해주면 됨.
struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []

    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }

    init() {}
    init(_ element: T) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }

    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)

        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }

        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }

    enum moveDownStatus { case left, right, none }

    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()

        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1

            // case1. 모든(왼쪽) 자식 노드가 없는 경우 (완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }

            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }

            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }

            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }

            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }

            return .none
        }

        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}

struct MaxHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []

    var isEmpty: Bool {
        heap.count &amp;lt;= 1 ? true : false
    }

    init() {}
    init(_ element: T) {
        heap.append(element)
        heap.append(element)
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // rootNode
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;gt; heap[parentIndex] ? true : false
        }
        
        var insertIndex: Int = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus {case left, right, none}
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우, (완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우,
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;gt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들보다 자신이 모두 큰 경우(자신이 제일 큰 경우)
            if (heap[poppedIndex] &amp;gt; heap[leftChildIndex]) &amp;amp;&amp;amp; (heap[poppedIndex] &amp;gt; heap[rightChildIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 큰 경우(왼쪽과 오른쪽 자식 중, 더 큰 자식을 선별)
            if (heap[poppedIndex] &amp;lt; heap[leftChildIndex]) &amp;amp;&amp;amp; (heap[poppedIndex] &amp;lt; heap[rightChildIndex]) {
                return heap[leftChildIndex] &amp;gt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 큰 경우, (= 둘 중 하나의 자식만 큰 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;gt; heap[rightChildIndex] ? .left : .right
            }
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(leftChildIndex, poppedIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = poppedIndex * 2 + 1
                heap.swapAt(rightChildIndex, poppedIndex)
                poppedIndex = rightChildIndex
            }
        }
        
    }
    
}

let N = Int(readLine()!)!
var myMinHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap()
var myMaxHeap: MaxHeap&amp;lt;Int&amp;gt; = MaxHeap()

for _ in 0..&amp;lt;N {
    let input = Int(readLine()!)!

    if input &amp;gt; 0 { // 양수일 때,
        myMinHeap.insert(input)
    }
    else if input &amp;lt; 0 { // 음수일 때,
        myMaxHeap.insert(input)
    }
    else { // input이 0일 때,
        if myMinHeap.isEmpty == false { // 최소힙에 값이 있을 때,
            if myMaxHeap.isEmpty == false { // 최대힙에도 값이 있다면,
                let a = myMinHeap.pop()!
                let b = myMaxHeap.pop()!
                myMinHeap.insert(a) // 비교를 위해 빠진 값은 다시 추가.
                myMaxHeap.insert(b) // 비교를 위해 빠진 값은 다시 추가.
                
                if abs(a) &amp;lt; abs(b) { // a는 어차피 양수라 abs필요 없음.
                    print(myMinHeap.pop()!)
                }
                else { // 값이 같을 때에도, maxHeap(음수)쪽에서 빼줘야 함.
                    print(myMaxHeap.pop()!)
                }
            }
            else if myMaxHeap.isEmpty { // 최대힙엔 값이 없다면,
                print(myMinHeap.pop()!)
            }
        }
        else if myMinHeap.isEmpty { // 최소힙에 값이 없을 때,
            if myMaxHeap.isEmpty == false { // 최대힙에 값이 있으면,
                print(myMaxHeap.pop()!)
            }
            else if myMaxHeap.isEmpty { // 최대힙에도 값이 없으면,
                print(0)
            }
        }
    }
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 실버 - 문제풀이</category>
      <category>Swift Heap</category>
      <category>Swift Heap Algorithm</category>
      <category>Swift Heap 백준</category>
      <category>Swift 절댓값힙</category>
      <category>Swift 최대힙</category>
      <category>Swift 최소힙</category>
      <category>Swift 힙</category>
      <category>Swift 힙 백준 문제풀이</category>
      <category>백준 Swift</category>
      <category>백준 Swift PS</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/196</guid>
      <comments>https://developer-p.tistory.com/196#entry196comment</comments>
      <pubDate>Mon, 14 Mar 2022 15:59:56 +0900</pubDate>
    </item>
    <item>
      <title>회고록, 22일간의 챌린지를 마치며.</title>
      <link>https://developer-p.tistory.com/195</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;지금까지 길다면 길고, 짧다면 짧은 22일동안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지&lt;/b&gt;에 참여했습니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;완주 성공!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/22-2-3b1ba9adc1374a44aa8478818436e06f&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://softsquared.notion.site/22-2-3b1ba9adc1374a44aa8478818436e06f&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 22&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220314 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 챌린지&amp;nbsp;덕분에&amp;nbsp;문제&amp;nbsp;푸는&amp;nbsp;습관을&amp;nbsp;기를&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;좋은&amp;nbsp;기회였습니다.&lt;br /&gt;기존에&amp;nbsp;목표하던&amp;nbsp;&quot;하루도&amp;nbsp;놓치지&amp;nbsp;않고&amp;nbsp;문제풀기&quot;를&amp;nbsp;성공할&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;더&amp;nbsp;값졌던&amp;nbsp;것&amp;nbsp;같습니다.&lt;br /&gt;이를&amp;nbsp;토대로,&amp;nbsp;앞으로&amp;nbsp;코테&amp;nbsp;준비를&amp;nbsp;더&amp;nbsp;열심히&amp;nbsp;해야겠습니다.&lt;br /&gt;수고하셨습니다!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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/bYZcOV/btrvW4xFRvM/F5qcdqyeQGUDr9fpOkkth1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYZcOV/btrvW4xFRvM/F5qcdqyeQGUDr9fpOkkth1/img.png&quot; width=&quot;400&quot; height=&quot;143&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;225&quot; style=&quot;width: 66.6777%; margin-right: 10px;&quot; data-widthpercent=&quot;67.46&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYZcOV/btrvW4xFRvM/F5qcdqyeQGUDr9fpOkkth1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYZcOV%2FbtrvW4xFRvM%2FF5qcdqyeQGUDr9fpOkkth1%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;631&quot; height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUawiY/btrvVKN0Zte/9ekTO50TUk97vNM5tyRklk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUawiY/btrvVKN0Zte/9ekTO50TUk97vNM5tyRklk/img.png&quot; data-origin-width=&quot;1239&quot; data-origin-height=&quot;916&quot; width=&quot;400&quot; height=&quot;296&quot; style=&quot;width: 32.1595%;&quot; data-widthpercent=&quot;32.54&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUawiY/btrvVKN0Zte/9ekTO50TUk97vNM5tyRklk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUawiY%2FbtrvVKN0Zte%2F9ekTO50TUk97vNM5tyRklk%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;1239&quot; height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;220314 공부 일지 / 성공!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/Algorithm-5e8a1481b882461dae8d23203932d943&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://softsquared.notion.site/Algorithm-5e8a1481b882461dae8d23203932d943&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648909037829&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;틴틴 Algorithm 챌린지&quot; data-og-description=&quot;[챌린저스 스스로를 소개해주세요!]&quot; data-og-host=&quot;softsquared.notion.site&quot; data-og-source-url=&quot;https://softsquared.notion.site/Algorithm-5e8a1481b882461dae8d23203932d943&quot; data-og-url=&quot;https://softsquared.notion.site/5e8a1481b882461dae8d23203932d943&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/deDbdZ/hyNUteeRfM/9STtsS1ucycMyQtOLUrk70/img.png?width=728&amp;amp;height=227&amp;amp;face=0_0_728_227,https://scrap.kakaocdn.net/dn/9Wgih/hyNUn6aE07/45pOkBpdP7zPxAZIEtDH6k/img.png?width=728&amp;amp;height=227&amp;amp;face=0_0_728_227&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/Algorithm-5e8a1481b882461dae8d23203932d943&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://softsquared.notion.site/Algorithm-5e8a1481b882461dae8d23203932d943&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/deDbdZ/hyNUteeRfM/9STtsS1ucycMyQtOLUrk70/img.png?width=728&amp;amp;height=227&amp;amp;face=0_0_728_227,https://scrap.kakaocdn.net/dn/9Wgih/hyNUn6aE07/45pOkBpdP7zPxAZIEtDH6k/img.png?width=728&amp;amp;height=227&amp;amp;face=0_0_728_227');&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;틴틴 Algorithm 챌린지&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;softsquared.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647240710093&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/daAee3/hyNGB6mZcV/KGNH5CspptDcNoqah2NLl0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/daAee3/hyNGB6mZcV/KGNH5CspptDcNoqah2NLl0/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;&lt;span style=&quot;color: #000000;&quot;&gt;챌린지가 참가비가 있거나, 특별한 보상이 있는 건 아니였고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코딩테스트를 준비하는 과정에서 인증을 하는 과정을 통해 하루도 놓치지 않고 꾸준히 할 수 있을 거 같아서 신청했었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;처음 신청할 때의 마음가짐&lt;/a&gt;이었던 &lt;u&gt;&lt;b&gt;'하루도 빠지지 말고, 해당일에 모든 문제를 다 풀어야겠다.'&lt;/b&gt;&lt;/u&gt;&amp;nbsp;를 끝까지 놓치지 않고 오늘까지 왔습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;어려운 문제들은 아니였으나, 알고리즘 문제를 꾸준히 푸는 습관을 갖게 되었고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;처음 챌린지를 시작할 때만 해도 &lt;b&gt;Swift&lt;/b&gt;로 &lt;b&gt;브론즈 문제&lt;/b&gt;를 푸는 것도 어색하고 잘 안됐으나,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이젠 실버 4~5까지&lt;/b&gt;의 문제들도 풀 수 있는 단계까지 온 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코딩테스트 합격을 위해선 적어도 골드 상위티어정도까지의 문제를 쉽게 풀 수 있어야 한다고 생각하고 있고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;목표에 도달하기 위해서 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;앞으로도 매일 문제를 풀 예정입니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;현재 저는 유데미에서 아래 강의를 보면서 코딩테스트를 공부중입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Swift로 코딩테스트를 준비하면서 Heap, 큐(덱) 등이 없어 직접 구현해야 한다는 점이 힘들긴 합니다만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;알고리즘 기초를 다진다는 생각으로, 알아보고 구현하며 공부하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-purpose=&quot;lead-title&quot; data-ke-size=&quot;size16&quot;&gt;알고리즘 코딩 테스트 입문부터 합격까지 :&amp;nbsp;&lt;a href=&quot;https://www.udemy.com/course/comgong_codingtest/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.udemy.com/course/comgong_codingtest/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 유튜브 링크들은 코딩테스트, (추후에 있을)면접 대비를 위해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 강의와 함께 앞으로 &lt;b&gt;자료구조, 알고리즘 공부&lt;/b&gt;를 병행하기 위해 모아놓은 &lt;b&gt;유용한 링크들&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자료구조, 알고리즘&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/m-9pAwq1o3w&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/m-9pAwq1o3w&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/PIidtIBCjEg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/PIidtIBCjEg&lt;/a&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;컴퓨터구조, 운영체제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/J06SirxZG7M&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/J06SirxZG7M&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/uMyKBYF48nY&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/uMyKBYF48nY&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;앞으로도 꾸준히 공부하고, 문제 푼 걸 정리하여 기록할 예정입니다!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화이팅!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 Basic Challenge 후기</category>
      <category>22일 챌린지</category>
      <category>개발자P 회고록</category>
      <category>공부 후기</category>
      <category>알고리즘 공부</category>
      <category>자료구조 알고리즘 공부</category>
      <category>코딩테스트 공부</category>
      <category>코딩테스트 준비</category>
      <category>코테 공부</category>
      <category>코테 준비</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/195</guid>
      <comments>https://developer-p.tistory.com/195#entry195comment</comments>
      <pubDate>Mon, 14 Mar 2022 13:22:52 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY21</title>
      <link>https://developer-p.tistory.com/194</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;오늘은 참여한지 21일차 입니다. 브론즈1의 그리디알고리즘, 구현 문제들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647152714200&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hEvWn/hyNGCcrCIx/5f7LwadPfkOmX7Dzbwyzpk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dtydc4/hyNGIDISgq/DfPPBQH8now8IiVNw3JHik/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/f6Qdm/hyNGKBwd5q/SAbKNneT9wOXXoX32CusN1/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hEvWn/hyNGCcrCIx/5f7LwadPfkOmX7Dzbwyzpk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dtydc4/hyNGIDISgq/DfPPBQH8now8IiVNw3JHik/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/f6Qdm/hyNGKBwd5q/SAbKNneT9wOXXoX32CusN1/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647152726959&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0GO6M/hyNGGMEQ5Q/LPeHYURAT1RnigocgomHf1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0GO6M/hyNGGMEQ5Q/LPeHYURAT1RnigocgomHf1/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 21&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220313 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 지금까지&amp;nbsp;모든&amp;nbsp;문제를&amp;nbsp;당일에&amp;nbsp;놓치지&amp;nbsp;않고&amp;nbsp;풀어서&amp;nbsp;기분&amp;nbsp;좋다!&lt;br /&gt;습관이&amp;nbsp;든&amp;nbsp;만큼&amp;nbsp;앞으로도&amp;nbsp;매일&amp;nbsp;꾸준히&amp;nbsp;해야겠다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;474&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Usg7r/btrvSe7Ymqj/NzYRahEuoaN4EUzbCRKFR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Usg7r/btrvSe7Ymqj/NzYRahEuoaN4EUzbCRKFR1/img.png&quot; data-alt=&quot;220313 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Usg7r/btrvSe7Ymqj/NzYRahEuoaN4EUzbCRKFR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUsg7r%2FbtrvSe7Ymqj%2FNzYRahEuoaN4EUzbCRKFR1%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;400&quot; height=&quot;155&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220313 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1652번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1652번
let N = Int(readLine()!)!
var room: [[String]] = []

for _ in 0..&amp;lt;N {
    room.append(readLine()!.map{String($0)})
}

var rowCount: Int = 0 // 가로 가능 횟수
for i in 0..&amp;lt;N {
    var count: Int = 0 // 2이상인지 체크하기 위해.
    var goCheck: Bool = false
    
    for j in 0..&amp;lt;N {
        if room[i][j] == &quot;.&quot; {
            count += 1
        }
        else if room[i][j] == &quot;X&quot; {
            goCheck = true // 지금까지 쌓인 게 2 이상인지 체크하러 감.
        }
        
        if j == N - 1 { // X없이(or 끝에 X가 없이) 인덱스 끝까지 도달했을 떄,
            goCheck = true
        }
        
        if goCheck {
            if count &amp;gt;= 2 {
                rowCount += 1
            }
            count = 0 // X로 인해 체크했기 때문에, 다시 0으로 초기화.
            goCheck = false // check했으니 false.
        }
    }
}

var colCount: Int = 0 // 가로 가능 횟수
for i in 0..&amp;lt;N {
    var count: Int = 0 // 2이상인지 체크하기 위해.
    var goCheck: Bool = false
    
    for j in 0..&amp;lt;N {
        if room[j][i] == &quot;.&quot; {
            count += 1
        }
        else if room[j][i] == &quot;X&quot; {
            goCheck = true // 지금까지 쌓인 게 2 이상인지 체크하러 감.
        }
        
        if j == N - 1 { // X없이(or 끝에 X가 없이) 인덱스 끝까지 도달했을 떄,
            goCheck = true
        }
        
        if goCheck {
            if count &amp;gt;= 2 {
                colCount += 1
            }
            count = 0 // X로 인해 체크했기 때문에, 다시 0으로 초기화.
            goCheck = false // check했으니 false.
        }
    }
}

print(rowCount, colCount)&lt;/code&gt;&lt;/pre&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;백준 Swift 2167번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2167번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var numArray = Array(repeating: Array(repeating: 0, count: M + 1), count: N + 1)

for i in 1...N { // N행
    let numsInput = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    for j in 1...M { // M열
        numArray[i][j] = numsInput[j-1]
    }

}

let k = Int(readLine()!)!

for _ in 0..&amp;lt;k {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    var sum: Int = 0
    
    for i in input[0]...input[2] {
        for j in input[1]...input[3] {
            sum += numArray[i][j]
        }
    }
    print(sum)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2563번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2563번
let N = Int(readLine()!)!
var paper = Array(repeating: Array(repeating: 0, count: 101), count: 101)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (x, y) = (input[0], input[1])
    
    for i in y..&amp;lt;y+10 {
        for j in x..&amp;lt;x+10 {
            paper[i][j] = 1
        }
    }
    
}

print(paper.flatMap{$0}.filter{$0 == 1}.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 2750번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2750번
let N = Int(readLine()!)!
var numArray: [Int] = []

for _ in 0..&amp;lt;N {
    numArray.append(Int(readLine()!)!)
}

numArray.sort(by: &amp;lt;)

for num in numArray {
    print(num)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2851번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2851번
var mushrooms: [Int] = []
for _ in 0..&amp;lt;10 {
    mushrooms.append(Int(readLine()!)!)
}

var scores: [Int] = []
for i in 0..&amp;lt;10 {
    var sum: Int = 0
    for j in 0...i {
        sum += mushrooms[j]
    }
    scores.append(sum)
}

var distance: [Int] = []
for score in scores {
    distance.append(abs(100 - score))
}

var indexes: [Int] = [] // 100과의 거리가 제일 가까운 index들 모음.
for (index, d) in distance.enumerated() {
    if d == distance.min()! {
        indexes.append(index)
    }
}

var maxScores: [Int] = []

for i in indexes {
    maxScores.append(scores[i])
}

print(maxScores.max()!)&lt;/code&gt;&lt;/pre&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;b&gt;DAY21 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/quBlX/btrvY4wWyju/JSXOK8SX5Vr70kqYikJxgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/quBlX/btrvY4wWyju/JSXOK8SX5Vr70kqYikJxgk/img.png&quot; data-alt=&quot;DAY21 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/quBlX/btrvY4wWyju/JSXOK8SX5Vr70kqYikJxgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FquBlX%2FbtrvY4wWyju%2FJSXOK8SX5Vr70kqYikJxgk%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;400&quot; height=&quot;307&quot; data-origin-width=&quot;1197&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY21 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 백준 문제풀이</category>
      <category>백준 Swift</category>
      <category>백준 스위프트 문제풀이</category>
      <category>백준 알고리즘</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 문제풀이</category>
      <category>스위프트 알고리즘</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/194</guid>
      <comments>https://developer-p.tistory.com/194#entry194comment</comments>
      <pubDate>Sun, 13 Mar 2022 17:57:27 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY20</title>
      <link>https://developer-p.tistory.com/193</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;오늘은 참여한지 20일차 입니다. 브론즈1의 그리디알고리즘, 구현 문제들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647072602793&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hv4a4/hyNGNKXRwY/4DYTO6YerTSIjwfQzfKzF1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/g1fYy/hyNFF8Ppr9/e6G51L5fNxNbWwaFKmxscK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/rlmau/hyNFCde2eM/0KVj0Po1NqYGvbhCWSCcxk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hv4a4/hyNGNKXRwY/4DYTO6YerTSIjwfQzfKzF1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/g1fYy/hyNFF8Ppr9/e6G51L5fNxNbWwaFKmxscK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/rlmau/hyNFCde2eM/0KVj0Po1NqYGvbhCWSCcxk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647072622207&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/J1hNP/hyNGALDLjJ/hPqNP9eqJSwWLGyZyoFFlK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/J1hNP/hyNGALDLjJ/hPqNP9eqJSwWLGyZyoFFlK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 20&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220312 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 1384번이&amp;nbsp;풀리지&amp;nbsp;않아서&amp;nbsp;애를&amp;nbsp;먹었는데,&amp;nbsp;다행히&amp;nbsp;해결했다.&lt;br /&gt;이제&amp;nbsp;하루&amp;nbsp;남았다!&amp;nbsp;끝까지&amp;nbsp;놓치지&amp;nbsp;않고&amp;nbsp;해결해야겠다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;468&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IruHt/btrvK365Tpr/PDkDzWMMrvMq3Aw9sPvXl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IruHt/btrvK365Tpr/PDkDzWMMrvMq3Aw9sPvXl0/img.png&quot; data-alt=&quot;220312 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IruHt/btrvK365Tpr/PDkDzWMMrvMq3Aw9sPvXl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIruHt%2FbtrvK365Tpr%2FPDkDzWMMrvMq3Aw9sPvXl0%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;400&quot; height=&quot;239&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220312 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1356번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1356번
let N = readLine()!.map{String($0)}
var isU: Bool = false // 유진수 유무
var frontNums: [String] = []
var backNums: [String] = []

var index: Int = 0
for _ in 0..&amp;lt;N.count-1 { // 총 (N자리수-1)가지 방법
    index += 1
    
    var frontNum: String = &quot;&quot;
    for i in 0..&amp;lt;index {
        frontNum += N[i]
    }
    frontNums.append(frontNum)
    
    var backNum: String = &quot;&quot;
    for j in index..&amp;lt;N.count {
        backNum += N[j]
    }
    backNums.append(backNum)
}

//print(frontNums)
//print(backNums)

for i in 0..&amp;lt;frontNums.count {
    let chFrontArray = frontNums[i].map{Int(String($0))!}
    let frontValue = chFrontArray.reduce(1, *)
    
    let chBackArray = backNums[i].map{Int(String($0))!}
    let backValue = chBackArray.reduce(1, *)
    
    if frontValue == backValue { // 유진수
        isU = true
        break
    }
    
}

if isU {
    print(&quot;YES&quot;)
}
else {
    print(&quot;NO&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1357번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1357번
import Foundation
func Rev(_ x: String) -&amp;gt; Int {
    var reverseNum: Int = 0
    var strX = x.map{String($0)}
    strX.reverse()
    
    let num: String = strX.reduce(&quot;&quot;, +)
    reverseNum = Int(num)!
    
    return reverseNum
}

let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (X, Y) = (input[0], input[1])

print(Rev(String(Rev(X) + Rev((Y)))))&lt;/code&gt;&lt;/pre&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;백준 Swift 1384번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 문제에서, 유용한 반례&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1647092060964&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;6
A N N N N N
B P P P P P
C N N N N P
D P P P P N
E P N P N P
F N P N P N&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1384번
var caseCount: Int = 0
while true {
    let n = Int(readLine()!)!
    
    if n == 0 {
        break
    }
    var names: [String] = []
    var badIndex: [[Int]] = []
    
    for _ in 0..&amp;lt;n {
        let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
        names.append(input[0])

        var paperMessages: [String] = []
        for i in 1..&amp;lt;n {
            paperMessages.append(input[i])
        }
        
        var tempArray: [Int] = []
        for (index, ch) in paperMessages.enumerated() {
            if ch == &quot;N&quot; {
                tempArray.append(index)
            }
        }
        badIndex.append(tempArray)
    }

    var answerArray: [String] = []
    for i in 0..&amp;lt;n {
        for index in badIndex[i] {
            answerArray.append(&quot;\(names[(i + n - index - 1) % n]) was nasty about \(names[i])&quot;)
        }
    }

    caseCount += 1
    print(&quot;Group \(caseCount)&quot;)
    if answerArray.isEmpty {
        print(&quot;Nobody was nasty&quot;)
    }
    else {
        for ans in answerArray {
            print(ans)
        }
    }
    print()
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1453번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1453번
let N = Int(readLine()!)!
var seat = Array(repeating: 0, count: 101) // 1번부터 100번까지
var answer: Int = 0
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

for i in input {
    seat[i] += 1
}

for people in seat {
    if people &amp;gt;= 2 {
        answer += people - 1
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 1524번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1524번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    readLine()
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (_, _) = (input[0], input[1]) // N, M
    let sejun = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let sebi = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    let maxSejun = sejun.max()! // 힘은 바뀌지 않고,
    let maxSebi = sebi.max()! // 제일 센 병사 1개만 있어도 됨.
    
    if maxSejun &amp;gt;= maxSebi {
        print(&quot;S&quot;)
    }
    else {
        print(&quot;B&quot;)
    }
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1526번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1526번
let N = Int(readLine()!)!

for num in stride(from: N, through: 4, by: -1) {
    let strNum = String(num)
    
    if strNum.contains(&quot;0&quot;) || strNum.contains(&quot;1&quot;) || strNum.contains(&quot;2&quot;) || strNum.contains(&quot;3&quot;) || strNum.contains(&quot;5&quot;) || strNum.contains(&quot;6&quot;) || strNum.contains(&quot;8&quot;) || strNum.contains(&quot;9&quot;){
        continue
    }
    else {
        print(num)
        break
    }
    
}&lt;/code&gt;&lt;/pre&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;b&gt;DAY20 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1163&quot; data-origin-height=&quot;918&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IiQCZ/btrvRzMFSZ9/a0sKfcfuqUbuRZbZjwcPBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IiQCZ/btrvRzMFSZ9/a0sKfcfuqUbuRZbZjwcPBK/img.png&quot; data-alt=&quot;​DAY20 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IiQCZ/btrvRzMFSZ9/a0sKfcfuqUbuRZbZjwcPBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIiQCZ%2FbtrvRzMFSZ9%2Fa0sKfcfuqUbuRZbZjwcPBK%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;400&quot; height=&quot;316&quot; data-origin-width=&quot;1163&quot; data-origin-height=&quot;918&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;​DAY20 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 백준 문제</category>
      <category>백준 Swift PS</category>
      <category>백준 Swift 알고리즘</category>
      <category>백준 스위프트 문제풀이</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 브론즈</category>
      <category>알고리즘 백준 Swift 문제</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/193</guid>
      <comments>https://developer-p.tistory.com/193#entry193comment</comments>
      <pubDate>Sat, 12 Mar 2022 22:42:03 +0900</pubDate>
    </item>
    <item>
      <title>스위프트 | 아스키코드 변경 Char to Ascii / Ascii to Char ( Swift UnicodeScalar 사용, asciiValue)</title>
      <link>https://developer-p.tistory.com/192</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;b&gt;Swift&lt;/b&gt;로 풀고 있습니다.&amp;nbsp; &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(&lt;a style=&quot;color: #9d9d9d;&quot; title=&quot;백준 1157번&quot; href=&quot;https://www.acmicpc.net/problem/1157&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 1157번&lt;/a&gt;&amp;nbsp;- 아스키값이 필요한 문제)&lt;/span&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;기억을 하려고 하는데, 매번 쉽게 잊기도 하고 헷갈리기도 해서,&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;/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;.asciiValue(), UnicodeScalar()&lt;/b&gt;등 섞어서 풀이를 하다보니 헷갈렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 전 문제를 풀 때 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;UnicodeScalar() 하나로 통일하기로 선택&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;size14&quot;&gt;( 어차피 &lt;b&gt;1)&lt;/b&gt; &lt;u&gt;[Character &amp;rarr; 아스키 값]&lt;/u&gt;에선 .asciiValue()를 쓰더라도&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;결국 &lt;b&gt;2)&lt;/b&gt; &lt;u&gt;[아스키 값 &amp;rarr; Character]&lt;/u&gt; 에선 UnicodeScalar()를 써야 하기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1)&lt;/b&gt; 상황에서도 UnicodeScalara()를 쓰는게 헷갈리지 않더라고요. )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;[Character(String) &amp;rarr; 아스키 값]&lt;/h2&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;⇨&amp;nbsp; Int(&lt;/b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;UnicodeScalar(ch)!.value&lt;/b&gt;&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;를 쓰면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환값이 UInt32이기 때문에, (코딩테스트를 풀 땐 Int로 쓸 일이 많겠죠?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예시 코드처럼&lt;b&gt; Int()&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;a title=&quot;백준 1157번&quot; href=&quot;https://www.acmicpc.net/problem/1157&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 1157번&lt;/a&gt; 풀이 코드의 일부 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646981560561&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//var alphabet = Array(repeating: 0, count: 26) // 알파벳 개수 카운팅
//let input = readLine()!.uppercased().map{String($0)}

//for ch in input {
    let index: Int = Int(UnicodeScalar(ch)!.value) - Int(UnicodeScalar(&quot;A&quot;).value)
//    alphabet[index] += 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;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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2)&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;u&gt;[아스키 값 &amp;rarr; Character(String)]&lt;/u&gt;&lt;/h2&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;⇨&amp;nbsp; String(&lt;span style=&quot;background-color: #f6e199;&quot;&gt;UnicodeScalar(&lt;/span&gt;&lt;span&gt;65&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;)!&lt;/span&gt;)&lt;/b&gt; 를 쓰면 됩니다. (예시 아스키 값 : A(65))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UnicodeScalar()는 옵셔널을 반환하기 때문에, 강제 언래핑 !를 썼습니다.&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;span&gt;아래는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1157&quot;&gt;백준 1157번&lt;/a&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;풀이 코드의 일부 입니다.&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_1646982357272&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var maxIndex: Int = 0
// ~~생략~~

let answer = String(UnicodeScalar(65 + maxIndex)!) // 대문자
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 코테 문제를 풀면서 유용한 Swift &lt;b&gt;아스키코드 값 변환&lt;/b&gt;에 대해서 정리했습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;참고한 자료 :&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://0urtrees.tistory.com/223&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://0urtrees.tistory.com/223&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://stackoverflow.com/questions/24354549/how-to-get-string-from-ascii-code-in-swift&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/24354549/how-to-get-string-from-ascii-code-in-swift&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://zeddios.tistory.com/340&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://zeddios.tistory.com/340&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;코드 중 이해가 안 되는 부분이 있거나, 잘못된 부분이 있다면 편하게 댓글 부탁드립니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/알고리즘 공부, 구현 | 유용한 코드 모음</category>
      <category>Swift AsciiValue</category>
      <category>Swift UnicodeScalar</category>
      <category>Swift 아스키코드</category>
      <category>Swift 코딩테스트</category>
      <category>스위프트 Ascii to Char</category>
      <category>스위프트 Ascii to String</category>
      <category>스위프트 Char to Ascii</category>
      <category>스위프트 String to Ascii</category>
      <category>스위프트 유니코드스칼라</category>
      <category>아스키코드 값</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/192</guid>
      <comments>https://developer-p.tistory.com/192#entry192comment</comments>
      <pubDate>Fri, 11 Mar 2022 16:12:39 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY19</title>
      <link>https://developer-p.tistory.com/191</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;오늘은 참여한지 19일차 입니다. 오늘 문제는 실버 문제도 섞여 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646971912455&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nZ8oa/hyNFIRjAJK/kq6VvP3JFQiqRK8TazcyC0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/2EbY3/hyNFzNzztM/5TiCR1RkdoVFhyXX3b8TBK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/6j9l9/hyNFKBAyFX/3FuT7OHKx9kTOaQ9oYWG61/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nZ8oa/hyNFIRjAJK/kq6VvP3JFQiqRK8TazcyC0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/2EbY3/hyNFzNzztM/5TiCR1RkdoVFhyXX3b8TBK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/6j9l9/hyNFKBAyFX/3FuT7OHKx9kTOaQ9oYWG61/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646971922618&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkxDkR/hyNFHdMY48/GYKaGsjK5KaV1MxusiL250/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkxDkR/hyNFHdMY48/GYKaGsjK5KaV1MxusiL250/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 19&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220311 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 열심히&amp;nbsp;해서,&amp;nbsp;끝까지&amp;nbsp;마무리&amp;nbsp;화이팅!&lt;br /&gt;알고리즘&amp;nbsp;공부도&amp;nbsp;계속&amp;nbsp;함께&amp;nbsp;병행하기!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;936&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plX3w/btrvLJz9qVR/MKlppqkzLcR9KR85h9yslk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plX3w/btrvLJz9qVR/MKlppqkzLcR9KR85h9yslk/img.png&quot; data-alt=&quot;220311 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plX3w/btrvLJz9qVR/MKlppqkzLcR9KR85h9yslk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplX3w%2FbtrvLJz9qVR%2FMKlppqkzLcR9KR85h9yslk%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;400&quot; height=&quot;179&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220311 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1032번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1032번
let N = Int(readLine()!)!
var standard: [String] = []

for i in 0..&amp;lt;N {
    let input = readLine()!.map{String($0)}
    
    if i == 0 {
        standard = input
        continue
    }
    
    for (index, ch) in input.enumerated() {
        if standard[index] != ch {
            standard[index] = &quot;?&quot;
        }
    }
    
}

print(standard.reduce(&quot;&quot;, +))&lt;/code&gt;&lt;/pre&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;백준 Swift 1110번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1110번
let N = Int(readLine()!)!
var temp: Int = N
var count: Int = 0

while true {
    
    temp = (temp % 10) * 10 + ((temp / 10 + temp % 10) % 10)
//    print(temp)
    
    count += 1
    
    if temp == N {
        break
    }
    
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1157번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1157번
var alphabet = Array(repeating: 0, count: 26) // 알파벳 개수 카운팅

let input = readLine()!.uppercased().map{String($0)}

for ch in input {
    let index: Int = Int(UnicodeScalar(ch)!.value) - Int(UnicodeScalar(&quot;A&quot;).value)
    alphabet[index] += 1
}

var count: Int = 0
var maxIndex: Int = 0
for (index, num) in alphabet.enumerated() {
    if num == alphabet.max() {
        count += 1
        maxIndex = index
    }
}

if count &amp;gt;= 2 { // 여러개 존재
    print(&quot;?&quot;)
}
else {
    let answer = String(UnicodeScalar(65 + maxIndex)!) // 대문자
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1193번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1193번
let X = Int(readLine()!)!
var sum: Int = 0
var groupNumber: Int = 1 // 그룹 위치 찾기
while true {
    sum = (groupNumber * (groupNumber + 1)) / 2 // n*(n+1)/2
    if sum &amp;gt;= X {
        groupNumber -= 1 // 직전 그룹까지
        sum = (groupNumber * (groupNumber + 1)) / 2 // 직전 그룹까지
        break
    }
    groupNumber += 1
}

//print(groupNumber) // 직전 그룹번호
//print(sum) // 직전 그룹까지의 개수 합

groupNumber += 1 // 직전 그룹번호에서 +1 해줘야 -&amp;gt; X가 속한 그룹번호
var index: Int = X - sum // X가 속한 그룹에서, 몇번째인지

var numerator: Int = 1 // 분자
var denominator: Int = 1 // 분모

if groupNumber % 2 == 1 { // X가 속한 그룹번호가 홀수면,
    numerator = groupNumber
    denominator = 1
    
    for _ in 0..&amp;lt;index-1 {
        numerator -= 1
        denominator += 1
    }
    
}
else { // X가 속한 그룹번호가 짝수면,
    numerator = 1
    denominator = groupNumber
    
    for _ in 0..&amp;lt;index-1 {
        numerator += 1
        denominator -= 1
    }
}

print(&quot;\(numerator)/\(denominator)&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 1236번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1236번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])
var castle: [[String]] = []

for _ in 0..&amp;lt;N {
    castle.append(readLine()!.map{String($0)})
}

var rowCount: Int = 0
var colCount: Int = 0

for i in 0..&amp;lt;N {
    var checkFlag: Bool = false // 경비병 유무 체크.
    
    for j in 0..&amp;lt;M {
        if castle[i][j] == &quot;X&quot; { // 경비병 있으면,
            checkFlag = true
            break
        }
    }
    
    if checkFlag == false {
        rowCount += 1
    }
    
}

for i in 0..&amp;lt;M {
    var checkFlag: Bool = false // 경비병 유무 체크.
    
    for j in 0..&amp;lt;N {
        if castle[j][i] == &quot;X&quot; { // 경비병 있으면,
            checkFlag = true
            break
        }
    }
    
    if checkFlag == false {
        colCount += 1
    }
}

print(max(rowCount, colCount))&lt;/code&gt;&lt;/pre&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;백준 Swift 1340번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1340번
import Foundation
var input = readLine()!.components(separatedBy: [&quot;,&quot;, &quot; &quot;, &quot;:&quot;])
input.remove(at: 2) // 빈 문자열 제거
let (month, day, year, hour, minute) = (input[0], Double(input[1])!, Int(input[2])!, Double(input[3])!, Double(input[4])!)

var isYoon: Bool = false // 윤년인지 아닌지
var fullDay: Double = 365 * 24 * 60 // 평년시, 365일

if (year % 400 == 0) || ((year % 4 == 0) &amp;amp;&amp;amp; (year % 100 != 0)) { // 윤년 조건
    isYoon = true
    fullDay = 366 * 24 * 60 // 윤년시, 366일
}

let monthIndexArray: [String: Int] = [&quot;January&quot;: 0, &quot;February&quot;: 1, &quot;March&quot;: 2, &quot;April&quot;: 3, &quot;May&quot;: 4, &quot;June&quot;: 5, &quot;July&quot;: 6, &quot;August&quot;: 7, &quot;September&quot;: 8, &quot;October&quot;: 9, &quot;November&quot;: 10, &quot;December&quot;: 11] // 인덱스 연결
let monthYoonArray: [Double] = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] // 윤년은 2월29일까지
let monthArray: [Double] = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] // 평년

var answer: Double = 0.0 // 몇 퍼센트인지.
var daySum: Double = 0 // 해당 전 월까지의 일자 총합.

if isYoon { // 윤년 시,
    for i in 0..&amp;lt;monthIndexArray[month]! {
        daySum += monthYoonArray[i]
    }
    answer = (((daySum + day - 1) * 1440) + hour * 60 + minute) / fullDay * 100
}
else { // 윤년 아닐 시,
    for i in 0..&amp;lt;monthIndexArray[month]! {
        daySum += monthArray[i]
    }
    answer = (((daySum + day - 1) * 1440) + hour * 60 + minute) / fullDay * 100
}

print(answer)&lt;/code&gt;&lt;/pre&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;b&gt;DAY19 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;915&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rv3O6/btrvSen2vSj/JhmGKyiGDMOYu4xPgZ9Vo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rv3O6/btrvSen2vSj/JhmGKyiGDMOYu4xPgZ9Vo0/img.png&quot; data-alt=&quot;DAY19 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rv3O6/btrvSen2vSj/JhmGKyiGDMOYu4xPgZ9Vo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frv3O6%2FbtrvSen2vSj%2FJhmGKyiGDMOYu4xPgZ9Vo0%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;400&quot; height=&quot;326&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;915&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY19 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift PS 백준</category>
      <category>Swift 백준</category>
      <category>백준 스위프트 문제풀이</category>
      <category>백준 실버</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 브론즈 문제풀이</category>
      <category>스위프트 브론즈</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/191</guid>
      <comments>https://developer-p.tistory.com/191#entry191comment</comments>
      <pubDate>Fri, 11 Mar 2022 15:22:20 +0900</pubDate>
    </item>
    <item>
      <title>스위프트 | &amp;quot;(최소)힙 구현&amp;quot;하기 (Swift5 | Heap - MinHeap)</title>
      <link>https://developer-p.tistory.com/190</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;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;백준 1927번&lt;/a&gt;을 풀기 위해선 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;최소힙(MinHeap)&lt;/b&gt;&lt;/span&gt;&amp;nbsp;구현이 필요했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;Swift엔 힙이 없습니다.&lt;/b&gt;&lt;/u&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;물론 큐, 덱, 순열, 조합 등등 다 없습니다...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최대 힙&lt;/b&gt;에 대해선 아래 링크에서 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/196&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647336156665&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;백준 Swift 최소 힙, 최대 힙, 절댓값 힙 (백준 Swift 1927번, 11279번, 11286번)&quot; data-og-description=&quot;백준 Swift 힙(Heap) 세트 문제입니다. 절댓값 힙 문제는 총 3가지의 아이디어로 풀 수 있었습니다. (백준 11286번) (idea 1 : 단순 값 비교 / idea 2 : 튜플 사용 / idea 3 : 최소힙과 최대힙을 동시 사용) 최소&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/196&quot; data-og-url=&quot;https://developer-p.tistory.com/196&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dGrkd8/hyNH0xJsqw/UrWcWd9YJrLdYzHw0esId1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/urMHp/hyNHWWpzBI/Id7k2xAo2YdeX2USDdxIh0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/196&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/196&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dGrkd8/hyNH0xJsqw/UrWcWd9YJrLdYzHw0esId1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/urMHp/hyNHWWpzBI/Id7k2xAo2YdeX2USDdxIh0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;백준 Swift 최소 힙, 최대 힙, 절댓값 힙 (백준 Swift 1927번, 11279번, 11286번)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift 힙(Heap) 세트 문제입니다. 절댓값 힙 문제는 총 3가지의 아이디어로 풀 수 있었습니다. (백준 11286번) (idea 1 : 단순 값 비교 / idea 2 : 튜플 사용 / idea 3 : 최소힙과 최대힙을 동시 사용) 최소&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/146&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646904647550&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;스위프트 | &amp;quot;스택, 큐, 덱 구현&amp;quot;하기 (Swift5 | Stack, Queue, Deque)&quot; data-og-description=&quot;백준 1935번을 풀다가, 스위프트엔 스택 &amp;amp; 큐가 없다는 사실을 알게 되었습니다. (+ 물론 덱은 당연히 없었습니다..) 지난번 게시글과 똑같은 상황이죠? 네. 구현해야 합니다... (스택은 아닐지도~ &quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/146&quot; data-og-url=&quot;https://developer-p.tistory.com/146&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/h9xq5/hyNFzF5Csh/g07lSVJT79yrdpy3IXXgp0/img.png?width=664&amp;amp;height=1162&amp;amp;face=0_0_664_1162,https://scrap.kakaocdn.net/dn/czVghk/hyNFDaExPc/Cx4rDS645ullY456ncBcgk/img.png?width=664&amp;amp;height=1162&amp;amp;face=0_0_664_1162,https://scrap.kakaocdn.net/dn/cEfStm/hyNFJhDyxk/qMF5OoaQcnuhLHSbavEL1K/img.png?width=672&amp;amp;height=1104&amp;amp;face=0_0_672_1104&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/146&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/h9xq5/hyNFzF5Csh/g07lSVJT79yrdpy3IXXgp0/img.png?width=664&amp;amp;height=1162&amp;amp;face=0_0_664_1162,https://scrap.kakaocdn.net/dn/czVghk/hyNFDaExPc/Cx4rDS645ullY456ncBcgk/img.png?width=664&amp;amp;height=1162&amp;amp;face=0_0_664_1162,https://scrap.kakaocdn.net/dn/cEfStm/hyNFJhDyxk/qMF5OoaQcnuhLHSbavEL1K/img.png?width=672&amp;amp;height=1104&amp;amp;face=0_0_672_1104');&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;스위프트 | &quot;스택, 큐, 덱 구현&quot;하기 (Swift5 | Stack, Queue, Deque)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 1935번을 풀다가, 스위프트엔 스택 &amp;amp; 큐가 없다는 사실을 알게 되었습니다. (+ 물론 덱은 당연히 없었습니다..) 지난번 게시글과 똑같은 상황이죠? 네. 구현해야 합니다... (스택은 아닐지도~&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/145&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646904660458&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;스위프트 | &amp;quot;순열과 조합 구현&amp;quot;하기 (Swift5 | Permutation, Combination)&quot; data-og-description=&quot;백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다. 파이썬에는 간단한 순열 &amp;amp; 조합이 스위프트엔 없다는 것이죠. 스위프트를 공부한 지 얼마 되지 않은 상황에서, 파이썬에선 기본함수인 &quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/145&quot; data-og-url=&quot;https://developer-p.tistory.com/145&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oc4Id/hyNFLfs3p0/lewV8ak95AG2gOh5DKtknK/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/i7xFr/hyNEoTGUhN/jFATklzuLHoden9RF0lxe1/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/bapoW4/hyNFymR4cU/oBwmN9ZvgZNwMnNruYjUvk/img.png?width=1170&amp;amp;height=978&amp;amp;face=58_489_98_532&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/145&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oc4Id/hyNFLfs3p0/lewV8ak95AG2gOh5DKtknK/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/i7xFr/hyNEoTGUhN/jFATklzuLHoden9RF0lxe1/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/bapoW4/hyNFymR4cU/oBwmN9ZvgZNwMnNruYjUvk/img.png?width=1170&amp;amp;height=978&amp;amp;face=58_489_98_532');&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;스위프트 | &quot;순열과 조합 구현&quot;하기 (Swift5 | Permutation, Combination)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다. 파이썬에는 간단한 순열 &amp;amp; 조합이 스위프트엔 없다는 것이죠. 스위프트를 공부한 지 얼마 되지 않은 상황에서, 파이썬에선 기본함수인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;최소 힙(MinHeap)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 구현이 어려워 보여 미루다가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://babbab2.tistory.com/109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;설명이 잘 되어 있는 글&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;&lt;b&gt;최소 힙&lt;/b&gt;과 관련된 문제가 나올 때&lt;span&gt; &lt;/span&gt;&lt;b&gt;유용할만한 코드&lt;/b&gt;를 남겨둡니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;최소 힙(MinHeap) 구현&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(오류 수정됨.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;200&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1927&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8p43G/btrwKFqL2J9/RVe4sZgEEEksfYULgMz1ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8p43G%2FbtrwKFqL2J9%2FRVe4sZgEEEksfYULgMz1ak%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;400&quot; height=&quot;169&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;백준 1927번 반례 추가.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1647332624191&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - MinHeap
import Foundation

struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: T) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우(자신이 제일 작은 경우)
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) || (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            return .none
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;코드 사용&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1646905347077&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// var myMinHeap: MinHeap&amp;lt;Int&amp;gt; = MinHeap() // 값 없이 초기화
var minHeap = MinHeap.init(30) // 값 있게 초기화

minHeap.insert(10)
print(minHeap)

minHeap.insert(7)
print(minHeap)

minHeap.insert(8)
print(minHeap)

minHeap.insert(3)
print(minHeap)

print(minHeap.pop()!)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 출력 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GKFm0/btrvy4sFvwa/64XyeV9XNrKkRnj95avE4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GKFm0/btrvy4sFvwa/64XyeV9XNrKkRnj95avE4K/img.png&quot; data-alt=&quot;예시 출력 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GKFm0/btrvy4sFvwa/64XyeV9XNrKkRnj95avE4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGKFm0%2Fbtrvy4sFvwa%2F64XyeV9XNrKkRnj95avE4K%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;400&quot; height=&quot;319&quot; data-origin-width=&quot;1178&quot; data-origin-height=&quot;938&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시 출력 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;아래 더보기는, 수정 전 코드입니다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&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;(오류 수정 전) MinHeap 코드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반례&lt;/p&gt;
&lt;pre id=&quot;code_1647333403915&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(백준 최소힙문제 : https://www.acmicpc.net/problem/1927)
(반례 관련 테스트케이스 추가 요청 : https://www.acmicpc.net/board/view/86132)

&amp;lt;안 되는 반례&amp;gt;
11
2
2
3
3
1
0
0
0
0
0
0&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1647333084088&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - MinHeap
import Foundation

struct MinHeap&amp;lt;T: Comparable&amp;gt; {
    var heap: [T] = []
    
    var isEmpty: Bool {
        return heap.count &amp;lt;= 1 ? true : false
    }
    
    init() {}
    init(_ element: T) {
        heap.append(element) // 0번 index채우기 용
        heap.append(element) // 실제 Root Node 채움.
    }
    
    mutating func insert(_ element: T) {
        if heap.isEmpty {
            heap.append(element)
            heap.append(element)
            return
        }
        heap.append(element)
        
        func isMoveUp(_ insertIndex: Int) -&amp;gt; Bool {
            if insertIndex &amp;lt;= 1 { // Root Node일 때,
                return false
            }
            let parentIndex = insertIndex / 2
            return heap[insertIndex] &amp;lt; heap[parentIndex] ? true : false
        }
        
        var insertIndex = heap.count - 1
        while isMoveUp(insertIndex) {
            let parentIndex = insertIndex / 2
            heap.swapAt(insertIndex, parentIndex)
            insertIndex = parentIndex
        }
    }
    
    enum moveDownStatus { case left, right, none }
    
    mutating func pop() -&amp;gt; T? {
        if heap.count &amp;lt;= 1 {
            return nil
        }
        let returnData = heap[1]
        heap.swapAt(1, heap.count - 1)
        heap.removeLast()
        
        func moveDown(_ poppedIndex: Int) -&amp;gt; moveDownStatus {
            let leftChildIndex = poppedIndex * 2
            let rightChildIndex = leftChildIndex + 1
            
            // case1. 모든(왼쪽) 자식 노드가 없는 경우(완전이진트리는 왼쪽부터 채워지므로)
            if leftChildIndex &amp;gt;= heap.count {
                return .none
            }
            
            // case2. 왼쪽 자식 노드만 있는 경우
            if rightChildIndex &amp;gt;= heap.count {
                return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .none
            }
            
            // case3. 왼쪽&amp;amp;오른쪽 자식 노드 모두 있는 경우
            // case3-1. 자식들이 자신보다 모두 큰 경우
            if (heap[leftChildIndex] &amp;gt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;gt; heap[poppedIndex]) {
                return .none
            }
            
            // case3-2. 자식들이 자신보다 모두 작은 경우(왼쪽과 오른쪽 자식 중, 더 작은 자식을 선별)
            if (heap[leftChildIndex] &amp;lt; heap[poppedIndex]) &amp;amp;&amp;amp; (heap[rightChildIndex] &amp;lt; heap[poppedIndex]) {
                return heap[leftChildIndex] &amp;lt; heap[rightChildIndex] ? .left : .right
            }
            
            // case3-3. 왼쪽과 오른쪽 자식 중, 한 자식만 자신보다 작은 경우
            return heap[leftChildIndex] &amp;lt; heap[poppedIndex] ? .left : .right
            
        }
        
        var poppedIndex = 1
        while true {
            switch moveDown(poppedIndex) {
            case .none:
                return returnData
            case .left:
                let leftChildIndex = poppedIndex * 2
                heap.swapAt(poppedIndex, leftChildIndex)
                poppedIndex = leftChildIndex
            case .right:
                let rightChildIndex = (poppedIndex * 2) + 1
                heap.swapAt(poppedIndex, rightChildIndex)
                poppedIndex = rightChildIndex
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;코드 출처 :&amp;nbsp;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://github.com/sossam/SwiftHeap/blob/main/Heap/MinHeap.swift&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/sossam/SwiftHeap/blob/main/Heap/MinHeap.swift&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고한 자료 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://babbab2.tistory.com/109&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://babbab2.tistory.com/109&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://icksw.tistory.com/216&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://icksw.tistory.com/216&lt;/a&gt; | &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://medium.com/devslopes-blog/swift-data-structures-heap-e3fbbdaa3129&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.com/devslopes-blog/swift-data-structures-heap-e3fbbdaa3129&lt;/a&gt;&amp;nbsp;| &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://fomaios.tistory.com/entry/Data-Structure-%ED%9E%99Heap%EC%9D%B4%EB%9E%80-feat-Swift&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://fomaios.tistory.com/entry/Data-Structure-%ED%9E%99Heap%EC%9D%B4%EB%9E%80-feat-Swift&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;코드 중 이해가 안 되는 부분이 있거나, 잘못된 부분이 있다면 편하게 댓글 부탁드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/알고리즘 공부, 구현 | 유용한 코드 모음</category>
      <category>heap</category>
      <category>Swift Heap 구현</category>
      <category>Swift Min Heap 구현하기</category>
      <category>swift MinHeap</category>
      <category>스위프트 최소 힙 구현 방법</category>
      <category>스위프트 최소힙</category>
      <category>스위프트 최소힙 구현</category>
      <category>스위프트 힙 구현</category>
      <category>최소힙 구현</category>
      <category>최소힙 구현 스위프트</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/190</guid>
      <comments>https://developer-p.tistory.com/190#entry190comment</comments>
      <pubDate>Thu, 10 Mar 2022 18:49:37 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY18</title>
      <link>https://developer-p.tistory.com/189</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;오늘은 참여한지 18일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646881870021&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3jtpm/hyNFyfWJ04/dneY5CLOkC1lCM4B2O9UKK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/n61NQ/hyNFy1iSLE/aojsAlKWYmohhJkHH9YCC1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/cOdGwg/hyNFyAex33/qyf332bpaPhz28l1N3GfOK/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3jtpm/hyNFyfWJ04/dneY5CLOkC1lCM4B2O9UKK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/n61NQ/hyNFy1iSLE/aojsAlKWYmohhJkHH9YCC1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/cOdGwg/hyNFyAex33/qyf332bpaPhz28l1N3GfOK/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646881891440&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jE7xC/hyNEk4DzbE/H1IG0hFzjvi4r4z3fkoOZ1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jE7xC/hyNEk4DzbE/H1IG0hFzjvi4r4z3fkoOZ1/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 18&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220310 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 3845번 문제가 어려워 결국 못풀었다. 다음에&amp;nbsp;다시&amp;nbsp;도전해야겠다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;954&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuVbXH/btrvCndyg61/eUtrgzFs9pYD7fAi5RaFsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuVbXH/btrvCndyg61/eUtrgzFs9pYD7fAi5RaFsk/img.png&quot; data-alt=&quot;220310 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuVbXH/btrvCndyg61/eUtrgzFs9pYD7fAi5RaFsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuVbXH%2FbtrvCndyg61%2FeUtrgzFs9pYD7fAi5RaFsk%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;400&quot; height=&quot;139&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220310 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2309번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2309번
var heights: [Int] = []

for _ in 0..&amp;lt;9 {
    heights.append(Int(readLine()!)!)
}
heights.sort(by: &amp;lt;)

func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var results: [[Int]] = []
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            results.append(nowCombi)
            return
        }
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    combination(0, [])
    return results
}

var answerHeights: [Int] = [] // 7명 난쟁이 - 키 합 100

var tempHeights = combi(heights, 7)

for arr in tempHeights {
    if arr.reduce(0, +) == 100 {
        answerHeights = arr
        break
    }
}

for height in answerHeights {
    print(height)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5576번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5576번
var W: [Int] = []
var K: [Int] = []

for _ in 0..&amp;lt;10 {
    W.append(Int(readLine()!)!)
}
for _ in 0..&amp;lt;10 {
    K.append(Int(readLine()!)!)
}

W.sort(by: &amp;gt;)
K.sort(by: &amp;gt;)

let wSum = W[0] + W[1] + W[2]
let kSum = K[0] + K[1] + K[2]

print(wSum, kSum)&lt;/code&gt;&lt;/pre&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;백준 Swift 9076번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9076번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    var score = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
    score.removeFirst()
    score.removeLast()
    
    if score.last! - score.first! &amp;gt;= 4 {
        print(&quot;KIN&quot;)
    }
    else {
        print(score.reduce(0, +))
    }
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2750번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2750번
let N = Int(readLine()!)!
var nums: [Int] = []

for _ in 0..&amp;lt;N {
    nums.append(Int(readLine()!)!)
}

nums.sort(by: &amp;lt;)

for num in nums {
    print(num)
}&lt;/code&gt;&lt;/pre&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;b&gt;DAY18 인증완료&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;2188&quot; data-origin-height=&quot;1848&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ROIWJ/btrvJ9M9fVg/6yKDYc3alkdcatFN64wgkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ROIWJ/btrvJ9M9fVg/6yKDYc3alkdcatFN64wgkk/img.png&quot; data-alt=&quot;DAY18 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ROIWJ/btrvJ9M9fVg/6yKDYc3alkdcatFN64wgkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FROIWJ%2FbtrvJ9M9fVg%2F6yKDYc3alkdcatFN64wgkk%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;400&quot; height=&quot;338&quot; data-origin-width=&quot;2188&quot; data-origin-height=&quot;1848&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY18 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift PS 백준</category>
      <category>백준 Swift 문제</category>
      <category>백준 스위프트 문제풀이</category>
      <category>스위프트 문제</category>
      <category>스위프트 백준</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/189</guid>
      <comments>https://developer-p.tistory.com/189#entry189comment</comments>
      <pubDate>Thu, 10 Mar 2022 14:32:48 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY17</title>
      <link>https://developer-p.tistory.com/188</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;오늘은 참여한지 17일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646747599461&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmCQfA/hyNEgGrRoG/qsZkimR96QRHxEEFfa0ac0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bq6NQ0/hyNEka0w0y/UrlietGYSLkEo1kkNLiX50/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/chuuHu/hyNEp4ss88/e4xhhAqUzXWmLQhUk9JW11/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmCQfA/hyNEgGrRoG/qsZkimR96QRHxEEFfa0ac0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bq6NQ0/hyNEka0w0y/UrlietGYSLkEo1kkNLiX50/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/chuuHu/hyNEp4ss88/e4xhhAqUzXWmLQhUk9JW11/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646747610130&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buCxqp/hyNCVKGWmD/JIRKvzNbT3IVWNkbifrP3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buCxqp/hyNCVKGWmD/JIRKvzNbT3IVWNkbifrP3K/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 17&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220309 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 꾸준히&amp;nbsp;문제&amp;nbsp;풀어서,&amp;nbsp;22일까지&amp;nbsp;한&amp;nbsp;번도&amp;nbsp;놓치지&amp;nbsp;않고&amp;nbsp;마무리&amp;nbsp;잘&amp;nbsp;하고&amp;nbsp;싶다!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAKfT/btrvvvh8itb/LGiHPZ0PR0fpyj8bmqkaDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAKfT/btrvvvh8itb/LGiHPZ0PR0fpyj8bmqkaDK/img.png&quot; data-alt=&quot;220309 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAKfT/btrvvvh8itb/LGiHPZ0PR0fpyj8bmqkaDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAKfT%2Fbtrvvvh8itb%2FLGiHPZ0PR0fpyj8bmqkaDK%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;400&quot; height=&quot;198&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220309 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1100번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1100번
var chess: [[String]] = [] // 8x8 체스판

for _ in 0..&amp;lt;8 {
    let input = readLine()!.map{String($0)}
    chess.append(input)
}

var count: Int = 0 // 하얀 칸 위에 말 개수

for i in 0..&amp;lt;8 {
    for j in 0..&amp;lt;8 {
        
        if i % 2 == 0 { // 짝수 행일 땐,
            if j % 2 == 0 { // 짝수 열들이 하얀칸.
                if chess[i][j] == &quot;F&quot; {
                    count += 1
                }
            }
        }
        else { // 홀수 행일 땐,
            if j % 2 == 1 { // 홀수 열들이 하얀칸.
                if chess[i][j] == &quot;F&quot; {
                    count += 1
                }
            }
        }
        
    }
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1152번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1152번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
print(input.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1159번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1159번
let N = Int(readLine()!)!
var alphabet = Array(repeating: 0, count: 26) // a~z 개수

for _ in 0..&amp;lt;N {
    let input = readLine()!.map{String($0)}
    let index = Int(Character(input.first!).asciiValue! - Character(&quot;a&quot;).asciiValue!)
    
    alphabet[index] += 1
}

let check = alphabet.filter{$0 &amp;gt;= 5}

if check.isEmpty {
    print(&quot;PREDAJA&quot;)
}
else {
    for (index, count) in alphabet.enumerated() {
        if count &amp;gt;= 5 {
            let answer = Character(UnicodeScalar(97 + index)!) // a의 아스키코드값 + index
            print(answer, terminator: &quot;&quot;)
        }
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1225번(속도 느림)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1225번(속도 느림)
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (A, B) = (input[0].map{String($0)}, input[1].map{String($0)})

var answer: Int = 0

for ch1 in A {
    for ch2 in B {
        answer += Int(ch1)! * Int(ch2)!
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1225번 (다시1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1225번 다시(1)
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (A, B) = (input[0], input[1])

var first: Int = 0
var second: Int = 0

for ch1 in A {
    first += Int(String(ch1))!
}

for ch2 in B {
    second += Int(String(ch2))!
}

print(first * second)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1225번(다시 2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1225번 다시(2)
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (A, B) = (input[0].map{Int(String($0))!}, input[1].map{Int(String($0))!})

let firstSum = A.reduce(0){ (num1: Int, num2: Int) -&amp;gt; Int in
    return num1 + num2
}

let secondSum = B.reduce(0, +)

print(firstSum * secondSum)&lt;/code&gt;&lt;/pre&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;백준 Swift 1264번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1264번
while true {
    let input = readLine()!
    if input == &quot;#&quot; {
        break
    }
    
    let str = input.lowercased().map{String($0)}
    
    let count = str.filter{$0 == &quot;a&quot; || $0 == &quot;e&quot; || $0 == &quot;i&quot; || $0 == &quot;o&quot; || $0 == &quot;u&quot;}.count
    print(count)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1371번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1371번
var alphabet = Array(repeating: 0, count: 26) // 알파벳 카운팅

while let input = readLine() {
    let str = input.split(separator: &quot; &quot;).map{String($0)}

    for arr in str {
        for ch in arr {
            let index: Int = Int(Character(String(ch)).asciiValue!) - Int(Character(&quot;a&quot;).asciiValue!)
//            let index2 = Int(UnicodeScalar((String(ch)))!.value) - Int(UnicodeScalar((&quot;a&quot;)).value) // 방법 2가지
            alphabet[index] += 1
        }
    }

}

var answerIndexArray: [Int] = []
let maxValue = alphabet.max()!
for (index, num) in alphabet.enumerated() {
    if num == maxValue {
        answerIndexArray.append(index)
    }
}

for i in answerIndexArray {
    let ch = UnicodeScalar(97 + i)!
    print(ch, terminator: &quot;&quot;)
}&lt;/code&gt;&lt;/pre&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;&lt;b&gt;DAY17 인증완료&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;2104&quot; data-origin-height=&quot;1830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCK42j/btrvHZY5kcl/ALixN8cNCMWqHLM94WuZCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCK42j/btrvHZY5kcl/ALixN8cNCMWqHLM94WuZCK/img.png&quot; data-alt=&quot;DAY17 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCK42j/btrvHZY5kcl/ALixN8cNCMWqHLM94WuZCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCK42j%2FbtrvHZY5kcl%2FALixN8cNCMWqHLM94WuZCK%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;400&quot; height=&quot;348&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;1830&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY17 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift Bronze</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>백준 PS</category>
      <category>백준 Swift</category>
      <category>백준 Swift PS</category>
      <category>스위프트 백준 문제풀이</category>
      <category>스위프트 백준 브론즈</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/188</guid>
      <comments>https://developer-p.tistory.com/188#entry188comment</comments>
      <pubDate>Wed, 9 Mar 2022 16:47:11 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY16</title>
      <link>https://developer-p.tistory.com/187</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;하지만 특별히 못 풀었던 문제는 없어서, 임의로 약 15문제를 푸려고 합니다. (실버2 ~ 브론즈3 예상)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646707140496&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmCQfA/hyNEgGrRoG/qsZkimR96QRHxEEFfa0ac0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bq6NQ0/hyNEka0w0y/UrlietGYSLkEo1kkNLiX50/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/chuuHu/hyNEp4ss88/e4xhhAqUzXWmLQhUk9JW11/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmCQfA/hyNEgGrRoG/qsZkimR96QRHxEEFfa0ac0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bq6NQ0/hyNEka0w0y/UrlietGYSLkEo1kkNLiX50/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/chuuHu/hyNEp4ss88/e4xhhAqUzXWmLQhUk9JW11/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646707152571&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buCxqp/hyNCVKGWmD/JIRKvzNbT3IVWNkbifrP3K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buCxqp/hyNCVKGWmD/JIRKvzNbT3IVWNkbifrP3K/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 16&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220308 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 오늘&amp;nbsp;꽤&amp;nbsp;많은&amp;nbsp;문제를&amp;nbsp;풀었다.&lt;br /&gt;예전에&amp;nbsp;못&amp;nbsp;풀었던&amp;nbsp;문제도&amp;nbsp;해결해서&amp;nbsp;좋았고,&amp;nbsp;예전의&amp;nbsp;코드에&amp;nbsp;비해&amp;nbsp;개선된&amp;nbsp;점도&amp;nbsp;있어서&amp;nbsp;좋다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&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/ceYlmQ/btrvrAEeIre/OgQWNqJQyARNwI0UUq1cBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceYlmQ/btrvrAEeIre/OgQWNqJQyARNwI0UUq1cBK/img.png&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;1226&quot; width=&quot;200&quot; height=&quot;705&quot; style=&quot;width: 15.9011%; margin-right: 10px;&quot; data-widthpercent=&quot;16.09&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceYlmQ/btrvrAEeIre/OgQWNqJQyARNwI0UUq1cBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceYlmQ%2FbtrvrAEeIre%2FOgQWNqJQyARNwI0UUq1cBK%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;348&quot; height=&quot;1226&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQwJHB/btrvrhMmMiQ/NjeICTWB3odaOgH36NF5O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQwJHB/btrvrhMmMiQ/NjeICTWB3odaOgH36NF5O1/img.png&quot; width=&quot;400&quot; height=&quot;270&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;820&quot; style=&quot;width: 82.9361%;&quot; data-widthpercent=&quot;83.91&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQwJHB/btrvrhMmMiQ/NjeICTWB3odaOgH36NF5O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQwJHB%2FbtrvrhMmMiQ%2FNjeICTWB3odaOgH36NF5O1%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;1214&quot; height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;220308 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 3009번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3009번
var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (x1, y1) = (input[0], input[1])
input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (x2, y2) = (input[0], input[1])
input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (x3, y3) = (input[0], input[1])

var (x4, y4) = (0, 0)

// x4구하는 부분
if x1 == x2 {
    x4 = x3
}
else if x1 == x3 {
    x4 = x2
}
else if x2 == x3 {
    x4 = x1
}
// y4구하는 부분
if y1 == y2 {
    y4 = y3
}
else if y1 == y3 {
    y4 = y2
}
else if y2 == y3 {
    y4 = y1
}

print(x4, y4)&lt;/code&gt;&lt;/pre&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;백준 Swift 4153번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 4153번
import Foundation
while true {
    let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
    let triangleArray = input.sorted(by: &amp;lt;) // 가장 긴 변이 c
    
    let (a, b, c) = (triangleArray[0], triangleArray[1], triangleArray[2])
    
    if a == 0 &amp;amp;&amp;amp; b == 0 &amp;amp;&amp;amp; c == 0 {
        break
    }
    
    if pow(c, 2.0) == (pow(a, 2.0) + pow(b, 2.0)) {
        print(&quot;right&quot;)
    }
    else {
        print(&quot;wrong&quot;)
    }
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3053번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3053번
import Foundation
let R = Double(readLine()!)!
let uclid: Double = Double.pi * R * R
let taxi = 2 * R * R

print(String(format: &quot;%.6f&quot;, uclid))
print(String(format: &quot;%.6f&quot;, taxi))&lt;/code&gt;&lt;/pre&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;백준 Swift 1002번&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;백준 1002번.jpeg&quot; data-origin-width=&quot;3086&quot; data-origin-height=&quot;4364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZgRlh/btrvoASJ85Z/xDk0gTN6PhONrV1UYFq9Z1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZgRlh/btrvoASJ85Z/xDk0gTN6PhONrV1UYFq9Z1/img.jpg&quot; data-alt=&quot;백준 Swift 1002번 Case 분류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZgRlh/btrvoASJ85Z/xDk0gTN6PhONrV1UYFq9Z1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZgRlh%2FbtrvoASJ85Z%2FxDk0gTN6PhONrV1UYFq9Z1%2Fimg.jpg&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;400&quot; height=&quot;566&quot; data-filename=&quot;백준 1002번.jpeg&quot; data-origin-width=&quot;3086&quot; data-origin-height=&quot;4364&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 Swift 1002번 Case 분류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1002번
import Foundation
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
    var (x1, y1, r1) = (input[0], input[1], input[2])
    var (x2, y2, r2) = (input[3], input[4], input[5])
    var answer: Int = 0
    
    let d = sqrt(pow(x2 - x1, 2.0) + pow(y2 - y1, 2.0))
    
    if d &amp;gt; (r1 + r2) { // Case 1
        answer = 0
    }
    else if d == (r1 + r2) { // Case 2
        answer = 1
    }
    
    else {
        if r1 &amp;lt; r2 { // 가정이 r1&amp;gt;=r2이기 때문에, 맞춰주기 위해서 swap.
            swap(&amp;amp;r1, &amp;amp;r2)
        }
        
        if ((r1 - r2) &amp;lt; d) &amp;amp;&amp;amp; (d &amp;lt; (r1 + r2)) { // Case 3
            answer = 2
        }
        else if d != 0 &amp;amp;&amp;amp; d == (r1 - r2) { // Case 4
            answer = 1
        }
        else if d != 0 &amp;amp;&amp;amp; d &amp;lt; (r1 - r2) { // Case 5
            answer = 0
        }
        else if r1 == r2 &amp;amp;&amp;amp; d == 0 { // Case 6
            answer = -1
        }
        else if r1 != r2 &amp;amp;&amp;amp; d == 0 { // Case 7
            answer = 0
        }
    }
        
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10872번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10872번
let N = Int(readLine()!)!
var answer: Int = 1

if N != 0 {
    for i in 1...N {
        answer *= i
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 10989번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10989번 (참고 : https://blog.naver.com/PostView.nhn?blogId=gustn3964&amp;amp;logNo=222257475333)
import Foundation

// 라이노님의 FileIO 클래스
final class FileIO {
    private var buffer:[UInt8]
    private var index: Int

    init(fileHandle: FileHandle = FileHandle.standardInput) {
        buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // 인덱스 범위 넘어가는 것 방지
        index = 0
    }

    @inline(__always) private func read() -&amp;gt; UInt8 {
        defer { index += 1 }

        return buffer.withUnsafeBufferPointer { $0[index] }
    }

    @inline(__always) func readInt() -&amp;gt; Int {
        var sum = 0
        var now = read()
        var isPositive = true

        while now == 10
            || now == 32 { now = read() } // 공백과 줄바꿈 무시
        if now == 45{ isPositive.toggle(); now = read() } // 음수 처리
        while now &amp;gt;= 48, now &amp;lt;= 57 {
            sum = sum * 10 + Int(now-48)
            now = read()
        }

        return sum * (isPositive ? 1:-1)
    }

    @inline(__always) func readString() -&amp;gt; String {
        var str = &quot;&quot;
        var now = read()

        while now == 10
            || now == 32 { now = read() } // 공백과 줄바꿈 무시

        while now != 10
            &amp;amp;&amp;amp; now != 32 &amp;amp;&amp;amp; now != 0 {
                str += String(bytes: [now], encoding: .ascii)!
                now = read()
        }

        return str
    }
}

let file = FileIO()

let N = file.readInt()
var dp = Array(repeating: 0, count: 10001)
for _ in 0..&amp;lt;N {
    let q = file.readInt()
    dp[q] += 1
}

var answer = &quot;&quot;
for i in 1...10000 {
    answer += String(repeating: &quot;\(i)\n&quot;, count: dp[i])
}
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2798번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조합(Combination) 구현 : &lt;a href=&quot;https://developer-p.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/145&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646725618584&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;스위프트 | &amp;quot;순열과 조합 구현&amp;quot;하기 (Swift5 | Permutation, Combination)&quot; data-og-description=&quot;백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다. 파이썬에는 간단한 순열 &amp;amp; 조합이 스위프트엔 없다는 것이죠. 스위프트를 공부한 지 얼마 되지 않은 상황에서, 파이썬에선 기본함수인 &quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/145&quot; data-og-url=&quot;https://developer-p.tistory.com/145&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhXthp/hyNEstALw1/mMy4jJTXPkCOXnBojcBa0k/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/Y3GtX/hyNEteYUIZ/pWi7nKuuhT2bkslZkEHxwk/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/cJSRDT/hyNEiqWQxl/J82FzxFj0H8vJMkX09oKS1/img.png?width=1170&amp;amp;height=978&amp;amp;face=58_489_98_532&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/145&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/145&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhXthp/hyNEstALw1/mMy4jJTXPkCOXnBojcBa0k/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/Y3GtX/hyNEteYUIZ/pWi7nKuuhT2bkslZkEHxwk/img.png?width=800&amp;amp;height=668&amp;amp;face=0_0_800_668,https://scrap.kakaocdn.net/dn/cJSRDT/hyNEiqWQxl/J82FzxFj0H8vJMkX09oKS1/img.png?width=1170&amp;amp;height=978&amp;amp;face=58_489_98_532');&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;스위프트 | &quot;순열과 조합 구현&quot;하기 (Swift5 | Permutation, Combination)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 10974번을 스위프트로 풀면서 난관에 봉착했습니다. 파이썬에는 간단한 순열 &amp;amp; 조합이 스위프트엔 없다는 것이죠. 스위프트를 공부한 지 얼마 되지 않은 상황에서, 파이썬에선 기본함수인&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2798번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

let cards = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)

func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var result = [[Int]]()
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            result.append(nowCombi)
            return
        }
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    
    combination(0, [])
    
    return result
}

// 3&quot;H&quot;N(3+N-1&quot;C&quot;N) &amp;lt;= M
var sumArray: [Int] = []
for numArray in combi(cards, 3) {
    let sum = numArray.reduce(0, +)
    if sum &amp;lt;= M {
        sumArray.append(sum)
    }
}

print(sumArray.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 2231번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2231번
let N = Int(readLine()!)!
var answerArray: [Int] = []

for num in stride(from: N-1, to: 0, by: -1) {
    let numStr = String(num).map{String($0)}
    let numArray = numStr.map{Int(String($0))!}
    
    let sum = num + numArray.reduce(0, +)
    
    if sum == N {
        answerArray.append(num)
    }
    
}

if answerArray.isEmpty {
    print(&quot;0&quot;)
}
else {
    print(answerArray.min()!)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 7568번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 7568번
let N = Int(readLine()!)!
var person: [[Int]] = []
var rank = Array(repeating: 0, count: N) // 순위 배열

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    person.append(input)
    
}

for i in 0..&amp;lt;N {
    var rankCount: Int = 0
    
    for j in 0..&amp;lt;N {
        if (person[i].first! &amp;lt; person[j].first!) { // 몸무게
            if (person[i].last! &amp;lt; person[j].last!) { // 키까지 작으면 랭킹 뒤로 밀림.
                rankCount += 1 // 나보다 큰 애가 몇명인지 카운트.
            }
        }
    }
    
    rank[i] = rankCount + 1
}


for num in rank {
    print(num, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1436번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1436번
let N = Int(readLine()!)!
var num: Int = 665
var count: Int = 0

while true {
    let numArray = String(num).map{Int(String($0))!}
    
    for i in 0...numArray.count-3 {
        if numArray[i] == 6 {
            if numArray[i+1] == 6 {
                if numArray[i+2] == 6 {
                    count += 1
                    break
                }
            }
        }
    }
    
    if count == N {
        break
    }
    
    num += 1
}

print(num)&lt;/code&gt;&lt;/pre&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;백준 Swift 2750번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2750번
let N = Int(readLine()!)!
var numArray: [Int] = []

for _ in 0..&amp;lt;N {
    numArray.append(Int(readLine()!)!)
}

numArray.sort(by: &amp;lt;)

for num in numArray {
    print(num)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2751번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2751번
let N = Int(readLine()!)!
var numArray: [Int] = []

for _ in 0..&amp;lt;N {
    numArray.append(Int(readLine()!)!)
}

numArray.sort(by: &amp;lt;)

for num in numArray {
    print(num)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10974번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10974번
let N = Int(readLine()!)!

func permute(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] { // 순열
    var results = [[Int]]()
    var visited = Array(repeating: false, count: nums.count)
    
    func permutation(_ nowPermute: [Int]) {
        if nowPermute.count == targetNum {
            results.append(nowPermute)
            return
        }
        for i in 0..&amp;lt;nums.count {
            if visited[i] == false {
                visited[i] = true
                permutation(nowPermute + [nums[i]])
                visited[i] = false
            }
        }
    }
    permutation([])
    return results
}

//func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] { // 조합
//    var results = [[Int]]()
//
//    func combination(_ index: Int, _ nowCombi: [Int]) {
//        if nowCombi.count == targetNum {
//            results.append(nowCombi)
//            return
//        }
//        for i in index..&amp;lt;nums.count {
//            combination(i + 1, nowCombi + [nums[i]])
//        }
//    }
//
//    combination(0, [])
//    return results
//}

var nums: [Int] = []
for num in 1...N {
    nums.append(num)
}

for numArray in permute(nums, nums.count) {
    for num in numArray {
        print(num, terminator: &quot; &quot;)
    }
    print()
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2503번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2503번(참고 : https://kongpowder.tistory.com/50)
let N = Int(readLine()!)!

func permute(_ nums: [String], _ targetNum: Int) -&amp;gt; [[String]] {
    var results = [[String]]()
    var visited = Array(repeating: false, count: nums.count)
    
    func permutation(_ nowPermute: [String]) {
        if nowPermute.count == targetNum {
            results.append(nowPermute)
            return
        }
        for i in 0..&amp;lt;nums.count {
            if visited[i] == false {
                visited[i] = true
                permutation(nowPermute + [nums[i]])
                visited[i] = false
            }
        }
    }
    permutation([])
    return results
}

var nums = permute([&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;], 3)
var deleteNums: [[String]] = []
//nums.remove(at: nums.firstIndex(of: [&quot;1&quot;, &quot;2&quot;, &quot;3&quot;])!)

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (num, strike, ball) = (String(input[0]).map{String($0)}, input[1], input[2])

    for i in 0..&amp;lt;nums.count {
        var strikeCount: Int = 0
        var ballCount: Int = 0

        for j in 0..&amp;lt;3 {
            if nums[i][j] == num[j] {
                strikeCount += 1
            }
            else if nums[i].contains(num[j]) {
                ballCount += 1
            }
        }

        if (strike != strikeCount) || (ball != ballCount) {
            deleteNums.append(nums[i])
        }
        
    }

}

deleteNums = Array(Set(deleteNums)) // 지울 배열들의 중복 제거

for delete in deleteNums {
    nums.remove(at: nums.firstIndex(of: delete)!)
}

print(nums.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 1182번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1182번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, S) = (input[0], input[1])

let numArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var results = [[Int]]()
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            results.append(nowCombi)
            return
        }
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    
    combination(0, [])
    return results
}

var sumArray: [Int] = []
for i in 1...N {
    
    for arr in combi(numArray, i) {
        sumArray.append(arr.reduce(0, +))
    }
    
}

let answer = sumArray.filter{$0 == S}.count
print(answer)&lt;/code&gt;&lt;/pre&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;b&gt;DAY16 인증완료&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;2040&quot; data-origin-height=&quot;1842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHhfx2/btrvH0jjPdg/9h8MbVyHZfmaUdRim1Umxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHhfx2/btrvH0jjPdg/9h8MbVyHZfmaUdRim1Umxk/img.png&quot; data-alt=&quot;DAY16 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHhfx2/btrvH0jjPdg/9h8MbVyHZfmaUdRim1Umxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHhfx2%2FbtrvH0jjPdg%2F9h8MbVyHZfmaUdRim1Umxk%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;400&quot; height=&quot;361&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;1842&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY16 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 브론즈</category>
      <category>백준 실버</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 문제풀이</category>
      <category>스위프트 브론즈</category>
      <category>스위프트 실버</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/187</guid>
      <comments>https://developer-p.tistory.com/187#entry187comment</comments>
      <pubDate>Tue, 8 Mar 2022 17:42:54 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY15</title>
      <link>https://developer-p.tistory.com/186</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;오늘은 참여한지 15일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646621661848&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cuTkR7/hyNC6dMtpb/uY6yUcfTHqsBgOgkIAK1xk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bmTeb9/hyNC0R9CR1/kEtXGo2Fk6cH753YOlAiLK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bgE7Oj/hyNCYUlpkp/FkiqQogrHjITTJnMVINuzk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cuTkR7/hyNC6dMtpb/uY6yUcfTHqsBgOgkIAK1xk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bmTeb9/hyNC0R9CR1/kEtXGo2Fk6cH753YOlAiLK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bgE7Oj/hyNCYUlpkp/FkiqQogrHjITTJnMVINuzk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646621675460&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bNj4uy/hyNC9hmJnK/z9faWLdomzSpggHEJQKwh1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bNj4uy/hyNC9hmJnK/z9faWLdomzSpggHEJQKwh1/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 15&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220307 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 그리디&amp;nbsp;알고리즘&amp;nbsp;문제를&amp;nbsp;더&amp;nbsp;풀어봐야겠다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;964&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/32Hy6/btrvl8U8NqR/ACNCg97kv8ZWRTtNV17nkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/32Hy6/btrvl8U8NqR/ACNCg97kv8ZWRTtNV17nkk/img.png&quot; data-alt=&quot;220307 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/32Hy6/btrvl8U8NqR/ACNCg97kv8ZWRTtNV17nkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F32Hy6%2Fbtrvl8U8NqR%2FACNCg97kv8ZWRTtNV17nkk%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;400&quot; height=&quot;152&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220307 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 8710번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 8710번
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
let(k, w, m) = (input[0], input[1], input[2])
var count: Int = Int(ceil((w - k) / m))

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 14471번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14471번
let JOI = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (JOI[0], JOI[1]) // 2N개의 칸, M장의 카드

var wins: [Int] = [] // 당첨 도장 모음
var loses: [Int] = [] // 꽝 도장 모음
var answer: Int = 0

for _ in 0..&amp;lt;M {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    wins.append(input[0])
    loses.append(input[1])
}

wins.sort(by: &amp;gt;) // 내림차순으로 정렬해야 최솟값을 구할 수 있음.
var count = wins.filter{$0 &amp;gt;= N}.count // 기존 입력받은 것들 중, 돈을 내지 않아도 이미 상품수령조건을 만족하는 카드들의 개수.

if count &amp;gt;= M - 1 { // 이미 M-1개 이상의 경품을 얻을 수 있으면,
    answer = 0
}
else {
    for i in count..&amp;lt;wins.count {
        answer += N - wins[i] // 경품 1개 더 얻기 위해 필요한 금액.
        count += 1 // 경품 1개 추가
        
        if count &amp;gt;= M - 1 {
            break
        }
    }
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 14487번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14487번
let n = Int(readLine()!)!
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let answer = input.reduce(0, +) - input.max()!

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 14659번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14659번
let N = Int(readLine()!)!
let mountain = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var killArray: [Int] = []

for i in 0..&amp;lt;N {
    var kill: Int = 0 // 킬 수
    let standard: Int = mountain[i] // 기준 봉우리

    if i == N - 1 { // 마지막 봉우리일 땐,
        killArray.append(0) // 0킬
        break
    }
    else {
        for j in i+1..&amp;lt;N {
            if mountain[j] &amp;gt; standard { // (기준 봉우리보다) 다음 봉우리가 더 높으면 끝.
                break
            }
            kill += 1 // 다음 봉우리가 더 높지 않으면,
        }
        killArray.append(kill)
    }
}

print(killArray.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 16756번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16756번
let N = Int(readLine()!)!
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var minArray: [Int] = []

for i in 0..&amp;lt;N-1 {
    minArray.append(abs(input[i + 1] - input[i]))
}

print(minArray.min()!)&lt;/code&gt;&lt;/pre&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;b&gt;DAY15 인증완료&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;1960&quot; data-origin-height=&quot;1840&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N8wLp/btrvvDUIhUD/483AXqAXQKIyyQ0vvy9nJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N8wLp/btrvvDUIhUD/483AXqAXQKIyyQ0vvy9nJ1/img.png&quot; data-alt=&quot;DAY15 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N8wLp/btrvvDUIhUD/483AXqAXQKIyyQ0vvy9nJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN8wLp%2FbtrvvDUIhUD%2F483AXqAXQKIyyQ0vvy9nJ1%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;400&quot; height=&quot;376&quot; data-origin-width=&quot;1960&quot; data-origin-height=&quot;1840&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY15 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 백준 PS</category>
      <category>백준 Swift 문제</category>
      <category>스위프트 문제</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/186</guid>
      <comments>https://developer-p.tistory.com/186#entry186comment</comments>
      <pubDate>Mon, 7 Mar 2022 14:43:31 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY14</title>
      <link>https://developer-p.tistory.com/185</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;오늘은 참여한지 14일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646479256547&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ccNoUF/hyNBRH2xpx/AukxPqFu9kKN2JFOpuHpOK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/jLEVQ/hyNCWHHIw8/CFCUZYyxFTzbYnXD0KXuM0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/b5FW4k/hyNB23QOEy/5csmk5GkIFNpVQ5pXAvkz0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ccNoUF/hyNBRH2xpx/AukxPqFu9kKN2JFOpuHpOK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/jLEVQ/hyNCWHHIw8/CFCUZYyxFTzbYnXD0KXuM0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/b5FW4k/hyNB23QOEy/5csmk5GkIFNpVQ5pXAvkz0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646479272554&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgXI0e/hyNBQh6YGE/qmLGh9twLnvyi6AZ4GKZHk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgXI0e/hyNBQh6YGE/qmLGh9twLnvyi6AZ4GKZHk/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 14&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220306 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 그리디&amp;nbsp;유형&amp;nbsp;문제가&amp;nbsp;확실히&amp;nbsp;시간이&amp;nbsp;좀&amp;nbsp;더&amp;nbsp;걸리는&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;브론즈2&amp;nbsp;문제들도&amp;nbsp;뿌시자!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;1154&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p1eSP/btrveLFGSw1/iFcNof8dj76dijXU2oseH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p1eSP/btrveLFGSw1/iFcNof8dj76dijXU2oseH0/img.png&quot; data-alt=&quot;220306 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p1eSP/btrveLFGSw1/iFcNof8dj76dijXU2oseH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp1eSP%2FbtrveLFGSw1%2FiFcNof8dj76dijXU2oseH0%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;400&quot; height=&quot;139&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220306 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1434번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1434번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

let A = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let B = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

let aSum = A.reduce(0, +)
let bSum = B.reduce(0, +)

print(aSum - bSum)&lt;/code&gt;&lt;/pre&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;백준 Swift 2810번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2810번
import Foundation

let N = Int(readLine()!)!
var seat = readLine()!.replacingOccurrences(of: &quot;LL&quot;, with: &quot;L&quot;)

if N &amp;lt;= seat.count + 1 {
    print(N)
}
else {
    print(seat.count + 1)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2864번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2864번
import Foundation
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let maxArray = input.map{(num: String) -&amp;gt; String in
    let maxNum = num.replacingOccurrences(of: &quot;5&quot;, with: &quot;6&quot;)
    
    return maxNum
}

let minArray = input.map{(num: String) -&amp;gt; String in
    let minNum = num.replacingOccurrences(of: &quot;6&quot;, with: &quot;5&quot;)
    
    return minNum
}

let numMaxArray = maxArray.map{Int($0)!}
let numMinArray = minArray.map{Int($0)!}

let answerMax = numMaxArray.reduce(0, +)
let answerMin = numMinArray.reduce(0, +)

print(answerMin, answerMax)&lt;/code&gt;&lt;/pre&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;백준 Swift 2930번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2930번
let R = Int(readLine()!)!
let sanguen = Array(readLine()!).map{String($0)}
let N = Int(readLine()!)!
var friends: [[String]] = Array(repeating: Array(repeating: &quot;&quot;, count: R), count: N) // N행 R열

for i in 0..&amp;lt;N {
    var j: Int = 0
    let input = readLine()!.map{String($0)}
    
    for ch in input {
        friends[i][j] = ch
        j += 1
    }
    
}

var score: Int = 0

for i in 0..&amp;lt;N { // 가로로 루프 돎.
    for j in 0..&amp;lt;R {
        if (sanguen[j] == &quot;S&quot; &amp;amp;&amp;amp; friends[i][j] == &quot;P&quot;) || (sanguen[j] == &quot;P&quot; &amp;amp;&amp;amp; friends[i][j] == &quot;R&quot;) || (sanguen[j] == &quot;R&quot; &amp;amp;&amp;amp; friends[i][j] == &quot;S&quot;) { // 상근이가 이길 때,
            score += 2
        }
        else if (sanguen[j] == friends[i][j]) { // 비길 때,
            score += 1
        }
        else { // 질 때, (이 부분은 없어도 됨.)
            score += 0
        }
    }
}

print(score)

var maxScore: Int = 0

for i in 0..&amp;lt;R { // 세로로 루프 돎.
    var counting = [0, 0, 0] // S(가위), P(보), R(바위)
    for j in 0..&amp;lt;N {
        if friends[j][i] == &quot;S&quot; {
            counting[0] += 1
        }
        else if friends[j][i] == &quot;P&quot; {
            counting[1] += 1
        }
        else if friends[j][i] == &quot;R&quot; {
            counting[2] += 1
        }
    }
    
    var scoreArray: [Int] = []
    // 상근이가 S(가위)를 냈다면,
    scoreArray.append((counting[0] * 1) + (counting[1] * 2) + (counting[2] * 0))
    // 상근이가 P(보)를 냈다면,
    scoreArray.append((counting[0] * 0) + (counting[1] * 1) + (counting[2] * 2))
    // 상근이가 R(바위)를 냈다면,
    scoreArray.append((counting[0] * 2) + (counting[1] * 0) + (counting[2] * 1))
    
    maxScore += scoreArray.max()!
}

print(maxScore)&lt;/code&gt;&lt;/pre&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;백준 Swift 5585번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5585번
let N = 1000 - Int(readLine()!)!
var coinArray = Array(repeating: 0, count: 6) // 500엔, 100엔, 50엔, 10엔, 5엔, 1엔

coinArray[0] = N / 500
coinArray[1] = (N % 500) / 100
coinArray[2] = ((N % 500) % 100) / 50
coinArray[3] = (((N % 500) % 100) % 50) / 10
coinArray[4] = ((((N % 500) % 100) % 50) % 10) / 5
coinArray[5] = (((((N % 500) % 100) % 50) % 10) % 5) / 1

let sum = coinArray.reduce(0, +)

print(sum)&lt;/code&gt;&lt;/pre&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;b&gt;DAY14 인증완료&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-filename=&quot;DAY14_인증완료.png&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;1826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xpz2d/btrvhOpzPzb/MZhxBaQf1yPAJXaK1CUa2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xpz2d/btrvhOpzPzb/MZhxBaQf1yPAJXaK1CUa2K/img.png&quot; data-alt=&quot;DAY14 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xpz2d/btrvhOpzPzb/MZhxBaQf1yPAJXaK1CUa2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXpz2d%2FbtrvhOpzPzb%2FMZhxBaQf1yPAJXaK1CUa2K%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;400&quot; height=&quot;389&quot; data-filename=&quot;DAY14_인증완료.png&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;1826&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY14 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 Swift PS</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 백준</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/185</guid>
      <comments>https://developer-p.tistory.com/185#entry185comment</comments>
      <pubDate>Sun, 6 Mar 2022 15:36:28 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY13</title>
      <link>https://developer-p.tistory.com/184</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;오늘은 참여한지 13일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646313368590&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3oiTz/hyNAOEpFY7/EbKWtzF20hTKpkbRvZNaUK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/BX0XX/hyNAZ60k08/r2OMYp9WOBeZjFwjZ5reU1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dpjq7T/hyNBXsXyzE/54fugKUXEkQ0gOBPmnN5G0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3oiTz/hyNAOEpFY7/EbKWtzF20hTKpkbRvZNaUK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/BX0XX/hyNAZ60k08/r2OMYp9WOBeZjFwjZ5reU1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dpjq7T/hyNBXsXyzE/54fugKUXEkQ0gOBPmnN5G0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646313386850&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AkSNs/hyNATMtYr8/GeNQ3w0fjqPM4kUVlxIIYK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AkSNs/hyNATMtYr8/GeNQ3w0fjqPM4kUVlxIIYK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 13&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220305 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; reduce나&amp;nbsp;filter&amp;nbsp;등&amp;nbsp;처음엔&amp;nbsp;어색했던&amp;nbsp;것들이,&amp;nbsp;자주&amp;nbsp;쓰다&amp;nbsp;보니&amp;nbsp;이젠&amp;nbsp;익숙해졌다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;1082&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQV76t/btrvaIbybhf/yQiTTgd21JuuthXjvk0MR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQV76t/btrvaIbybhf/yQiTTgd21JuuthXjvk0MR0/img.png&quot; data-alt=&quot;220305 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQV76t/btrvaIbybhf/yQiTTgd21JuuthXjvk0MR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQV76t%2FbtrvaIbybhf%2FyQiTTgd21JuuthXjvk0MR0%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;400&quot; height=&quot;126&quot; data-origin-width=&quot;1082&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220305 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2720번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2720번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = Int(readLine()!)!
    
    let quarter = input / 25
    let dime = (input % 25) / 10
    let nickel = ((input % 25) % 10) / 5
    let penny = (((input % 25) % 10) % 5) / 1
    
    print(quarter, dime, nickel, penny)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10162번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10162번
let T = Int(readLine()!)!

if T % 10 != 0 {
    print(&quot;-1&quot;)
}
else {
    let A = T / 300
    let B = (T % 300) / 60
    let C = ((T % 300) % 60) / 10
    
    print(A, B, C)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11034번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11034번(1)
while let input = readLine() {
    
    let numArray = input.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    let (A, B, C) = (numArray[0], numArray[1], numArray[2])
    var count: Int = 0
    
    if B - A &amp;gt; C - B { // 오른쪽에서 왼쪽으로 점프 시,
        count = B - A - 1
    }
    else if B - A &amp;lt;= C - B { // 왼쪽에서 오른쪽으로 점프 시,
        count = C - B - 1
    }

    print(count)
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 11034번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11034번(2)
while true {
    let input = readLine()
    
    if input == nil {
        break
    }
    
    let numArray = input!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    let (A, B, C) = (numArray[0], numArray[1], numArray[2])
    var count: Int = 0
    
    if B - A &amp;gt; C - B { // 오른쪽에서 왼쪽으로 점프 시,
        count = B - A - 1
    }
    else if B - A &amp;lt;= C - B { // 왼쪽에서 오른쪽으로 점프 시,
        count = C - B - 1
    }

    print(count)
        
}&lt;/code&gt;&lt;/pre&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;백준 Swift 14720번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14720번
let N = Int(readLine()!)!
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let milk = [0, 1, 2] // 딸기우유, 초코우유, 바나나우유
var j: Int = 0
var count: Int = 0


for i in 0..&amp;lt;N {
    if input[i] == milk[j] {
        if j == 2 { // milk의 끝에 도달했으면,
            j = 0 // 첫행으로 이동.
        }
        else { // milk의 끝이 아니면,
            j += 1 // 다음행으로 이동.
        }
        count += 1
    }
    
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 21420번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21420번
let N = Int(readLine()!)!
var coinArray: [Int] = []
var countNum0 = 0 // 뒷면 개수
var countNum1 = 0 // 앞면 개수

for _ in 0..&amp;lt;N {
    coinArray.append(Int(readLine()!)!)
}

countNum0 = coinArray.filter{$0 == 0}.count
countNum1 = coinArray.filter{$0 == 1}.count

print(min(countNum0, countNum1))&lt;/code&gt;&lt;/pre&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;b&gt;DAY13 인증완료&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-filename=&quot;DAY13_인증완료.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNPPL/btrvoBoJJVN/0RoSCWAziFZ41Ec7SJCuw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNPPL/btrvoBoJJVN/0RoSCWAziFZ41Ec7SJCuw0/img.png&quot; data-alt=&quot;DAY13 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNPPL/btrvoBoJJVN/0RoSCWAziFZ41Ec7SJCuw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNPPL%2FbtrvoBoJJVN%2F0RoSCWAziFZ41Ec7SJCuw0%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;400&quot; height=&quot;406&quot; data-filename=&quot;DAY13_인증완료.png&quot; data-origin-width=&quot;1812&quot; data-origin-height=&quot;1838&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY13 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 Basic Challenge</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 Swift 문제풀이</category>
      <category>스위프트 PS</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 백준</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/184</guid>
      <comments>https://developer-p.tistory.com/184#entry184comment</comments>
      <pubDate>Sat, 5 Mar 2022 14:00:13 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY12</title>
      <link>https://developer-p.tistory.com/183</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;오늘은 참여한지 12일차 입니다. 오늘의 문제들은 모두 &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;별찍기&lt;/span&gt; 관련된 문제&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646305024502&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3oiTz/hyNAOEpFY7/EbKWtzF20hTKpkbRvZNaUK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/BX0XX/hyNAZ60k08/r2OMYp9WOBeZjFwjZ5reU1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dpjq7T/hyNBXsXyzE/54fugKUXEkQ0gOBPmnN5G0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3oiTz/hyNAOEpFY7/EbKWtzF20hTKpkbRvZNaUK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/BX0XX/hyNAZ60k08/r2OMYp9WOBeZjFwjZ5reU1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dpjq7T/hyNBXsXyzE/54fugKUXEkQ0gOBPmnN5G0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646305075392&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/AkSNs/hyNATMtYr8/GeNQ3w0fjqPM4kUVlxIIYK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/AkSNs/hyNATMtYr8/GeNQ3w0fjqPM4kUVlxIIYK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 12&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220304 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; 별찍기문제는&amp;nbsp;오랜만인데,&amp;nbsp;for문을&amp;nbsp;익히기에&amp;nbsp;좋았다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAgKtC/btru1a7tTCp/bO6WAQobd3qglYwLEIuoN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAgKtC/btru1a7tTCp/bO6WAQobd3qglYwLEIuoN1/img.png&quot; data-alt=&quot;220304 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAgKtC/btru1a7tTCp/bO6WAQobd3qglYwLEIuoN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAgKtC%2Fbtru1a7tTCp%2FbO6WAQobd3qglYwLEIuoN1%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;400&quot; height=&quot;183&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220304 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2438번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2438번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    for _ in 0...i {
        print(&quot;*&quot;, terminator: &quot;&quot;)
    }
    print()
}&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2439번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2439번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    
    for _ in stride(from: N-i, to: 1, by: -1) {
        print(&quot; &quot;, terminator: &quot;&quot;)
    }
    
    for _ in 0...i {
        print(&quot;*&quot;, terminator: &quot;&quot;)
    }
    
    print()
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2440번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2440번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    var answer = &quot;&quot;
    for _ in stride(from: N, to: i, by: -1) {
        answer += &quot;*&quot;
    }

    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2441번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2441번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    var answer = &quot;&quot;
    
    for _ in 0..&amp;lt;i {
        answer += &quot; &quot;
    }
    
    for _ in stride(from: N, to: i, by: -1) {
        answer += &quot;*&quot;
    }
    
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2442번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2442번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    var answer = &quot;&quot;
    
    for _ in stride(from: N - 1, to: i, by: -1) {
        answer += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;(2 * i + 1) {
        answer += &quot;*&quot;
    }
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2443번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2443번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    var answer = &quot;&quot;
    
    for _ in 0..&amp;lt;i {
        answer += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;(2 * N) - (2*i + 1) {
        answer += &quot;*&quot;
    }
    
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2444번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2444번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N { // 위쪽 5칸
    var answer = &quot;&quot;
    
    for _ in stride(from: N-i-1, to: 0, by: -1) {
        answer += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;2 * i + 1 {
        answer += &quot;*&quot;
    }
    
    print(answer)
}

for i in 0..&amp;lt;N-1 { // 아래쪽 4칸
    var temp = &quot;&quot;
    
    for _ in 0...i {
        temp += &quot; &quot;
    }
    
    for _ in stride(from: 2*(N-1)-2*i-1, to: 0, by: -1) {
        temp += &quot;*&quot;
    }
    
    print(temp)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2445번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2445번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N { // 윗쪽 5줄
    var answer = &quot;&quot;
    
    for _ in 0...i {
        answer += &quot;*&quot;
    }
    
    for _ in 0..&amp;lt;2*(N-i-1) {
        answer += &quot; &quot;
    }
    
    for _ in 0...i {
        answer += &quot;*&quot;
    }

    print(answer)
}

for i in 0..&amp;lt;N-1 { // 아래쪽 4줄
    var temp = &quot;&quot;
    
    for _ in 0..&amp;lt;N-i-1 {
        temp += &quot;*&quot;
    }
    
    for _ in 0..&amp;lt;2*(i+1) {
        temp += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;N-i-1 {
        temp += &quot;*&quot;
    }
    
    print(temp)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2446번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2446번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N { // 위쪽 5줄
    var answer = &quot;&quot;
    
    for _ in 0..&amp;lt;i {
        answer += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;2*(N-i)-1 {
        answer += &quot;*&quot;
    }
    
    print(answer)
}

for i in 0..&amp;lt;N-1 { // 아래쪽 4줄
    var answer = &quot;&quot;
    
    for _ in stride(from: N-2, to: i, by: -1) {
        answer += &quot; &quot;
    }
    
    for _ in 0..&amp;lt;2 * (i + 1) + 1 {
        answer += &quot;*&quot;
    }
    
    print(answer)
}&lt;/code&gt;&lt;/pre&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;b&gt;DAY12 인증완료&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-filename=&quot;DAY12_인증완료.png&quot; data-origin-width=&quot;1740&quot; data-origin-height=&quot;1844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLODn4/btrvhmy2IOQ/9jPwjL8kr1IlzlfSKcCHEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLODn4/btrvhmy2IOQ/9jPwjL8kr1IlzlfSKcCHEk/img.png&quot; data-alt=&quot;DAY12 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLODn4/btrvhmy2IOQ/9jPwjL8kr1IlzlfSKcCHEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLODn4%2Fbtrvhmy2IOQ%2F9jPwjL8kr1IlzlfSKcCHEk%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;400&quot; height=&quot;424&quot; data-filename=&quot;DAY12_인증완료.png&quot; data-origin-width=&quot;1740&quot; data-origin-height=&quot;1844&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY12 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>Swift 별 찍기</category>
      <category>백준 Swift PS</category>
      <category>백준 Swift 문제풀이</category>
      <category>별찍기</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 백준</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/183</guid>
      <comments>https://developer-p.tistory.com/183#entry183comment</comments>
      <pubDate>Fri, 4 Mar 2022 14:00:33 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY11</title>
      <link>https://developer-p.tistory.com/182</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;오늘은 참여한지 11일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646224281337&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BoeBv/hyNAUwzpD2/WBWZ6zEIEM0IWjM4emKw0k/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dru5IN/hyNASMhyO5/wyxtqQgRtOZj1vm7VFkBw0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eFcYj/hyNANqFUcj/wYG8L91ZiMUAqC0KY30UM0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BoeBv/hyNAUwzpD2/WBWZ6zEIEM0IWjM4emKw0k/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dru5IN/hyNASMhyO5/wyxtqQgRtOZj1vm7VFkBw0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eFcYj/hyNANqFUcj/wYG8L91ZiMUAqC0KY30UM0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646224296862&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 11&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220303 공부 일지 :&lt;span&gt;&lt;span&gt;&lt;span&gt; 매일매일&amp;nbsp;푸는&amp;nbsp;덕분에,&amp;nbsp;자주&amp;nbsp;쓰이는&amp;nbsp;문법은&amp;nbsp;충분히&amp;nbsp;익힌&amp;nbsp;것&amp;nbsp;같다.&lt;/span&gt;&lt;/span&gt;&lt;/span&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;932&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUeM7w/btruQraIyde/DXUJP0lg9pTtuZ4Tx1eHj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUeM7w/btruQraIyde/DXUJP0lg9pTtuZ4Tx1eHj1/img.png&quot; data-alt=&quot;220303 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUeM7w/btruQraIyde/DXUJP0lg9pTtuZ4Tx1eHj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUeM7w%2FbtruQraIyde%2FDXUJP0lg9pTtuZ4Tx1eHj1%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;400&quot; height=&quot;185&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220303 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 17009번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17009번
var appleScore: [Int] = []
var bananaScore: [Int] = []

for _ in 0..&amp;lt;3 {
    appleScore.append(Int(readLine()!)!)
}
for _ in 0..&amp;lt;3 {
    bananaScore.append(Int(readLine()!)!)
}

let appleSum = (appleScore[0] * 3) + (appleScore[1] * 2) + appleScore[2]
let bananaSum = (bananaScore[0] * 3) + (bananaScore[1] * 2) + bananaScore[2]

if appleSum &amp;gt; bananaSum {
    print(&quot;A&quot;)
}
else if appleSum &amp;lt; bananaSum {
    print(&quot;B&quot;)
}
else {
    print(&quot;T&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11282번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글링을 통해 해결했다. 44032부터 &quot;가&quot; 라고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11282번
let N = Int(readLine()!)!
print(UnicodeScalar(44031 + N)!)&lt;/code&gt;&lt;/pre&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;백준 Swift 16199번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16199번
let bornYear = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let standardYear = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}


let yearLaw: Int = standardYear[0] - bornYear[0] // 연 나이
let yearKorea: Int = 1 + yearLaw // 세는 나이
var yearGlobal: Int = 0 // 만 나이

if standardYear[0] &amp;gt; bornYear[0] { // 년 지났을 때,
    if standardYear[1] &amp;gt; bornYear[1] { // 월 지났을 때,
        yearGlobal = standardYear[0] - bornYear[0]
    }
    else if standardYear[1] &amp;lt; bornYear[1] { // 월 안 지났을 때,
        yearGlobal = standardYear[0] - bornYear[0] - 1
    }
    else { // 월 같을 때,
        if standardYear[2] &amp;gt;= bornYear[2] { // 일 같거나 지났을 때,
            yearGlobal = standardYear[0] - bornYear[0]
        }
        else { // 일 안 지났으면,
            yearGlobal = standardYear[0] - bornYear[0] - 1
        }
    }
}
else { // 연도가 같으면,
    yearGlobal = 0 // 만 나이는 0살
}

print(yearGlobal)
print(yearKorea)
print(yearLaw)&lt;/code&gt;&lt;/pre&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;백준 Swift 1212번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1212번 (참고 : https://didu-story.tistory.com/210)
let N = readLine()!.map{Int(String($0))!}

for i in 0..&amp;lt;N.count {
    var num = N[i]
    var answer = &quot;&quot;

    if num == 0 {
        answer += &quot;0&quot;
    }
    else {
        while num != 1 {
            answer += String(num % 2)
            num /= 2
        }
        answer += &quot;1&quot; // 2진수로 변경 시, 역순 시 가장 첫부분은 1이 돼야 해서 1 붙여줌.
    }

    if i &amp;gt; 0 &amp;amp;&amp;amp; answer.count == 1 { // 첫번째가 아니고, 한자리라면 2자리 더 채워줌.
        answer += &quot;00&quot;
    }
    else if i &amp;gt; 0 &amp;amp;&amp;amp; answer.count == 2 { // 첫번째가 아니고, 두자리라면 1자리 더 채워줌.
        answer += &quot;0&quot;
    }

    print(String(answer.reversed()), terminator: &quot;&quot;)

}&lt;/code&gt;&lt;/pre&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;백준 Swift 2754번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2754번
let score: [String: Double] = [&quot;A+&quot;: 4.3, &quot;A0&quot;: 4.0, &quot;A-&quot;: 3.7, &quot;B+&quot;: 3.3, &quot;B0&quot;: 3.0, &quot;B-&quot;: 2.7, &quot;C+&quot;: 2.3, &quot;C0&quot;: 2.0, &quot;C-&quot;: 1.7, &quot;D+&quot;: 1.3, &quot;D0&quot;: 1.0, &quot;D-&quot;: 0.7, &quot;F&quot;: 0.0]

let input = readLine()

print(score[input!]!)&lt;/code&gt;&lt;/pre&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;백준 Swift 3028번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3028번
let input = readLine()!.map{String($0)}
var ball = [&quot;O&quot;, &quot;X&quot;, &quot;X&quot;]

for ch in input {
    
    switch ch {
    case &quot;A&quot;:
        ball.swapAt(0, 1)
    case &quot;B&quot;:
        ball.swapAt(1, 2)
    case &quot;C&quot;:
        ball.swapAt(2, 0)
    default:
        print(&quot;default는 없음.&quot;)
    }
    
}

for (index, ch) in ball.enumerated() {
    if ch == &quot;O&quot; {
        print(index + 1)
        break
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3029번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3029번
import Foundation
let timeNow = readLine()!.split(separator: &quot;:&quot;).map{Int(String($0))!} // 현재 시간
let (nowH, nowM, nowS) = (timeNow[0], timeNow[1], timeNow[2])
let timeThrow = readLine()!.split(separator: &quot;:&quot;).map{Int(String($0))!} // 던질 시간
var (throwH, throwM, throwS) = (timeThrow[0], timeThrow[1], timeThrow[2])

var totalTime: Int = 0

if (throwH == nowH) &amp;amp;&amp;amp; (throwM == nowM) &amp;amp;&amp;amp; (throwS == nowS) { // 시각이 같다면, 최대 24시간 기다림.
    print(&quot;24:00:00&quot;)
}
else {
    
    if throwH &amp;lt; nowH {
        throwH += 24
    }
    
    totalTime = ((throwH - nowH) * 3600) + ((throwM - nowM) * 60) + (throwS - nowS)
    
    let answerH = totalTime / 3600
    let answerM = (totalTime % 3600) / 60
    let answerS = (totalTime % 3600) % 60
    
    print(&quot;\(String(format: &quot;%02d&quot;, answerH)):\(String(format: &quot;%02d&quot;, answerM)):\(String(format: &quot;%02d&quot;, answerS))&quot;)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11718번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11718번
while true {
    let input = readLine()
    
    if input == nil {
        break
    }
    else {
        print(input!)
    }
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 16316번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16316번
let n = Int(readLine()!)!
var input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
var answerArray: [String] = []

for i in 0..&amp;lt;n {
    answerArray.append(String(i + 1))
}

for (index, ch) in input.enumerated() {
    if ch == &quot;mumble&quot; {
        input[index] = String(index + 1)
    }
}

if input == answerArray {
    print(&quot;makes sense&quot;)
}
else {
    print(&quot;something is fishy&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 16408번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16408번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
var countArray = Array(repeating: 0, count: 13)
let temp = [&quot;A&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;T&quot;, &quot;J&quot;, &quot;Q&quot;, &quot;K&quot;]

for chFirst in input {
    
    let first: String = String(chFirst.first!)
    
    for (index, ch) in temp.enumerated() {
        if ch == first {
            countArray[index] += 1
        }
    }
    
}

print(countArray.max()!)&lt;/code&gt;&lt;/pre&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;b&gt;DAY11 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;DAY11_인증완료.png&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qOYmK/btrvngFoxU0/wBMyniGQiGc0FiKoXtknHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qOYmK/btrvngFoxU0/wBMyniGQiGc0FiKoXtknHk/img.png&quot; data-alt=&quot;DAY11 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qOYmK/btrvngFoxU0/wBMyniGQiGc0FiKoXtknHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqOYmK%2FbtrvngFoxU0%2FwBMyniGQiGc0FiKoXtknHk%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;400&quot; height=&quot;440&quot; data-filename=&quot;DAY11_인증완료.png&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;1842&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY11 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 백준 문제</category>
      <category>swift 백준 풀이</category>
      <category>스위프트 백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/182</guid>
      <comments>https://developer-p.tistory.com/182#entry182comment</comments>
      <pubDate>Thu, 3 Mar 2022 14:00:37 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY10</title>
      <link>https://developer-p.tistory.com/181</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;오늘은 참여한지 10일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일 Basic 챌린지에 대한 상세한 내용&lt;/b&gt;은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646200931549&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BoeBv/hyNAUwzpD2/WBWZ6zEIEM0IWjM4emKw0k/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dru5IN/hyNASMhyO5/wyxtqQgRtOZj1vm7VFkBw0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eFcYj/hyNANqFUcj/wYG8L91ZiMUAqC0KY30UM0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BoeBv/hyNAUwzpD2/WBWZ6zEIEM0IWjM4emKw0k/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/dru5IN/hyNASMhyO5/wyxtqQgRtOZj1vm7VFkBw0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eFcYj/hyNANqFUcj/wYG8L91ZiMUAqC0KY30UM0/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt; &lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646223325458&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 10&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220302 공부 일지 :&lt;span&gt;&lt;span&gt; 어렵진&amp;nbsp;않은데&amp;nbsp;아직&amp;nbsp;문제&amp;nbsp;푸는&amp;nbsp;속도가&amp;nbsp;느린&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;더&amp;nbsp;빠르고&amp;nbsp;정확해질&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;노력해야겠다.&lt;/span&gt;&lt;/span&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;1300&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnUHFv/btruXTJ08mV/lHymqEFVuwZ8vqQLVj3Zp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnUHFv/btruXTJ08mV/lHymqEFVuwZ8vqQLVj3Zp0/img.png&quot; data-alt=&quot;220302 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnUHFv/btruXTJ08mV/lHymqEFVuwZ8vqQLVj3Zp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnUHFv%2FbtruXTJ08mV%2FlHymqEFVuwZ8vqQLVj3Zp0%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;400&quot; height=&quot;151&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220302 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 17388번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17388번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let sum = input.reduce(0, +)

if sum &amp;gt;= 100 {
    print(&quot;OK&quot;)
}
else {
    let index = input.firstIndex(of: input.min()!)
    switch index {
    case 0:
        print(&quot;Soongsil&quot;)
    case 1:
        print(&quot;Korea&quot;)
    case 2:
        print(&quot;Hanyang&quot;)
    default:
        print(&quot;default 없음.&quot;)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 13866번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 13866번
var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.sorted(by: &amp;lt;)
let sum1: Int = input[0] + input[3]
let sum2: Int = input[1] + input[2]

print(abs(sum1 - sum2))&lt;/code&gt;&lt;/pre&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;백준 Swift 5893번(런타임 오류)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5893번(런타임 오류)
let N = readLine()!
var dec = Int(N, radix: 2)! // 2진수 -&amp;gt; 10진수
dec *= 17

var answer = String(dec, radix: 2) // 10진수 -&amp;gt; 2진수
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 16431번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16431번
let bessie = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (bessieX, bessieY) = (bessie[0], bessie[1])
let daisy = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (daisyX, daisyY) = (daisy[0], daisy[1])
let john = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (johnX, johnY) = (john[0], john[1])

var countBessie: Int = max(abs(johnX - bessieX), abs(johnY - bessieY))
var countDaisy: Int = abs(johnX - daisyX) + abs(johnY - daisyY)

if countBessie &amp;gt; countDaisy {
    print(&quot;daisy&quot;)
}
else if countBessie &amp;lt; countDaisy {
    print(&quot;bessie&quot;)
}
else {
    print(&quot;tie&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 14470번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14470번
let A = Int(readLine()!)!
let B = Int(readLine()!)!
let C = Int(readLine()!)!
let D = Int(readLine()!)!
let E = Int(readLine()!)!

var time: Int = 0

if A &amp;lt; 0 { // 고기가 얼어 있다면,
    time += D + (abs(A) * C) + (B * E) // 해동 + 0도까지 올리는 데 걸리는 시간 + 목표 온도(B도)까지 올리는 데 걸리는 시간.
}
else { // 고기가 녹아 있다면,
    time += (B - A) * E // 목표 온도(B도)까지 올리는 데 걸리는 시간.
}

print(time)&lt;/code&gt;&lt;/pre&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;백준 Swift 19944번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 19944번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

if M == 1 || M == 2 {
    print(&quot;NEWBIE!&quot;)
}
else if M &amp;lt;= N {
    print(&quot;OLDBIE!&quot;)
}
else {
    print(&quot;TLE!&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 14935번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14935번
let x = readLine()!.map{Int(String($0))!}
// NFA일 때는 없으니,
print(&quot;FA&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 11549번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11549번
let T = Int(readLine()!)!
let answer = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.filter{$0 == T}.count

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 16204번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16204번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M, K) = (input[0], input[1], input[2])

let countO = min(M, K)
let countX = min(N - M, N - K)

print(countO + countX)&lt;/code&gt;&lt;/pre&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;백준 Swift 14623번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14623번
let B1 = readLine()!
let B2 = readLine()!
let decB1 = Int(B1, radix: 2)!
let decB2 = Int(B2, radix: 2)!

let temp = decB1 * decB2
let answer = String(temp, radix: 2)
print(answer)&lt;/code&gt;&lt;/pre&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;b&gt;DAY10 인증완료&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-filename=&quot;DAY10_인증완료.png&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;1836&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uqzxH/btru1aZHFHE/0Tg5ngKmBR0E2sN7yKrkQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uqzxH/btru1aZHFHE/0Tg5ngKmBR0E2sN7yKrkQ0/img.png&quot; data-alt=&quot;DAY10 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uqzxH/btru1aZHFHE/0Tg5ngKmBR0E2sN7yKrkQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuqzxH%2Fbtru1aZHFHE%2F0Tg5ngKmBR0E2sN7yKrkQ0%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;400&quot; height=&quot;461&quot; data-filename=&quot;DAY10_인증완료.png&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;1836&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY10 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>Swift 백준 문제</category>
      <category>스위프트 문제</category>
      <category>스위프트 문제풀이</category>
      <category>스위프트 알고리즘</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/181</guid>
      <comments>https://developer-p.tistory.com/181#entry181comment</comments>
      <pubDate>Wed, 2 Mar 2022 15:04:15 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY9</title>
      <link>https://developer-p.tistory.com/180</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;오늘은 참여한지 9일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646119504310&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfiinU/hyNzTSVzTG/LzvmD6KpKcKXY7z1IVrkNk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/cMXqJK/hyNzNSHFMs/kO5i6c3qBezmnx6NteWbNk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfiinU/hyNzTSVzTG/LzvmD6KpKcKXY7z1IVrkNk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/cMXqJK/hyNzNSHFMs/kO5i6c3qBezmnx6NteWbNk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 9&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220301 공부 일지 :&lt;span&gt; reduce,&amp;nbsp;filter에&amp;nbsp;어느정도&amp;nbsp;적응이&amp;nbsp;되는&amp;nbsp;거&amp;nbsp;같다.&amp;nbsp;더&amp;nbsp;연습해야겠다.&lt;/span&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;954&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KBsGo/btruLsNxkcT/uNpzdl4T6AgWWEGKxftCjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KBsGo/btruLsNxkcT/uNpzdl4T6AgWWEGKxftCjk/img.png&quot; data-alt=&quot;220301 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KBsGo/btruLsNxkcT/uNpzdl4T6AgWWEGKxftCjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKBsGo%2FbtruLsNxkcT%2FuNpzdl4T6AgWWEGKxftCjk%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;400&quot; height=&quot;193&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220301 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2420번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2420번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

var answer = abs(N - M)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 10101번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10101번
var angle: [Int] = []
var sum = 0

for _ in 0..&amp;lt;3 {
    angle.append(Int(readLine()!)!)
}

//sum = angle.reduce(0) { (num1: Int, num2: Int) -&amp;gt; Int in
//    return num1 + num2
//}
sum = angle.reduce(0, +)

if sum != 180 {
    print(&quot;Error&quot;)
}
else {
    let temp = angle.filter{$0 == 60}.count
    if temp == 3 {
        print(&quot;Equilateral&quot;)
    }
    else {
        if (angle[0] == angle[1]) || (angle[0] == angle[2]) || (angle[1] == angle[2]){
            print(&quot;Isosceles&quot;)
        }
        else {
            print(&quot;Scalene&quot;)
        }
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5596번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5596번
let S = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.reduce(0, +)
let T = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}.reduce(0, +)

if S &amp;gt;= T {
    print(S)
}
else {
    print(T)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 15680번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15680번
let N = Int(readLine()!)!

N == 0 ? print(&quot;YONSEI&quot;) : print(&quot;Leading the Way to the Future&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 11943번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11943번
let basket1 = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (A, B) = (basket1[0], basket1[1])

let basket2 = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (C, D) = (basket2[0], basket2[1])

var answer: [Int] = []

// (basket1: 사과, basket2: 오렌지)일 때
answer.append(C + B)

// (basket1: 오렌지, basket2: 사과)일 때
answer.append(A + D)

print(answer.min()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 15963번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15963번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (N, M) = (input[0], input[1])

if N == M {
    print(&quot;1&quot;)
}
else {
    print(&quot;0&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10768번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10768번
let month = Int(readLine()!)!
let day = Int(readLine()!)!

if month &amp;lt; 2 {
    print(&quot;Before&quot;)
}
else if month &amp;gt;= 3 {
    print(&quot;After&quot;)
}
else { // 2월일 때,
    if day &amp;lt; 18 {
        print(&quot;Before&quot;)
    }
    else if day == 18 {
        print(&quot;Special&quot;)
    }
    else {
        print(&quot;After&quot;)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5575번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5575번
for _ in 0..&amp;lt;3 {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    
    let startTime = (input[0] * 3600) + (input[1] * 60) + input[2]
    let endTime = (input[3] * 3600) + (input[4] * 60) + input[5]
    
    let workTime = endTime - startTime
    
    let hour = workTime / 3600
    let minute = (workTime % 3600) / 60
    let sec = (workTime % 3600) % 60
    
    print(&quot;\(hour) \(minute) \(sec)&quot;)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 11948번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11948번
var subjects1: [Int] = [] // (물리, 화학, 생물, 지구과학) 중 3개 선택
var subjects2: [Int] = [] // (역사, 지리) 중 1개 선택

for _ in 0..&amp;lt;4 {
    subjects1.append(Int(readLine()!)!)
}

for _ in 0..&amp;lt;2 {
    subjects2.append(Int(readLine()!)!)
}

subjects1.sort(by: &amp;gt;)
subjects2.sort(by: &amp;gt;)

subjects1.removeLast()
subjects2.removeLast()

var sum: Int = 0
sum += subjects1.reduce(0, +)
sum += subjects2.reduce(0, +)

print(sum)&lt;/code&gt;&lt;/pre&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;백준 Swift 10179번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10179번
import Foundation
let N = Int(readLine()!)!

for _ in 0..&amp;lt;N {
    let input = Double(readLine()!)!
    
    let temp = input * 0.8
    let answer = String(format: &quot;%.2f&quot;, temp)
    print(&quot;$\(answer)&quot;)
    
}&lt;/code&gt;&lt;/pre&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;b&gt;DAY9 인증완료&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-filename=&quot;DAY9_인증완료.png&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;1834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LfU9S/btru3sMjsdK/PwyXlJ5f0no6GA7oMKueR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LfU9S/btru3sMjsdK/PwyXlJ5f0no6GA7oMKueR0/img.png&quot; data-alt=&quot;DAY9 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LfU9S/btru3sMjsdK/PwyXlJ5f0no6GA7oMKueR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLfU9S%2Fbtru3sMjsdK%2FPwyXlJ5f0no6GA7oMKueR0%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;400&quot; height=&quot;480&quot; data-filename=&quot;DAY9_인증완료.png&quot; data-origin-width=&quot;1528&quot; data-origin-height=&quot;1834&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY9 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 Swift</category>
      <category>백준 Swift 문제풀이</category>
      <category>스위프트 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/180</guid>
      <comments>https://developer-p.tistory.com/180#entry180comment</comments>
      <pubDate>Tue, 1 Mar 2022 17:09:12 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY8</title>
      <link>https://developer-p.tistory.com/179</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;오늘은 참여한지 8일차 입니다. DAY8은 지금까지 못 풀었던 문제(&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;1212번, 2935번&lt;/span&gt;)를 다시 풀어보는 날입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646027364759&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dS0XGb/hyNxQoXvPN/oYAzvl16Tn8Znxz4tPEUrK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/e7bgL/hyNzM6hXvF/vYWBn8vWnktV64wMnpKhWK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/y1HAO/hyNzXmqN9e/rRBZLCzCHeV4knTn9YWcLk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dS0XGb/hyNxQoXvPN/oYAzvl16Tn8Znxz4tPEUrK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/e7bgL/hyNzM6hXvF/vYWBn8vWnktV64wMnpKhWK/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/y1HAO/hyNzXmqN9e/rRBZLCzCHeV4knTn9YWcLk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 8&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220228 공부 일지 : &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;못 푼 문제를 다시 시도해서 해결했다. 다른 사람 코드를 참고하면서 배우는 점이 많은 것 같다.&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;message-accessories-947762908610330684&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wG8gE/btruxj5tFNT/CtXy5nUZvUKbzqF0H4Agr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wG8gE/btruxj5tFNT/CtXy5nUZvUKbzqF0H4Agr1/img.png&quot; data-alt=&quot;220228 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wG8gE/btruxj5tFNT/CtXy5nUZvUKbzqF0H4Agr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwG8gE%2Fbtruxj5tFNT%2FCtXy5nUZvUKbzqF0H4Agr1%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;400&quot; height=&quot;129&quot; data-origin-width=&quot;962&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220228 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1212번(런타임 오류)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1212번(런타임 오류)
import Foundation
let N = readLine()!.map{Double(String($0))!}

var digit: Double = 0 // 10진수
var num: Double = 0.0

for i in stride(from: N.count-1, through:0, by: -1) { // 8진수 -&amp;gt; 10진수
    digit += N[i] * pow(8.0, num)

    num += 1.0 // 8^0, 8^1, 8^2, ...

}

let answer = String(Int(digit), radix: 2) // 10진수 -&amp;gt; 2진수
print(answer)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1212번&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(참고 : &lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.acmicpc.net/source/31035491&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/source/31035491&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1212번 ( 참고 : https://www.acmicpc.net/source/31035491)
let N = readLine()!.map{Int(String($0))!}
var result = &quot;&quot;

let arr = [&quot;000&quot;, &quot;001&quot;, &quot;010&quot;, &quot;011&quot;, &quot;100&quot;, &quot;101&quot;, &quot;110&quot;, &quot;111&quot;]

for num in N {
    result += arr[num]
}

while result.first == &quot;0&quot; {
    result.removeFirst()
}

if result.isEmpty {
    result = &quot;0&quot;
    print(result)
}
else {
    print(result)
}&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2935번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2935번
let A = readLine()!.count
let oper = readLine()!
let B = readLine()!.count

var result = &quot;1&quot;

if oper == &quot;*&quot; { // *일 때,
    result += String(repeating: &quot;0&quot;, count: A - 1) + String(repeating: &quot;0&quot;, count: B - 1)
}
else { // +일 때,
    if A &amp;gt; B {
        result += String(repeating: &quot;0&quot;, count: A - B - 1) + &quot;1&quot; + String(repeating: &quot;0&quot;, count: B - 1)
    }
    else if A &amp;lt; B {
        result += String(repeating: &quot;0&quot;, count: B - A - 1) + &quot;1&quot; + String(repeating: &quot;0&quot;, count: A - 1)
    }
    else {
        result = &quot;2&quot; + String(repeating: &quot;0&quot;, count: A - 1)
    }
}

print(result)&lt;/code&gt;&lt;/pre&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;&lt;b&gt;DAY8 인증완료&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-filename=&quot;DAY8_인증완료.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z5PNB/btruUnGt8nZ/UUNBVKNvKCfkmSlhF8yzD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z5PNB/btruUnGt8nZ/UUNBVKNvKCfkmSlhF8yzD0/img.png&quot; data-alt=&quot;DAY8 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z5PNB/btruUnGt8nZ/UUNBVKNvKCfkmSlhF8yzD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz5PNB%2FbtruUnGt8nZ%2FUUNBVKNvKCfkmSlhF8yzD0%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;400&quot; height=&quot;505&quot; data-filename=&quot;DAY8_인증완료.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;1838&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY8 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 Basic Challenge</category>
      <category>22일 챌린지</category>
      <category>Day8</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>못 푼 문제 다시</category>
      <category>백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/179</guid>
      <comments>https://developer-p.tistory.com/179#entry179comment</comments>
      <pubDate>Mon, 28 Feb 2022 16:48:17 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY7</title>
      <link>https://developer-p.tistory.com/178</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;오늘은 참여한지 7일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645927053630&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cK4QkE/hyNxF0VNcU/Ba5YyRJ6qxKiRczHYTToX1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/jE14x/hyNxOQ5W7F/elDRXarb8nzo0NerMWS6Dk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eBIDNS/hyNxIJ8BNp/lHksU75a17DQ51dEtLKd1K/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cK4QkE/hyNxF0VNcU/Ba5YyRJ6qxKiRczHYTToX1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/jE14x/hyNxOQ5W7F/elDRXarb8nzo0NerMWS6Dk/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/eBIDNS/hyNxIJ8BNp/lHksU75a17DQ51dEtLKd1K/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 7&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220227 공부 일지 : 영어문제여도&amp;nbsp;당황하지&amp;nbsp;않고&amp;nbsp;풀&amp;nbsp;수&amp;nbsp;있도록&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;940&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0KZSV/btruAsM8zfp/bCXnZK5XgEI3QTd7xeV0e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0KZSV/btruAsM8zfp/bCXnZK5XgEI3QTd7xeV0e1/img.png&quot; data-alt=&quot;220227 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0KZSV/btruAsM8zfp/bCXnZK5XgEI3QTd7xeV0e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0KZSV%2FbtruAsM8zfp%2FbCXnZK5XgEI3QTd7xeV0e1%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;400&quot; height=&quot;243&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220227 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 13297번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 13297번
//let N = Int(readLine()!)!
//
//for _ in 0..&amp;lt;N {
//    let input = readLine()!.map{String($0)}
//    print(input.count)
//}&lt;/code&gt;&lt;/pre&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;백준 Swift 16316번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16316번
let N = Int(readLine()!)!
var input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
var answerArray: [String] = Array(repeating: &quot;0&quot;, count: N)

var index: Int = 1

for i in 0..&amp;lt;N {
    if input[i] == &quot;mumble&quot; {
        input[i] = String(index)
    }
    answerArray[i] = String(index)
    index += 1
}

if input == answerArray {
    print(&quot;makes sense&quot;)
}
else {
    print(&quot;something is fishy&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 16316번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16316번
let N = Int(readLine()!)!
var input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
var answerArray: [String] = Array(repeating: &quot;0&quot;, count: N)

var index: Int = 1

for i in 0..&amp;lt;N {
    if input[i] == &quot;mumble&quot; {
        input[i] = String(index)
    }
    answerArray[i] = String(index)
    index += 1
}

if input == answerArray {
    print(&quot;makes sense&quot;)
}
else {
    print(&quot;something is fishy&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 16408번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16408번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
var countArray = Array(repeating: 0, count: 13)
let temp = [&quot;A&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;, &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;T&quot;, &quot;J&quot;, &quot;Q&quot;, &quot;K&quot;]


for ch in input {

//    print(ch[ch.index(ch.startIndex, offsetBy: 1)])
    
    let comparisonCh = ch.first! // 혹은 이렇게 ch[ch.index(ch.startIndex, offsetBy: 0)]
    
    for (index, t) in temp.enumerated() {
        if String(comparisonCh) == t {
            countArray[index] += 1
        }
    }

}

print(countArray.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 21553번 - 런타임오류&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 21553번
let A = Int(readLine()!)!
let P = Int(readLine()!)!

print(P) // B = P&lt;/code&gt;&lt;/pre&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;백준 Swift 23343번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 23343번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (x, y) = (input[0], input[1])

var checkX: Bool = false
var checkY: Bool = false

if Int(x) != nil { // 숫자로 바꿀 수 있으면,
    checkX = true
}

if Int(y) != nil { // 숫자로 바꿀 수 있으면,
    checkY = true
}

if checkX == true &amp;amp;&amp;amp; checkY == true { // 둘 다 숫자로 바꿀 수 있으면,
    print(Int(x)! - Int(y)!)
}
else {
    print(&quot;NaN&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1008번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1008번
let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
print(input[0] / input[1])&lt;/code&gt;&lt;/pre&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;백준 Swift 9498번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9498번
let score = Int(readLine()!)!

switch score {
case 90...100:
    print(&quot;A&quot;)
case 80...89:
    print(&quot;B&quot;)
case 70...79:
    print(&quot;C&quot;)
case 60...69:
    print(&quot;D&quot;)
default:
    print(&quot;F&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1330번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1330번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B) = (input[0], input[1])

if A &amp;gt; B {
    print(&quot;&amp;gt;&quot;)
}
else if A &amp;lt; B {
    print(&quot;&amp;lt;&quot;)
}
else {
    print(&quot;==&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2753번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2753번
let year = Int(readLine()!)!

if (year % 4 == 0 &amp;amp;&amp;amp; year % 100 != 0) || year % 400 == 0 {
    print(&quot;1&quot;)
}
else {
    print(&quot;0&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 14681번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 14681번
let x = Int(readLine()!)!
let y = Int(readLine()!)!

if x &amp;gt; 0 &amp;amp;&amp;amp; y &amp;gt; 0 {
    print(&quot;1&quot;)
}
else if x &amp;lt; 0 &amp;amp;&amp;amp; y &amp;gt; 0 {
    print(&quot;2&quot;)
}
else if x &amp;lt; 0 &amp;amp;&amp;amp; y &amp;lt; 0 {
    print(&quot;3&quot;)
}
else if x &amp;gt; 0 &amp;amp;&amp;amp; y &amp;lt; 0 {
    print(&quot;4&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 10797번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10797번(1)
let input = Int(readLine()!)!
let numArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var count: Int = 0

for num in numArray {
    if input == num {
        count += 1
    }
}

print(count)&lt;/code&gt;&lt;/pre&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;백준 Swift 10797번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10797번(2)
let input = Int(readLine()!)!
let answer = readLine()!.split(separator: &quot; &quot;).filter{Int($0) == input}
print(answer.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 10162번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10162번
let T = Int(readLine()!)!
var (countA, countB, countC) = (0, 0, 0)

if T % 10 != 0 {
    print(&quot;-1&quot;)
}
else {
    countA = T / 300
    countB = (T % 300) / 60
    countC = ((T % 300) % 60) / 10
    print(&quot;\(countA) \(countB) \(countC)&quot;)
}&lt;/code&gt;&lt;/pre&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;b&gt;DAY7 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;DAY7_인증완료.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0lYTy/btruFeuVpxC/O37wu6uXZTz9rdZWAoVOhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0lYTy/btruFeuVpxC/O37wu6uXZTz9rdZWAoVOhK/img.png&quot; data-alt=&quot;DAY7 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0lYTy/btruFeuVpxC/O37wu6uXZTz9rdZWAoVOhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0lYTy%2FbtruFeuVpxC%2FO37wu6uXZTz9rdZWAoVOhK%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;396&quot; data-filename=&quot;DAY7_인증완료.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY7 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>SWIFT</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 Swift</category>
      <category>백준 Swift 문제풀이</category>
      <category>백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/178</guid>
      <comments>https://developer-p.tistory.com/178#entry178comment</comments>
      <pubDate>Sun, 27 Feb 2022 16:30:42 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY6</title>
      <link>https://developer-p.tistory.com/177</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;오늘은 참여한지 6일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645873084126&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dUNbKn/hyNxOQB5JP/2nG0dKOf8MH11K0FsD1Sj1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/KF9w7/hyNwPcxFm1/SNkkpckD2nbC1dGko3d3r1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bQg5qk/hyNwWvWBw4/AdEkXe4BD8cjRAFoHK1Thk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dUNbKn/hyNxOQB5JP/2nG0dKOf8MH11K0FsD1Sj1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/KF9w7/hyNwPcxFm1/SNkkpckD2nbC1dGko3d3r1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bQg5qk/hyNwWvWBw4/AdEkXe4BD8cjRAFoHK1Thk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 6&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220226 공부 일지 :&lt;span&gt; &lt;/span&gt;&lt;span&gt;1212번, 2935번 못 풀었으니 DAY8(못 푼 문제 재도전 하는 날)에 다시 풀어봐야겠다.&lt;/span&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;1158&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mKjjP/btruhwcUPfB/EnmN8KxdWgEQ0P7dktt901/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mKjjP/btruhwcUPfB/EnmN8KxdWgEQ0P7dktt901/img.png&quot; data-alt=&quot;220226 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mKjjP/btruhwcUPfB/EnmN8KxdWgEQ0P7dktt901/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmKjjP%2FbtruhwcUPfB%2FEnmN8KxdWgEQ0P7dktt901%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;400&quot; height=&quot;262&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220226 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 11718번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 11718번
while true {
    let input = readLine()

    if input == nil {
        break
    }
    else {
        print(input!)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2754번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2754번
let score: [String : Double] = [&quot;A+&quot;: 4.3, &quot;A0&quot;: 4.0, &quot;A-&quot;: 3.7,
                                &quot;B+&quot;: 3.3, &quot;B0&quot;: 3.0, &quot;B-&quot;: 2.7,
                                &quot;C+&quot;: 2.3, &quot;C0&quot;: 2.0, &quot;C-&quot;: 1.7,
                                &quot;D+&quot;: 1.3, &quot;D0&quot;: 1.0, &quot;D-&quot;: 0.7,
                                &quot;F&quot;: 0.0]

let input = readLine()!

for key in score.keys {
    if key == input {
        print(score[key]!)
        break
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3028번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3028번
let input = readLine()!
var ball = [&quot;O&quot;, &quot;X&quot;, &quot;X&quot;] // 제일 처음

func A() {
    ball.swapAt(0, 1)
}

func B() {
    ball.swapAt(1, 2)
}

func C() {
    ball.swapAt(0, 2)
}

for ch in input {
    if ch == &quot;A&quot; {
        A()
    }
    else if ch == &quot;B&quot; {
        B()
    }
    else {
        C()
    }
}

for (index, ch) in ball.enumerated() {
    if ch == &quot;O&quot; {
        print(index + 1)
    }
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3029번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3029번
import Foundation
let nowTime = readLine()!.split(separator: &quot;:&quot;).map{Int(String($0))!}
let throwTime = readLine()!.split(separator: &quot;:&quot;).map{Int(String($0))!}

var (nowHour, nowMinute, nowSec) = (nowTime[0], nowTime[1], nowTime[2])
var (throwHour, throwMinute, throwSec) = (throwTime[0], throwTime[1], throwTime[2])


if throwHour &amp;lt; nowHour {
    throwHour += 24
}

else if (throwHour == nowHour) &amp;amp;&amp;amp; (nowMinute == throwMinute) &amp;amp;&amp;amp; (throwSec == nowSec) {  // 반례) 00:00:00 - 00:00:00일 때도 포함.
    throwHour += 24
}

var nowAllTime: Int = nowHour * 3600 + nowMinute * 60 + nowSec
var throwAllTime: Int = throwHour * 3600 + throwMinute * 60 + throwSec

let allTime: Int = throwAllTime - nowAllTime
var answerHour: Int = allTime / 3600
var answerMinute: Int = (allTime % 3600) / 60
var answerSec: Int = (allTime % 3600) % 60

let answerH = String(format: &quot;%02d&quot;, answerHour)
let answerM = String(format: &quot;%02d&quot;, answerMinute)
let answerS = String(format: &quot;%02d&quot;, answerSec)
print(&quot;\(answerH):\(answerM):\(answerS)&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 17863번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17863번(1)
let input = readLine()!.map{Int(String($0))!}

if (input[0] == 5) &amp;amp;&amp;amp; (input[1] == 5) &amp;amp;&amp;amp; (input[2] == 5) {
    print(&quot;YES&quot;)
}
else {
    print(&quot;NO&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 17863번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 17863번(2)
let input = readLine()!

if input.hasPrefix(&quot;555&quot;) {
    print(&quot;YES&quot;)
}
else {
    print(&quot;NO&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 20540번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20540번
let input = readLine()!.map{String($0)}
var answer: String = &quot;&quot;

if input[0] == &quot;E&quot; {
    answer += &quot;I&quot;
}
else {
    answer += &quot;E&quot;
}

if input[1] == &quot;S&quot; {
    answer += &quot;N&quot;
}
else {
    answer += &quot;S&quot;
}

if input[2] == &quot;T&quot; {
    answer += &quot;F&quot;
}
else {
    answer += &quot;T&quot;
}

if input[3] == &quot;J&quot; {
    answer += &quot;P&quot;
}
else {
    answer += &quot;J&quot;
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 20540번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20540번(2)
let input = readLine()!.map{String($0)}
let category1 = [&quot;E&quot;, &quot;S&quot;, &quot;T&quot;, &quot;J&quot;]
let category2 = [&quot;I&quot;, &quot;N&quot;, &quot;F&quot;, &quot;P&quot;]
var answer: String = &quot;&quot;

for (index, ch) in input.enumerated() {
    
    ch == category1[index] ? (answer += category2[index]) : (answer += category1[index])
    
}

print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 20944번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20944번
let input = Int(readLine()!)!
let answer = String(repeating: &quot;a&quot;, count: input)

print(answer)&lt;/code&gt;&lt;/pre&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;b&gt;DAY6 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;DAY6_인증완료.png&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2PJnL/btruHxnbEwH/AhuSO9aqRRp6BodA29vv90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2PJnL/btruHxnbEwH/AhuSO9aqRRp6BodA29vv90/img.png&quot; data-alt=&quot;DAY6 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2PJnL/btruHxnbEwH/AhuSO9aqRRp6BodA29vv90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2PJnL%2FbtruHxnbEwH%2FAhuSO9aqRRp6BodA29vv90%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;417&quot; data-filename=&quot;DAY6_인증완료.png&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY6 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>swift algorithm</category>
      <category>Swift PS</category>
      <category>백준 Swift PS</category>
      <category>백준 Swift 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/177</guid>
      <comments>https://developer-p.tistory.com/177#entry177comment</comments>
      <pubDate>Sat, 26 Feb 2022 22:43:00 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY5</title>
      <link>https://developer-p.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 참여한지 5일차의 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645862765420&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dUNbKn/hyNxOQB5JP/2nG0dKOf8MH11K0FsD1Sj1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/KF9w7/hyNwPcxFm1/SNkkpckD2nbC1dGko3d3r1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bQg5qk/hyNwWvWBw4/AdEkXe4BD8cjRAFoHK1Thk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dUNbKn/hyNxOQB5JP/2nG0dKOf8MH11K0FsD1Sj1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/KF9w7/hyNwPcxFm1/SNkkpckD2nbC1dGko3d3r1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/bQg5qk/hyNwWvWBw4/AdEkXe4BD8cjRAFoHK1Thk/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 5&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220225 공부 일지 : 꾸준히 하는 게 중요한 것 같다. 조건체크 잘 하기.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY9JdW/btrup9m61Ks/vxuUbE9KLUCsAy6iT9y6Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY9JdW/btrup9m61Ks/vxuUbE9KLUCsAy6iT9y6Rk/img.png&quot; data-alt=&quot;220225 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY9JdW/btrup9m61Ks/vxuUbE9KLUCsAy6iT9y6Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY9JdW%2Fbtrup9m61Ks%2FvxuUbE9KLUCsAy6iT9y6Rk%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;400&quot; height=&quot;352&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220225 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2752번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2752번
var intArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
intArray.sort(by: &amp;lt;)
print(intArray[0], intArray[1], intArray[2])&lt;/code&gt;&lt;/pre&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;백준 Swift 2959번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2959번
var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
input.sort(by: &amp;lt;)

print(input[0] * input[2])&lt;/code&gt;&lt;/pre&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;백준 Swift 13771번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 13771번
import Foundation

let N = Int(readLine()!)!
var numArray: [Double] = []

for _ in 0..&amp;lt;N {
    numArray.append(Double(readLine()!)!)
}
numArray.sort(by: &amp;lt;)

let answer = String(format: &quot;%.2f&quot;, numArray[1])
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2309번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2309번
var heights: [Int] = []

var sumHeights = 0

for _ in 0..&amp;lt;9 {
    heights.append(Int(readLine()!)!)
}

sumHeights = heights.reduce(0, +)

outLoop: for i in 0...9-2 {
    for j in i+1...9-1 {

        if sumHeights - (heights[i] + heights[j]) == 100 {
            heights[i] = 0
            heights[j] = 0
            break outLoop
        }

    }
}

heights.sort(by: &amp;lt;)

for i in 2..&amp;lt;9 {
    print(heights[i])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5576번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5576번
var collegeW: [Int] = []
var collegeK: [Int] = []

for _ in 0..&amp;lt;10 {
    collegeW.append(Int(readLine()!)!)
}
for _ in 0..&amp;lt;10 {
    collegeK.append(Int(readLine()!)!)
}

collegeW.sort(by: &amp;gt;)
collegeK.sort(by: &amp;gt;)

let scoreW = collegeW[0] + collegeW[1] + collegeW[2]
let scoreK = collegeK[0] + collegeK[1] + collegeK[2]

print(scoreW, scoreK)&lt;/code&gt;&lt;/pre&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;백준 Swift 9076번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9076번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

    input.sort(by: &amp;lt;)
    
    input.removeLast()
    input.removeFirst()
    
    if input.last! - input.first! &amp;gt;= 4 {
        print(&quot;KIN&quot;)
    }
    else {
        let sum: Int = input.reduce(0, +)
        print(sum)
    }

}&lt;/code&gt;&lt;/pre&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;백준 Swift 16770번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16770번
let N = Int(readLine()!)!

var time = Array(repeating: 0, count: 1001) // 1 ~ 1000
var result: Int = 0

for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let(s, t, b) = (input[0], input[1], input[2])
    
    for i in s...t {
        time[i] += b
    }
    
}
print(time.max()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 20650번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 20650번
var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
input.sort(by: &amp;lt;)

var A: Int = 0
var B: Int = 0
var C: Int = 0

let sum = input.max()! // A + B + C
A = input.min()! // A
B = input[1] // B
let BC = input[5] // B + C
C = BC - B // C

print(A, B, C)&lt;/code&gt;&lt;/pre&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;백준 Swift 19604번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 19604번
let N = Int(readLine()!)!
var arrayX: [Int] = []
var arrayY: [Int] = []


for _ in 0..&amp;lt;N {
    let input = readLine()!.split(separator: &quot;,&quot;).map{Int(String($0))!}
    arrayX.append(input[0])
    arrayY.append(input[1])
}

print(&quot;\(arrayX.min()! - 1),\(arrayY.min()! - 1)&quot;)
print(&quot;\(arrayX.max()! + 1),\(arrayY.max()! + 1)&quot;)&lt;/code&gt;&lt;/pre&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;b&gt;DAY5 인증완료&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;DAY5_인증완료.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;917&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwyhbl/btruIUiaf2U/XHu9fJGhqmb8skjYl4S4n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwyhbl/btruIUiaf2U/XHu9fJGhqmb8skjYl4S4n1/img.png&quot; data-alt=&quot;DAY5 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwyhbl/btruIUiaf2U/XHu9fJGhqmb8skjYl4S4n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwyhbl%2FbtruIUiaf2U%2FXHu9fJGhqmb8skjYl4S4n1%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;441&quot; data-filename=&quot;DAY5_인증완료.png&quot; data-origin-width=&quot;624&quot; data-origin-height=&quot;917&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY5 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>22일 베이직 챌린지</category>
      <category>SWIFT</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>백준 Swift 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/176</guid>
      <comments>https://developer-p.tistory.com/176#entry176comment</comments>
      <pubDate>Sat, 26 Feb 2022 19:57:06 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY4</title>
      <link>https://developer-p.tistory.com/175</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;오늘은 참여한지 4일차 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645682721054&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAalYe/hyNv92OlDA/CPaHqxkFQpLhO1avyAHmf1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/nupXs/hyNw3s82gf/tktt5pKRJd8XlKfElS1bok/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/zZdnr/hyNw0JXaTU/q2sWtkzOM3jnAcxRHiYGjK/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAalYe/hyNv92OlDA/CPaHqxkFQpLhO1avyAHmf1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/nupXs/hyNw3s82gf/tktt5pKRJd8XlKfElS1bok/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/zZdnr/hyNw0JXaTU/q2sWtkzOM3jnAcxRHiYGjK/img.png?width=1466&amp;amp;height=2478&amp;amp;face=0_0_1466_2478');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 4&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220224 공부 일지 : 쉬운 문제들이였다. 기초를&amp;nbsp;튼튼하게.&amp;nbsp;실수하지&amp;nbsp;않게&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;940&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zgCT2/btrufC4ni0t/KKsdS5elIkiSpKK32EDTx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zgCT2/btrufC4ni0t/KKsdS5elIkiSpKK32EDTx0/img.png&quot; data-alt=&quot;220224 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zgCT2/btrufC4ni0t/KKsdS5elIkiSpKK32EDTx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzgCT2%2FbtrufC4ni0t%2FKKsdS5elIkiSpKK32EDTx0%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;400&quot; height=&quot;213&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220224 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1008번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1008번
let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
print(input[0] / input[1])&lt;/code&gt;&lt;/pre&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;백준 Swift 1330번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1330번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B) = (input[0], input[1])

if A == B {
    print(&quot;==&quot;)
}
else if A &amp;gt; B {
    print(&quot;&amp;gt;&quot;)
}
else {
    print(&quot;&amp;lt;&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2753번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2753번
let year = Int(readLine()!)!

if year % 4 == 0 &amp;amp;&amp;amp; ((year % 100 != 0) || (year % 400 == 0)) {
    print(&quot;1&quot;)
}
else {
    print(&quot;0&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 9498번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 9498번
let score = Int(readLine()!)!

switch score {
case 90...100:
    print(&quot;A&quot;)
case 80...89:
    print(&quot;B&quot;)
case 70...79:
    print(&quot;C&quot;)
case 60...69:
    print(&quot;D&quot;)
default:
    print(&quot;F&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2438번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2438번
let input = Int(readLine()!)!

for i in 0..&amp;lt;input {
    for _ in 0...i {
        print(&quot;*&quot;, terminator: &quot;&quot;)
    }
    print()
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2439번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2439번
let N = Int(readLine()!)!

for i in 0..&amp;lt;N {
    
    for _ in stride(from: N-1, to: i, by: -1) {
        print(&quot; &quot;, terminator: &quot;&quot;)
    }
    for _ in 0...i {
        print(&quot;*&quot;, terminator: &quot;&quot;)
    }
    
    print()
}&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2739번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2739번
let N = Int(readLine()!)!

for i in 1...9 {
    print(&quot;\(N) * \(i) = \(N * i)&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2741번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2741번
let N = Int(readLine()!)!
for i in 1...N {
    print(i)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2742번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2742번
let N = Int(readLine()!)!

for i in stride(from: N, through: 1, by: -1) {
    print(i)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2884번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2884번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var (H, M) = (input[0], input[1])
var minute: Int = 0

if H == 0 {
    minute = 24 * 60 + M - 45 // H = 24
}
else {
    minute = H * 60 + M - 45
}

H = minute / 60

if H == 24 {
    H = 0
}

M = minute % 60

print(H, M)&lt;/code&gt;&lt;/pre&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;백준 Swift 10818번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: -  10818번
let N = Int(readLine()!)!

let numArray = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

print(numArray.min()!, numArray.max()!)&lt;/code&gt;&lt;/pre&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;b&gt;DAY4 인증완료&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-filename=&quot;DAY4_인증완료.png&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;1021&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DTAye/btrurxBaUvE/CEKke0q0MDeQbDYNfhDDk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DTAye/btrurxBaUvE/CEKke0q0MDeQbDYNfhDDk0/img.png&quot; data-alt=&quot;DAY4 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DTAye/btrurxBaUvE/CEKke0q0MDeQbDYNfhDDk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDTAye%2FbtrurxBaUvE%2FCEKke0q0MDeQbDYNfhDDk0%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;400&quot; height=&quot;335&quot; data-filename=&quot;DAY4_인증완료.png&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;1021&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY4 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22일 Algorithm Swift Basic Challenge</category>
      <category>22일 Basic 챌린지</category>
      <category>Swift PS</category>
      <category>Swift 문제풀이</category>
      <category>백준 Swift 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/175</guid>
      <comments>https://developer-p.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 24 Feb 2022 18:17:44 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY3</title>
      <link>https://developer-p.tistory.com/174</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;오늘은 참여한지 3일차다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645590474185&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/exR5NY/hyNvqX5zka/GvzRWE1tp0cdl6hkC5oxT1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/lPzTO/hyNv3fTkpY/ZVpiIKzFcRGkNGJV5kH4U0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/exR5NY/hyNvqX5zka/GvzRWE1tp0cdl6hkC5oxT1/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352,https://scrap.kakaocdn.net/dn/lPzTO/hyNv3fTkpY/ZVpiIKzFcRGkNGJV5kH4U0/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 3&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220223 공부 일지 : Swift를&amp;nbsp;더&amp;nbsp;잘&amp;nbsp;활용하고&amp;nbsp;싶다.&lt;br /&gt;reduce / map 을 적극활용해야겠다.&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;936&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbwXlr/btrt6ueN4E7/54vNfKqeoOL4UxWyxgGlHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbwXlr/btrt6ueN4E7/54vNfKqeoOL4UxWyxgGlHK/img.png&quot; data-alt=&quot;220223 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbwXlr/btrt6ueN4E7/54vNfKqeoOL4UxWyxgGlHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbwXlr%2Fbtrt6ueN4E7%2F54vNfKqeoOL4UxWyxgGlHK%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;400&quot; height=&quot;244&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220223 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 15740번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15740번 (75점)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B) = (input[0], input[1])

print(A + B)&lt;/code&gt;&lt;/pre&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;백준 Swift 15964번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15964번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B) = (input[0], input[1])
let answer: Int = (A + B) * (A - B)
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2475번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2475번(1)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
var sum: Int = 0

for num in input {
    sum += num * num
}

print(sum % 10)&lt;/code&gt;&lt;/pre&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;백준 Swift 2475번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2475번(2)
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let sum = input.reduce(0){$0 + ($1 * $1)}
print(sum % 10)&lt;/code&gt;&lt;/pre&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;백준 Swift 2920번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2920번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let ascending: [Int] = [1, 2, 3, 4, 5, 6, 7, 8]
let descending: [Int] = [8, 7, 6, 5, 4, 3, 2, 1]

if input == ascending {
    print(&quot;ascending&quot;)
}
else if input == descending {
    print(&quot;descending&quot;)
}
else {
    print(&quot;mixed&quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2908번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2908번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
let (A, B) = (input[0], input[1])
let newA: Int = Int(String(A.reversed()))!
let newB: Int = Int(String(B.reversed()))!

newA &amp;gt; newB ? print(newA) : print(newB)&lt;/code&gt;&lt;/pre&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;백준 Swift 1157번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1157번(1)
import Foundation
let input = readLine()!.map{String($0).uppercased()}
var alphabet = Array(repeating: 0, count: 26)

for ch in input {
    let index: Int = Int(Character(ch).asciiValue!) - Int(Character(&quot;A&quot;).asciiValue!)
    alphabet[index] += 1
}

let max: Int = alphabet.max()!
var answerIndex: Int = 0
var answer: String = &quot;&quot;

var check: Int = 0
for (index, num) in alphabet.enumerated() {
    if num == max {
        answerIndex = index
        check += 1
    }
    if check &amp;gt;= 2 {
        answer = &quot;?&quot;
        break
    }
}

if answer == &quot;?&quot; {
    print(answer)
}
else {
    answer = String(UnicodeScalar(Int(Character(&quot;A&quot;).asciiValue!) + answerIndex)!)
    print(answer)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1157번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1157번(2)
let input = readLine()!.map{String($0).uppercased()}
var dict: [String: Int] = [:]
var result: [String] = []

for ch in input {
    if dict[ch] == nil {
        dict[ch] = 1
    }
    else {
        dict[ch]! += 1
    }
}

for key in dict.keys {
    if dict[key] == dict.values.max() {
        result.append(key)
    }
}

result.count &amp;gt;= 2 ? print(&quot;?&quot;) : print(&quot;\(result[0])&quot;)&lt;/code&gt;&lt;/pre&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;백준 Swift 2675번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2675번
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
    let R: Int = Int(input[0])!
    let S: String = input[1]
    
    for ch in S {
        for _ in 0..&amp;lt;R {
            print(ch, terminator: &quot;&quot;)
        }
    }
    print()
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3052번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3052번
var numSet: Set&amp;lt;Int&amp;gt; = []

for _ in 0..&amp;lt;10 {
    numSet.insert(Int(readLine()!)! % 42)
}

print(numSet.count)&lt;/code&gt;&lt;/pre&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;백준 Swift 10809번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10809번
let S = readLine()!.map{String($0)}
var checkArray = Array(repeating: -1, count: 26)

for (index, ch) in S.enumerated() {
    let temp: Int = Int(Character(ch).asciiValue!) - Int(Character(&quot;a&quot;).asciiValue!)
    
    if checkArray[temp] == -1 {
        checkArray[temp] = index
    }
    
}

for num in checkArray {
    print(num, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1152번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1152번
let input = readLine()!.split(separator: &quot; &quot;).map{String($0)}
print(input.count)&lt;/code&gt;&lt;/pre&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;b&gt;DAY3 인증완료&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-filename=&quot;DAY3_인증완료.png&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;1017&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfzu7p/btrubuso7ld/HrUUBScwAy5YzJEyFhFVP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfzu7p/btrubuso7ld/HrUUBScwAy5YzJEyFhFVP1/img.png&quot; data-alt=&quot;DAY3 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfzu7p/btrubuso7ld/HrUUBScwAy5YzJEyFhFVP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdfzu7p%2Fbtrubuso7ld%2FHrUUBScwAy5YzJEyFhFVP1%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;373&quot; data-filename=&quot;DAY3_인증완료.png&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;1017&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY3 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>Swift PS</category>
      <category>Swift 백준</category>
      <category>백준 Swift 브론즈</category>
      <category>백준 문제풀이</category>
      <category>알고리즘</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/174</guid>
      <comments>https://developer-p.tistory.com/174#entry174comment</comments>
      <pubDate>Wed, 23 Feb 2022 17:49:01 +0900</pubDate>
    </item>
    <item>
      <title>백준 Swift 2869번, 10250번, 2775번, 1085번, 2309번</title>
      <link>https://developer-p.tistory.com/173</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;cmd + F 를 통해 문제번호 찾기를 추천드립니다.&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/166&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/166&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645543728052&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;백준 Swift 1000번, 1001번, 1008번, 2557번, 10718번, 10171번, 10998번, 10869번, 10430번, 2588번, 1330번, 9498번, 27&quot; data-og-description=&quot;문제 풀이를 할 때 마다 계속 추가됩니다. cmd + F 를 통해 문제번호 찾기를 추천드립니다. 22.02.10 최초 게시 22.02.11 업데이트 22.02.16 업데이트 22.02.21 업데이트 22.02.22 업데이트 백준 Swift 1000번, 10..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/166&quot; data-og-url=&quot;https://developer-p.tistory.com/166&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nga3z/hyNvlhL72H/2H6S4Y0FwYY3gjKnUOzQuK/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/gXdbl/hyNvlWmD2p/rqKH0vCrPxq4Oim08L7lf0/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/166&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/166&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nga3z/hyNvlhL72H/2H6S4Y0FwYY3gjKnUOzQuK/img.png?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/gXdbl/hyNvlWmD2p/rqKH0vCrPxq4Oim08L7lf0/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;백준 Swift 1000번, 1001번, 1008번, 2557번, 10718번, 10171번, 10998번, 10869번, 10430번, 2588번, 1330번, 9498번, 27&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;문제 풀이를 할 때 마다 계속 추가됩니다. cmd + F 를 통해 문제번호 찾기를 추천드립니다. 22.02.10 최초 게시 22.02.11 업데이트 22.02.16 업데이트 22.02.21 업데이트 22.02.22 업데이트 백준 Swift 1000번, 10..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;size14&quot;&gt;22.02.23 최초 게시&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.02.23 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.07 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;22.03.16 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;깃허브&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;주소에서&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;백준 Swift 문제풀이&lt;/b&gt;를 확인하실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/BaekJoonPS&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646223455197&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&quot; data-og-description=&quot;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/BaekJoonPS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/s2FQ4/hyNAUwP77C/DjESJkmmgDrpAqGDw08QNK/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;GitHub - SuminPark-developer/BaekJoonPS: 백준 Swift PS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;백준 Swift PS. Contribute to SuminPark-developer/BaekJoonPS development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2869번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2869번
import Foundation

let input = readLine()!.split(separator: &quot; &quot;).map{Double(String($0))!}
let (A, B, V) = (input[0], input[1], input[2])
var sum: Double = 0.0
var count: Double = 0.0 // 일자

// 이렇게 하면 시간이 너무 오래 걸림.
//while true {
//    sum += A
//    count += 1
//
//    if sum &amp;gt;= V {
//        break
//    }
//
//    sum -= B
//}
//
//print(count)

if A == V { // 높이V와 올라가는A가 똑같으면 한번만에 올라감.
    count = 1
}
else { // 여러날이 필요한 상황이라면,
    let va: Double = V - A // V - A
    let ab: Double = A - B // A - B
    
    count = 1 + ceil(va / ab)
}

print(Int(count))&lt;/code&gt;&lt;/pre&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;백준 Swift 10250번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
    let (H, W, N) = (input[0], input[1], input[2]) // H: 높이(층 수), W: 가로(방 수), N: 몇 번째 손님
    
    var xx: Int = 0
    var yy: Int = 0
    var answer: String = &quot;&quot;
    
//    if H == N { // 꼭대기층이면,
//        yy = H // 층 수
//        xx = (N / H) // 호실
//    }
    if N % H == 0 { // 꼭대기층이면,
        yy = H // 층 수
        xx = (N / H) // 호실
        
        if (N / H) &amp;gt;= 10 {
            answer = String(yy) + String(xx)
        }
        else {
            answer = String(yy) + &quot;0&quot; + String(xx)
        }
    }
    else { // 꼭대기 아닐 때,
        yy = N % H // 층 수
        xx = (N / H) + 1 // 호실
        
        if (N / H) + 1&amp;gt;= 10 {
            answer = String(yy) + String(xx)
        }
        else {
            answer = String(yy) + &quot;0&quot; + String(xx)
        }
    }

    print(answer)
    
}&lt;/code&gt;&lt;/pre&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;백준 Swift 2775번(1) - 재귀함수 사용&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2775번(1) - 재귀함수
let T = Int(readLine()!)!

func getCitizen(_ k: Int, _ n: Int) -&amp;gt; Int {
    if k == 0 || n == 1 {
        return n
    }
    
    return getCitizen(k - 1, n) + getCitizen(k, n - 1) // (k-1층의 n호), (k층의 n-1호)
}

for _ in 0..&amp;lt;T {
    let k = Int(readLine()!)!
    let n = Int(readLine()!)!
    
    print(getCitizen(k, n))
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2775번(2) - 2차원배열 사용&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2775번(2) - 2차원배열
let T = Int(readLine()!)!

for _ in 0..&amp;lt;T {
    let k = Int(readLine()!)!
    let n = Int(readLine()!)!
    
    var apart: [[Int]] = Array(repeating: Array(repeating: 0, count: n + 1), count: k + 1)
    
    for i in 0...k { // 각 층을 돌면서,
        for j in 0...n { // 각 호를 돌면서,
            if i == 0 { // 0층일 땐,
                apart[i][j] = j + 1
            }
            else { // 다른 층일 땐,
                if j == 0 { // 1호일 땐,
                    apart[i][j] = 1
                }
                else { // 2호이상일땐,
                    apart[i][j] = apart[i-1][j] + apart[i][j-1]
                }
            }
            
        }
        
    }
    print(apart[k][n-1])
}&lt;/code&gt;&lt;/pre&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;백준 Swift 1085번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1085번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (x, y, w, h) = (input[0], input[1], input[2], input[3])

let distanceArray = [x, y, w - x, h - y]

print(distanceArray.min()!)&lt;/code&gt;&lt;/pre&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;백준 Swift 2309번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2309번
func combi(_ nums: [Int], _ targetNum: Int) -&amp;gt; [[Int]] {
    var results: [[Int]] = []
    
    func combination(_ index: Int, _ nowCombi: [Int]) {
        if nowCombi.count == targetNum {
            results.append(nowCombi)
            return
        }
        
        for i in index..&amp;lt;nums.count {
            combination(i + 1, nowCombi + [nums[i]])
        }
    }
    combination(0, [])
    return results
}


var heights: [Int] = [] // 키 모두 입력받음.
for _ in 0..&amp;lt;9 {
    heights.append(Int(readLine()!)!)
}
heights.sort(by: &amp;lt;)
var satisfyHeights = combi(heights, 7) // 키 들 중, 난쟁이(7명) 가능한 조합 다 구함.

for height in satisfyHeights {
    if height.reduce(0, +) == 100 { // 난쟁이들의 키의 합이 100이면,
        for k in height {
            print(k)
        }
        break
    }
}&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 브론즈 - 문제 풀이</category>
      <category>Swift PS</category>
      <category>Swift 브론즈</category>
      <category>백준</category>
      <category>백준 Swift</category>
      <category>백준 Swift bronze 문제풀이</category>
      <category>백준 Swift PS</category>
      <category>백준 Swift 문제풀이</category>
      <category>백준 브론즈</category>
      <category>백준 스위프트 코테</category>
      <category>스위프트 코테</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/173</guid>
      <comments>https://developer-p.tistory.com/173#entry173comment</comments>
      <pubDate>Wed, 23 Feb 2022 00:30:32 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY2</title>
      <link>https://developer-p.tistory.com/172</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;오늘은 참여한지 2일차다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일 Basic 챌린지에 대한 상세한 내용은 아래 링크에서 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/171&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645523190829&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&quot; data-og-description=&quot;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/171&quot; data-og-url=&quot;https://developer-p.tistory.com/171&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CdRR3/hyNujrqhVr/DeKpW7xXcm8elYDVH4s861/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/171&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/171&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CdRR3/hyNujrqhVr/DeKpW7xXcm8elYDVH4s861/img.png?width=800&amp;amp;height=1352&amp;amp;face=0_0_800_1352');&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;[22일 Basic 챌린지 참여] 알고리즘 DAY1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;22 Basic Challenge Algorithm https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556 Algorithm 베이직 챌린지 챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 2&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220222 공부 일지 : 기초를&amp;nbsp;잊지&amp;nbsp;않게&amp;nbsp;하는&amp;nbsp;데&amp;nbsp;도움이&amp;nbsp;되는&amp;nbsp;거&amp;nbsp;같다.&amp;nbsp;문제&amp;nbsp;양이&amp;nbsp;늘어난&amp;nbsp;만큼&amp;nbsp;미리&amp;nbsp;해야겠다.&lt;/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;1156&quot; data-origin-height=&quot;540&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnATxi/btrt42uFdKi/VFuQXkmjouSg5LNXXUM5kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnATxi/btrt42uFdKi/VFuQXkmjouSg5LNXXUM5kk/img.png&quot; data-alt=&quot;220222 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnATxi/btrt42uFdKi/VFuQXkmjouSg5LNXXUM5kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnATxi%2Fbtrt42uFdKi%2FVFuQXkmjouSg5LNXXUM5kk%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;400&quot; height=&quot;187&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;540&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220222 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 2914번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2914번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (A, B) = (input[0], input[1])

print(A * (B - 1) + 1)&lt;/code&gt;&lt;/pre&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;백준 Swift 1550번(1)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1550번(1)
let input = Array(readLine()!)
var sum: Int = 0
var deci: Int = 1

for i in stride(from: input.count-1, through: 0, by: -1) {
    var num: Int = 0
    
    switch input[i] {
    case &quot;A&quot;:
        num = 10
    case &quot;B&quot;:
        num = 11
    case &quot;C&quot;:
        num = 12
    case &quot;D&quot;:
        num = 13
    case &quot;E&quot;:
        num = 14
    case &quot;F&quot;:
        num = 15
    default:
        num = Int(String(input[i]))!
    }
    
    sum += num * deci
    deci *= 16
    
}

print(sum)&lt;/code&gt;&lt;/pre&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;백준 Swift 1550번(2)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1550번(2)
let input = readLine()!
let answer: Int = Int(input, radix: 16)!
print(answer)&lt;/code&gt;&lt;/pre&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;백준 Swift 2845번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2845번
var input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let (L, P) = (input[0], input[1])
let standard: Int = L * P

input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}

for num in input {
    print(num - standard, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 3003번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 3003번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let standard: [Int] = [1, 1, 2, 2, 2, 8] // 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개
var answer: [Int] = []

for (index, num) in input.enumerated() {
    answer.append(standard[index] - num)
}

for num in answer {
    print(num, terminator: &quot; &quot;)
}&lt;/code&gt;&lt;/pre&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;백준 Swift 5554번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5554번
var sec: Int = 0
var min: Int = 0

for _ in 0..&amp;lt;4 {
    sec += Int(readLine()!)!
}

min = sec / 60
sec = sec % 60

print(min)
print(sec)&lt;/code&gt;&lt;/pre&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;백준 Swift 5522번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 5522번
var sum: Int = 0

for _ in 0..&amp;lt;5 {
    sum += Int(readLine()!)!
}

print(sum)&lt;/code&gt;&lt;/pre&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;백준 Swift 1271번 (런타임 오류)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1271번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
let(n, m) = (input[0], input[1])

print(n / m)
print(n % m)&lt;/code&gt;&lt;/pre&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;백준 Swift 16394번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 16394번
let year = Int(readLine()!)!
print(year - 1946)&lt;/code&gt;&lt;/pre&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;백준 Swift 15894번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 15894번
let n = Int(readLine()!)!
print(n * 4)&lt;/code&gt;&lt;/pre&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;백준 Swift 2338번 (런타임 오류)&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 2338번
let A = Int(readLine()!)!
let B = Int(readLine()!)!

print(A + B)
print(A - B)
print(A * B)&lt;/code&gt;&lt;/pre&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;b&gt;DAY2 인증완료&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-filename=&quot;DAY2_인증완료.png&quot; data-origin-width=&quot;2436&quot; data-origin-height=&quot;2042&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eygtQT/btrt1ISgwpv/uhlMkLZkWJRAOIBk5OgipK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eygtQT/btrt1ISgwpv/uhlMkLZkWJRAOIBk5OgipK/img.png&quot; data-alt=&quot;DAY2 인증완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eygtQT/btrt1ISgwpv/uhlMkLZkWJRAOIBk5OgipK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeygtQT%2Fbtrt1ISgwpv%2FuhlMkLZkWJRAOIBk5OgipK%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;400&quot; height=&quot;335&quot; data-filename=&quot;DAY2_인증완료.png&quot; data-origin-width=&quot;2436&quot; data-origin-height=&quot;2042&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DAY2 인증완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>challenge</category>
      <category>Day 2</category>
      <category>SWIFT</category>
      <category>Swift 브론즈</category>
      <category>백준 문제풀이</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/172</guid>
      <comments>https://developer-p.tistory.com/172#entry172comment</comments>
      <pubDate>Tue, 22 Feb 2022 21:32:34 +0900</pubDate>
    </item>
    <item>
      <title>[22일 Basic 챌린지 참여] 알고리즘 DAY1</title>
      <link>https://developer-p.tistory.com/171</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;회고록&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22일간의 챌린지를 마치며.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/195&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1647240231495&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;[22일 Basic 챌린지 참여] 22일간의 챌린지를 마치며, 회고록&quot; data-og-description=&quot;지금까지 길다면 길고, 짧다면 짧은 22일동안 22일 Basic 챌린지에 참여했습니다. Day 22 220314 공부 일지 : 챌린지&amp;nbsp;덕분에&amp;nbsp;문제&amp;nbsp;푸는&amp;nbsp;습관을&amp;nbsp;기를&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;좋은&amp;nbsp;기회였습니다. 기존에&amp;nbsp;목표하던&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/195&quot; data-og-url=&quot;https://developer-p.tistory.com/195&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/S3wRf/hyNGEhFVVS/k1mnF7qaK025hZY0ZMmYLk/img.png?width=631&amp;amp;height=225&amp;amp;face=0_0_631_225,https://scrap.kakaocdn.net/dn/6LBZL/hyNHVITekM/jlDaF9AhkSmGFDQL96G5u1/img.png?width=631&amp;amp;height=225&amp;amp;face=0_0_631_225&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/195&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/195&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/S3wRf/hyNGEhFVVS/k1mnF7qaK025hZY0ZMmYLk/img.png?width=631&amp;amp;height=225&amp;amp;face=0_0_631_225,https://scrap.kakaocdn.net/dn/6LBZL/hyNHVITekM/jlDaF9AhkSmGFDQL96G5u1/img.png?width=631&amp;amp;height=225&amp;amp;face=0_0_631_225');&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;[22일 Basic 챌린지 참여] 22일간의 챌린지를 마치며, 회고록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 길다면 길고, 짧다면 짧은 22일동안 22일 Basic 챌린지에 참여했습니다. Day 22 220314 공부 일지 : 챌린지&amp;nbsp;덕분에&amp;nbsp;문제&amp;nbsp;푸는&amp;nbsp;습관을&amp;nbsp;기를&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;좋은&amp;nbsp;기회였습니다. 기존에&amp;nbsp;목표하던&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;22 Basic Challenge Algorithm&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645430400697&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;Algorithm 베이직 챌린지&quot; data-og-description=&quot;챌린지 대상 : 코딩 테스트 준비해야하는데, 한 번도 해본적은 없어. 일단 코테 푸는 습관 부터 기를까? 하는 분 해당 챌린지는 코딩테스트 준비를 시작하는 사람들에게 추천합니다.&quot; data-og-host=&quot;softsquared.notion.site&quot; data-og-source-url=&quot;https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556&quot; data-og-url=&quot;https://softsquared.notion.site/5328fab28619430dae2c782d4db6a556&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pgUsQ/hyNum06EVc/QEj5k2h4Q0A2433HBr1jTK/img.png?width=1280&amp;amp;height=867&amp;amp;face=0_0_1280_867,https://scrap.kakaocdn.net/dn/AITHr/hyNuneExWH/PstaOR30xl1Couavq8VKk1/img.png?width=1280&amp;amp;height=867&amp;amp;face=0_0_1280_867&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://softsquared.notion.site/Algorithm-5328fab28619430dae2c782d4db6a556&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pgUsQ/hyNum06EVc/QEj5k2h4Q0A2433HBr1jTK/img.png?width=1280&amp;amp;height=867&amp;amp;face=0_0_1280_867,https://scrap.kakaocdn.net/dn/AITHr/hyNuneExWH/PstaOR30xl1Couavq8VKk1/img.png?width=1280&amp;amp;height=867&amp;amp;face=0_0_1280_867');&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;Algorithm 베이직 챌린지&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;softsquared.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22일동안&lt;/b&gt; 정해진 알고리즘 문제를 꾸준히 푸는 챌린지가 있길래 참여했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어려운 문제들은 아니고, 백준의 브론즈 문제들을 &lt;u&gt;&lt;b&gt;꾸준히 풀게됨&lt;/b&gt;으로써 &lt;b&gt;습관을 형성&lt;/b&gt;하는데 도움이 될 것&lt;/u&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;1466&quot; data-origin-height=&quot;2478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2134Z/btrtQolGwvj/25eOKlm4NHc0nh1Kj1UIik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2134Z/btrtQolGwvj/25eOKlm4NHc0nh1Kj1UIik/img.png&quot; data-alt=&quot;백준 문제번호 참고.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2134Z/btrtQolGwvj/25eOKlm4NHc0nh1Kj1UIik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2134Z%2FbtrtQolGwvj%2F25eOKlm4NHc0nh1Kj1UIik%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;400&quot; height=&quot;676&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;2478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백준 문제번호 참고.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 규칙인데, 매일 진행하고 간단히 인증하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/22-RULE-da479d46c1e043eb8b7e24258bb2c261&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://softsquared.notion.site/22-RULE-da479d46c1e043eb8b7e24258bb2c261&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1645430423683&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;22 베이직 챌린지 RULE&quot; data-og-description=&quot;구글폼을 작성했던 마음 그대로 22일간 뭉쳐서 달려봅시다 : ) 아래 규칙을 확인해주세요 &quot; data-og-host=&quot;softsquared.notion.site&quot; data-og-source-url=&quot;https://softsquared.notion.site/22-RULE-da479d46c1e043eb8b7e24258bb2c261&quot; data-og-url=&quot;https://softsquared.notion.site/da479d46c1e043eb8b7e24258bb2c261&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cysLKo/hyNsRPdT1y/IlqWCBs3wO8NnFvsCliTQk/img.png?width=2000&amp;amp;height=643&amp;amp;face=0_0_2000_643,https://scrap.kakaocdn.net/dn/b4kS3P/hyNs5GGNfP/vNvlHQDTn90yJj8GUQn9OK/img.png?width=2000&amp;amp;height=643&amp;amp;face=0_0_2000_643&quot;&gt;&lt;a href=&quot;https://softsquared.notion.site/22-RULE-da479d46c1e043eb8b7e24258bb2c261&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://softsquared.notion.site/22-RULE-da479d46c1e043eb8b7e24258bb2c261&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cysLKo/hyNsRPdT1y/IlqWCBs3wO8NnFvsCliTQk/img.png?width=2000&amp;amp;height=643&amp;amp;face=0_0_2000_643,https://scrap.kakaocdn.net/dn/b4kS3P/hyNs5GGNfP/vNvlHQDTn90yJj8GUQn9OK/img.png?width=2000&amp;amp;height=643&amp;amp;face=0_0_2000_643');&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;22 베이직 챌린지 RULE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;구글폼을 작성했던 마음 그대로 22일간 뭉쳐서 달려봅시다 : ) 아래 규칙을 확인해주세요 &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;softsquared.notion.site&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Day 1&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;220221 공부 일지 : 코테 공부 열심히 해야겠다!&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;944&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CDnMe/btrt7tL5Kee/zQkgoQNZKlP1ChkoKFIki0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CDnMe/btrt7tL5Kee/zQkgoQNZKlP1ChkoKFIki0/img.png&quot; data-alt=&quot;220221 공부 일지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CDnMe/btrt7tL5Kee/zQkgoQNZKlP1ChkoKFIki0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCDnMe%2Fbtrt7tL5Kee%2FzQkgoQNZKlP1ChkoKFIki0%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;400&quot; height=&quot;132&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;220221 공부 일지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1000번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1000번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
print(input[0] + input[1])&lt;/code&gt;&lt;/pre&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;h4 data-ke-size=&quot;size20&quot;&gt;백준 Swift 1001번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 1001번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
print(input[0] - input[1])&lt;/code&gt;&lt;/pre&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;백준 Swift 10998번&lt;/h4&gt;
&lt;pre id=&quot;code_1644480951493&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - 10998번
let input = readLine()!.split(separator: &quot; &quot;).map{Int(String($0))!}
print(input[0] * input[1])&lt;/code&gt;&lt;/pre&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;</description>
      <category>Swift 5 | 코테/백준 | 22일 Basic Challenge</category>
      <category>22 Basic Challenge</category>
      <category>220221 Day 1</category>
      <category>22일 챌린지</category>
      <category>22일 챌린지 DAY 1</category>
      <category>SWIFT</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/171</guid>
      <comments>https://developer-p.tistory.com/171#entry171comment</comments>
      <pubDate>Mon, 21 Feb 2022 17:28:05 +0900</pubDate>
    </item>
    <item>
      <title>[iOS 스터디/week5] Unsplash Open API 사진 검색 앱(Photo Search App with Unsplash Image Open API) / 네이버 로그인 api / 카카오톡 로그인 api</title>
      <link>https://developer-p.tistory.com/170</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;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;네이버 로그인 API&lt;/span&gt; / &lt;span style=&quot;color: #f9e000;&quot;&gt;카카오톡 로그인 API &lt;/span&gt;/ &lt;/b&gt;&lt;b&gt;Unsplash Open API&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;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;Photo Search - 사용한 open api : Unsplash Image API&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://unsplash.com/developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://unsplash.com/developers&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644821973449&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;Unsplash Image API | Free HD Photo API&quot; data-og-description=&quot;Codepen To make adding images into prototypes and code examples, Codepen integrates the Unsplash library, making finding and adding an image super easy.&quot; data-og-host=&quot;unsplash.com&quot; data-og-source-url=&quot;https://unsplash.com/developers&quot; data-og-url=&quot;https://unsplash.com/developers&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://unsplash.com/developers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://unsplash.com/developers&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Unsplash Image API | Free HD Photo API&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Codepen To make adding images into prototypes and code examples, Codepen integrates the Unsplash library, making finding and adding an image super easy.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;unsplash.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;최종 결과물&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/426333044&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/5OkSX/hyNpbl82MQ/Gctif9h3rIOETdKjSQq460/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634,https://scrap.kakaocdn.net/dn/cCnyXA/hyNqAxPGVa/zg9UodG9qVAK0Y7sz2zPwK/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634&quot; data-video-width=&quot;400&quot; data-video-height=&quot;855&quot; data-video-origin-width=&quot;764&quot; data-video-origin-height=&quot;1634&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/426333044?service=daum_tistory&quot; width=&quot;400&quot; height=&quot;855&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;Photo Search 최종 완성.&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;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;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;메인 화면&lt;/b&gt;&lt;/span&gt;&lt;/h4&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;766&quot; data-origin-height=&quot;1644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1IVUx/btrvMIIHOqr/DjMZWh5x6BvqZ57NvBQk11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1IVUx/btrvMIIHOqr/DjMZWh5x6BvqZ57NvBQk11/img.png&quot; data-alt=&quot;메인 화면 - 사진 검색 기능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1IVUx/btrvMIIHOqr/DjMZWh5x6BvqZ57NvBQk11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1IVUx%2FbtrvMIIHOqr%2FDjMZWh5x6BvqZ57NvBQk11%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;644&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;1644&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메인 화면 - 사진 검색 기능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 자료&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;a style=&quot;color: #9d9d9d;&quot; href=&quot;https://www.youtube.com/watch?v=IQ4jh4EfVOM&quot;&gt;https://www.youtube.com/watch?v=IQ4jh4EfVOM&lt;/a&gt;&lt;/span&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;런치 스크린&lt;/li&gt;
&lt;li&gt;로그인 화면(카카오, 네이버)&lt;/li&gt;
&lt;li&gt;메인 화면 - 사진 검색 기능. | Unsplash Image Open API&lt;/li&gt;
&lt;li&gt;사진 디테일 화면 - 사진 클릭 시 크게 볼 수 있음. &lt;s&gt;하트 버튼 누르면 저장.&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;s&gt;랜덤 사진 화면 - 랜덤 키워드 추가해야 함.&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;&lt;s&gt;하트 누른 사진 화면&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;프로필 화면 - 로그인api 유저 정보 가져옴 : 프로필사진, 이름, 이메일, 닉네임, 로그아웃&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;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: #666666;&quot;&gt;프로젝트에 사용된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;아래 링크&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;에서 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/5week_PhotoSearchProject&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/5week_PhotoSearchProject&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644823644796&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/5week_PhotoSearchProject: iOS 5주차 스터디 - 사진 검색 앱(Photo Search Open API)&quot; data-og-description=&quot;iOS 5주차 스터디 - 사진 검색 앱(Photo Search Open API). Contribute to SuminPark-developer/5week_PhotoSearchProject development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/5week_PhotoSearchProject&quot; data-og-url=&quot;https://github.com/SuminPark-developer/5week_PhotoSearchProject&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mh5Sc/hyNpl97Rls/AFnGr2QJMZd8T6z8SOWfDk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/5week_PhotoSearchProject&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/5week_PhotoSearchProject&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mh5Sc/hyNpl97Rls/AFnGr2QJMZd8T6z8SOWfDk/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;GitHub - SuminPark-developer/5week_PhotoSearchProject: iOS 5주차 스터디 - 사진 검색 앱(Photo Search Open API)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;iOS 5주차 스터디 - 사진 검색 앱(Photo Search Open API). Contribute to SuminPark-developer/5week_PhotoSearchProject development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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>iOS | 앱 개발/디자이너와 함께하는 앱 런칭 프로젝트, 소프트스퀘어드xSSAC</category>
      <category>Open API</category>
      <category>PhotoSearch</category>
      <category>unsplash api</category>
      <category>Unsplash Open Api</category>
      <category>네이버 로그인</category>
      <category>네이버 로그인 API</category>
      <category>사진 검색 앱</category>
      <category>이미지 api</category>
      <category>카카오톡 로그인</category>
      <category>카카오톡 로그인 API</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/170</guid>
      <comments>https://developer-p.tistory.com/170#entry170comment</comments>
      <pubDate>Tue, 15 Feb 2022 15:00:33 +0900</pubDate>
    </item>
    <item>
      <title>[iOS 스터디/week4-2] 순발력 구분 게임 앱(Game App that distinguish quickly)</title>
      <link>https://developer-p.tistory.com/169</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;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;기획서 내용은 아래 링크에서 확인하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/168&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644815153230&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;[iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Proposal that distinguish quickly)&quot; data-og-description=&quot;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기에 대한&amp;nbsp;기획서입니다. 순발력 구분 게임 화면에 보이는 캐릭터를 같은 시간내에 빠르게 구별해서 최대한 높은 점수를 내는 게임. 전체 로직 사용자는 start버튼&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/168&quot; data-og-url=&quot;https://developer-p.tistory.com/168&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVMX8L/hyNo92PC4t/tbIzml7fzYnUVaHH9MQvw0/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952,https://scrap.kakaocdn.net/dn/bXEwXk/hyNpoFFXgO/npwRMcaEE3TGMSkFLHIyxK/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952,https://scrap.kakaocdn.net/dn/FFhIx/hyNpg8JTbc/fMArh8ishzkadZ1DVqZqu1/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/168&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVMX8L/hyNo92PC4t/tbIzml7fzYnUVaHH9MQvw0/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952,https://scrap.kakaocdn.net/dn/bXEwXk/hyNpoFFXgO/npwRMcaEE3TGMSkFLHIyxK/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952,https://scrap.kakaocdn.net/dn/FFhIx/hyNpg8JTbc/fMArh8ishzkadZ1DVqZqu1/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952');&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;[iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Proposal that distinguish quickly)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기에 대한&amp;nbsp;기획서입니다. 순발력 구분 게임 화면에 보이는 캐릭터를 같은 시간내에 빠르게 구별해서 최대한 높은 점수를 내는 게임. 전체 로직 사용자는 start버튼&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd; color: #000000;&quot;&gt;&lt;b&gt;최종 결과물&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/426330023&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/b1DH72/hyNpkiXVx0/jwHHvCdxdf4Sb9KiKzjFvK/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634,https://scrap.kakaocdn.net/dn/bppUPM/hyNpkJ05MQ/xUTCO3OiECszhEmsHCCbP1/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634&quot; data-video-width=&quot;400&quot; data-video-height=&quot;855&quot; data-video-origin-width=&quot;764&quot; data-video-origin-height=&quot;1634&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/426330023?service=daum_tistory&quot; width=&quot;400&quot; height=&quot;855&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;순발력 구분 게임 최종 완성.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;개발하면서 참고했던 링크들도 모두 함께 첨부합니다.&lt;/span&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;&lt;span style=&quot;color: #000000; background-color: #f6e199;&quot;&gt;&lt;b&gt;구현페이지&lt;/b&gt;&lt;/span&gt;&lt;/h2&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;span style=&quot;color: #006dd7;&quot;&gt;첫 번째 페이지(StartViewController - StartVC)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Navigation Controller - 네비게이션 바 숨기기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644815341752&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 참고 : https://faith-developer.tistory.com/31
    // StartVC에선 네비게이션바가 안보이게 하고,
    override func viewWillAppear(_ animated: Bool) {
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }
    // gameVC에선 네비게이션바가 보이게 설정.
    override func viewWillDisappear(_ animated: Bool) {
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }&lt;/code&gt;&lt;/pre&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;두 번째 페이지(ViewController - gameVC)&lt;/b&gt;&lt;/span&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;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvQmMU/btrtjPiCTxC/IrdGPN8fvk4kKKkkEyOi40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvQmMU/btrtjPiCTxC/IrdGPN8fvk4kKKkkEyOi40/img.png&quot; data-alt=&quot;액션퍼즐패밀리 게임 참고.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvQmMU/btrtjPiCTxC/IrdGPN8fvk4kKKkkEyOi40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvQmMU%2FbtrtjPiCTxC%2FIrdGPN8fvk4kKKkkEyOi40%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;298&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;액션퍼즐패밀리 게임 참고.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;타이머 재생 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644815489760&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;Swift 4: How can I add a Countdown timer inside of my UIbutton .settitle?&quot; data-og-description=&quot;I am trying to add a Countdown timer inside of my UIButton in the .settitle. How can I do this? The image below is what I am trying to accomplish. Then once the timer gets to 0, I want the backgro...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608&quot; data-og-url=&quot;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YcMy7/hyNpfhFJ5c/6pf7tIUMaiIMbF1dT4oEQK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/50032532/swift-4-how-can-i-add-a-countdown-timer-inside-of-my-uibutton-settitle/50032608&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YcMy7/hyNpfhFJ5c/6pf7tIUMaiIMbF1dT4oEQK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Swift 4: How can I add a Countdown timer inside of my UIbutton .settitle?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am trying to add a Countdown timer inside of my UIButton in the .settitle. How can I do this? The image below is what I am trying to accomplish. Then once the timer gets to 0, I want the backgro...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&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;blockquote data-ke-style=&quot;style3&quot;&gt;Q. 타이머 메모리 누수가 있는 거 같다. 아닌가?&lt;br /&gt;&lt;br /&gt;&amp;rarr; 누수 있는 거 맞다. 누수를 잡기 위해선 self.weak (?) 약한참조를 해주면 된다. 이 부분에 대해선 추후에 말할 기회가 있을 것. 약한참조를 해주면 많은 부분이 해결된다.&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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;pre id=&quot;code_1644815610084&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MARK: - Properties
    
    var vTimer: Timer?          // 인증번호 타이머
    var totalTime: Int = 180    // 인증번호 시작 03:00

/** 타이머 시작버튼 클릭 */
    @objc func onTimerStart(_ sender: Any) {
        if let timer = vTimer {
            //timer 객체가 nil 이 아닌경우에는 invalid 상태에만 시작한다.
            if !timer.isValid {
                /** 1초마다 timerCallback함수를 호출하는 타이머 */
                vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
            } else {    // 타이머 실행중에 다시 타이머를 실행했다면, 기존의 타이머를 멈추고 난 후, 실행한다.
                timer.invalidate()
                self.totalTime = 180
                vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
            }
        }else{
            //timer 객체가 nil 인 경우에 객체를 생성하고 타이머를 시작한다.
            /** 1초마다 timerCallback함수를 호출하는 타이머 */
            vTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerCallback), userInfo: nil, repeats: true)
        }
    }
    
    /** 타이머 종료버튼 클릭 */
    func onTimerEnd(_ sender: Any) {
        if let timer = vTimer {
            if(timer.isValid){
                timer.invalidate()
            }
        }
        
        totalTime = 0
    }
    
    //타이머가 호출하는 콜백함수
    @objc func timerCallback(){
        totalTime -= 1
        print(&quot;DEBUG: \(totalTime)&quot;)
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;이미지 같은지 비교 시,&lt;/b&gt; (기준이미지 &amp;harr; queueElement1 비교 시)&lt;/h4&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;1146&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTc6yx/btrtajL4Wxh/dxpEy82JHL8CndYS0s2mV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTc6yx/btrtajL4Wxh/dxpEy82JHL8CndYS0s2mV0/img.png&quot; data-alt=&quot;같은 이미지를 보이고 있어도, 값이 다르다! .pngData()를 통해 비교해줘야 함!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTc6yx/btrtajL4Wxh/dxpEy82JHL8CndYS0s2mV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTc6yx%2FbtrtajL4Wxh%2FdxpEy82JHL8CndYS0s2mV0%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;1146&quot; height=&quot;66&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;같은 이미지를 보이고 있어도, 값이 다르다! .pngData()를 통해 비교해줘야 함!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644815706852&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// leftStandard.image == queueElement1.image로 하면 안되고,
if leftStandard.image?.pngData() == self.queueElement1.image?.pngData() { // 좌측 기준과 맨밑이미지가 같다면,
                score += 100 // 득점.
                print(score)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644815717491&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;swift compare multiple images to an array of images&quot; data-og-description=&quot;I have 2 UIImageViews connected to an array of images I'm trying compare both once they are displayed but doesn't seems to work. I tried using imageArray[Image Literal] and also imageArray[image1.p...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&quot; data-og-url=&quot;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YXGbr/hyNpbM7o5c/OVr0UzVI0uOl9epHYxsWg0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/54818497/swift-compare-multiple-images-to-an-array-of-images&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YXGbr/hyNpbM7o5c/OVr0UzVI0uOl9epHYxsWg0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;swift compare multiple images to an array of images&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have 2 UIImageViews connected to an array of images I'm trying compare both once they are displayed but doesn't seems to work. I tried using imageArray[Image Literal] and also imageArray[image1.p...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&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;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Q. 화면을 그리는 작업은 DispatchQueue.main.async에서 해야 한다고 배웠는데, (저 코드를 쓰지 않고) 그냥 클릭할 때 마다 이미지 변경을 해도 똑같이 잘 된다. 혹시 차이가 무엇인가?&lt;br /&gt;&lt;br /&gt;&amp;rarr; uicomponent 값이 바꼈다는건 이미 메인쓰레드다. 따라서 디스패치큐를 하지 않아도, ios에서 메인쓰레드가 알아서 해준다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;But,&lt;br /&gt;&lt;/b&gt;메인쓰레드에 위치해 있지 않고, (백그라운드 같은) 다른 쓰레드에 가 있을 때 DispatchQueue.main.async를 통해 화면을 그려줌. (네트워크 등에서 활용될 일이 많다.)&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;참고 : 메인 액터&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;오디오 파일 재생 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;&lt;a href=&quot;https://zeddios.tistory.com/269&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://zeddios.tistory.com/269&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644815992312&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;iOS ) local에 있는 오디오파일 재생하기&quot; data-og-description=&quot;안녕하세요 :) Zedd입니다. 네..............리젝이 벌써 4번째인가요..?네.....다른앱을 만들어야 하는지 ㅠㅠㅠ 열심히 만든건데.. 이것때문에 하루종일 메일함만 들여다보고 있네요 XD.... 이제 iOS글&quot; data-og-host=&quot;zeddios.tistory.com&quot; data-og-source-url=&quot;https://zeddios.tistory.com/269&quot; data-og-url=&quot;https://zeddios.tistory.com/269&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2aEpP/hyNpfBZrXp/wx8NuNNGm6wupzaQRXnOmk/img.png?width=800&amp;amp;height=123&amp;amp;face=0_0_800_123,https://scrap.kakaocdn.net/dn/b1Tbdy/hyNpcZyYM0/RtvKnbKeGdNKBP7foI2FK0/img.png?width=800&amp;amp;height=123&amp;amp;face=0_0_800_123&quot;&gt;&lt;a href=&quot;https://zeddios.tistory.com/269&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://zeddios.tistory.com/269&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2aEpP/hyNpfBZrXp/wx8NuNNGm6wupzaQRXnOmk/img.png?width=800&amp;amp;height=123&amp;amp;face=0_0_800_123,https://scrap.kakaocdn.net/dn/b1Tbdy/hyNpcZyYM0/RtvKnbKeGdNKBP7foI2FK0/img.png?width=800&amp;amp;height=123&amp;amp;face=0_0_800_123');&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;iOS ) local에 있는 오디오파일 재생하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요 :) Zedd입니다. 네..............리젝이 벌써 4번째인가요..?네.....다른앱을 만들어야 하는지 ㅠㅠㅠ 열심히 만든건데.. 이것때문에 하루종일 메일함만 들여다보고 있네요 XD.... 이제 iOS글&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;zeddios.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;세번째 페이지&lt;/span&gt;&lt;/b&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;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: &lt;span data-token-index=&quot;1&quot; data-reactroot=&quot;&quot;&gt;최종 점수&lt;/span&gt; = 획득 점수 + 게임 진행 시간(1초당 1점 | 최소 0점 ~ 최대 60점)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://urbangy.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://urbangy.tistory.com/21&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644816041010&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;간단한 Swift 알람 띄우기&quot; data-og-description=&quot;간단한 알림 메세지를 띄우는 방법을 알아보쟈! 먼저 알림에 띄우고 싶은 메세지를 정의한다. key, value 를 받아서 보여줄 메세지를 정의해보았다. let msg = &amp;quot;key : \(key) , value : \(value)&amp;quot; 이제 UIAlertCon..&quot; data-og-host=&quot;urbangy.tistory.com&quot; data-og-source-url=&quot;https://urbangy.tistory.com/21&quot; data-og-url=&quot;https://urbangy.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dfBT8m/hyNpp5FaMu/zVa5jWXATqj4yd5mpN7WA1/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286,https://scrap.kakaocdn.net/dn/cggphZ/hyNphzOmN1/zwoeyJz4zcMoC2y0zLaG4k/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286,https://scrap.kakaocdn.net/dn/bEPMLy/hyNpiMfN8g/GakdyObEH2dMiDfDfeMbYk/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286&quot;&gt;&lt;a href=&quot;https://urbangy.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://urbangy.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dfBT8m/hyNpp5FaMu/zVa5jWXATqj4yd5mpN7WA1/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286,https://scrap.kakaocdn.net/dn/cggphZ/hyNphzOmN1/zwoeyJz4zcMoC2y0zLaG4k/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286,https://scrap.kakaocdn.net/dn/bEPMLy/hyNpiMfN8g/GakdyObEH2dMiDfDfeMbYk/img.png?width=562&amp;amp;height=286&amp;amp;face=0_0_562_286');&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;간단한 Swift 알람 띄우기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;간단한 알림 메세지를 띄우는 방법을 알아보쟈! 먼저 알림에 띄우고 싶은 메세지를 정의한다. key, value 를 받아서 보여줄 메세지를 정의해보았다. let msg = &quot;key : \(key) , value : \(value)&quot; 이제 UIAlertCon..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;urbangy.tistory.com&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;프로젝트에 사용된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;전체 코드&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;아래 링크&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;에서 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/4week_DivisionGame&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/SuminPark-developer/4week_DivisionGame&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644815122459&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - SuminPark-developer/4week_DivisionGame: iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue)&quot; data-og-description=&quot;iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue). Contribute to SuminPark-developer/4week_DivisionGame development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/SuminPark-developer/4week_DivisionGame&quot; data-og-url=&quot;https://github.com/SuminPark-developer/4week_DivisionGame&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LdIpg/hyNpcZya0Q/3qiVdW1xw7oBgMgfKUnFKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/SuminPark-developer/4week_DivisionGame&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/SuminPark-developer/4week_DivisionGame&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LdIpg/hyNpcZya0Q/3qiVdW1xw7oBgMgfKUnFKk/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;GitHub - SuminPark-developer/4week_DivisionGame: iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;iOS 4주차 스터디 - 순발력 구분 게임(Thread : DispatchQueue). Contribute to SuminPark-developer/4week_DivisionGame development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&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>iOS | 앱 개발/디자이너와 함께하는 앱 런칭 프로젝트, 소프트스퀘어드xSSAC</category>
      <category>DispatchQueue</category>
      <category>Swift .pngData()</category>
      <category>Swift Audio</category>
      <category>Swift Thread</category>
      <category>swift timer</category>
      <category>순발력 구분 게임</category>
      <category>스레드</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/169</guid>
      <comments>https://developer-p.tistory.com/169#entry169comment</comments>
      <pubDate>Mon, 14 Feb 2022 14:26:24 +0900</pubDate>
    </item>
    <item>
      <title>[iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Proposal that distinguish quickly)</title>
      <link>https://developer-p.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;에 대한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;기획서&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;순발력 구분 게임&lt;/h2&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;전체 로직&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자는 start버튼을 눌러서 게임을 시작할 수 있다.&lt;/li&gt;
&lt;li&gt;시작되면 게임 배경 음악이 나온다.&lt;/li&gt;
&lt;li&gt;게임이 시작하면 타이머가 작동한다. (60초부터 1초씩 감소)&lt;/li&gt;
&lt;li&gt;올바르게 구분할 때 마다 점수가 증가한다.&lt;/li&gt;
&lt;li&gt;틀리게 구분하면 (시간이 남았더라도) 바로 게임이 종료된다.&lt;/li&gt;
&lt;li&gt;시간이 다 되면 게임이 종료되고, 지금까지 획득한 점수가 사용자의 최종 점수가 된다.&lt;/li&gt;
&lt;/ol&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;타이머 작동 부분.&lt;/li&gt;
&lt;li&gt;score가 계속 증가하는 부분.&lt;/li&gt;
&lt;li&gt;가운데 이미지 큐 계속 업데이트 해주는 부분.&lt;/li&gt;
&lt;/ol&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Start 화면 - 첫 화면에서는 게임 난이도 설정과 start버튼을 누를 수 있다.&lt;/li&gt;
&lt;li&gt;게임 중 화면 - 가운데 이미지 큐, 좌우버튼, 타이머, 점수판&lt;/li&gt;
&lt;li&gt;게임 결과 화면 - 최종 점수 표시, reStart : 1번화면으로 돌아감&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제작 참고 이미지&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;952&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/18W7Q/btrtb2pFexA/RjR5OikFOqc8wtUqJfWnOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/18W7Q/btrtb2pFexA/RjR5OikFOqc8wtUqJfWnOK/img.png&quot; data-alt=&quot;액션퍼즐패밀리 게임.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/18W7Q/btrtb2pFexA/RjR5OikFOqc8wtUqJfWnOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F18W7Q%2Fbtrtb2pFexA%2FRjR5OikFOqc8wtUqJfWnOK%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;323&quot; height=&quot;482&quot; data-origin-width=&quot;638&quot; data-origin-height=&quot;952&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;액션퍼즐패밀리 게임.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;페이지별 진행상황&lt;/b&gt;&lt;/u&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;및&lt;/span&gt;&lt;u&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;전체 코드&lt;/b&gt;&lt;/u&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;는&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;아래 링크&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;에서&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;확인&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #666666;&quot;&gt;하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/169&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer-p.tistory.com/169&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644816431134&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;[iOS 스터디/week4-2] 순발력 구분 게임 앱(Game App that distinguish quickly)&quot; data-og-description=&quot;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기에 대한&amp;nbsp;기획서 내용은 아래 링크에서 확인하실 수 있습니다. https://developer-p.tistory.com/168 [iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Propo..&quot; data-og-host=&quot;developer-p.tistory.com&quot; data-og-source-url=&quot;https://developer-p.tistory.com/169&quot; data-og-url=&quot;https://developer-p.tistory.com/169&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sHvtl/hyNpmnAfdH/SWEcGXUHZdQo8MF7jQlWs1/img.png?width=734&amp;amp;height=1614&amp;amp;face=0_0_734_1614,https://scrap.kakaocdn.net/dn/xT6SM/hyNpb7pp4O/ozw3NCCXYn5ZiVu9oI7gj0/img.png?width=734&amp;amp;height=1614&amp;amp;face=0_0_734_1614,https://scrap.kakaocdn.net/dn/zqCEI/hyNpfaVPSA/rkPBrt3Lq3OXAuiccWA1Kk/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952&quot;&gt;&lt;a href=&quot;https://developer-p.tistory.com/169&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer-p.tistory.com/169&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sHvtl/hyNpmnAfdH/SWEcGXUHZdQo8MF7jQlWs1/img.png?width=734&amp;amp;height=1614&amp;amp;face=0_0_734_1614,https://scrap.kakaocdn.net/dn/xT6SM/hyNpb7pp4O/ozw3NCCXYn5ZiVu9oI7gj0/img.png?width=734&amp;amp;height=1614&amp;amp;face=0_0_734_1614,https://scrap.kakaocdn.net/dn/zqCEI/hyNpfaVPSA/rkPBrt3Lq3OXAuiccWA1Kk/img.png?width=638&amp;amp;height=952&amp;amp;face=0_0_638_952');&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;[iOS 스터디/week4-2] 순발력 구분 게임 앱(Game App that distinguish quickly)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;순발력&amp;nbsp;구분&amp;nbsp;게임&amp;nbsp;어플&amp;nbsp;만들기에 대한&amp;nbsp;기획서 내용은 아래 링크에서 확인하실 수 있습니다. https://developer-p.tistory.com/168 [iOS 스터디/week4-1] 순발력 구분 게임 어플 만들기 기획서(Game App Propo..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer-p.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;b&gt;최종 결과물&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/426329918&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cNK3Ee/hyNpfvdbkw/kTr6690sXPElSvjVHL84zk/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634,https://scrap.kakaocdn.net/dn/cEtlI1/hyNpfBX4fR/se9JgJCTbtkAsT43QcVn0K/img.jpg?width=764&amp;amp;height=1634&amp;amp;face=0_0_764_1634&quot; data-video-width=&quot;400&quot; data-video-height=&quot;855&quot; data-video-origin-width=&quot;764&quot; data-video-origin-height=&quot;1634&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/426329918?service=daum_tistory&quot; width=&quot;400&quot; height=&quot;855&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;순발력 구분 게임 최종 결과물&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS | 앱 개발/디자이너와 함께하는 앱 런칭 프로젝트, 소프트스퀘어드xSSAC</category>
      <category>DispatchQueue</category>
      <category>ios timer</category>
      <category>swift timer</category>
      <category>Swift 타이머</category>
      <category>Xcode DispatchQueue</category>
      <category>순발력 구분 게임</category>
      <category>스레드</category>
      <category>타이머</category>
      <author>개발자P</author>
      <guid isPermaLink="true">https://developer-p.tistory.com/168</guid>
      <comments>https://developer-p.tistory.com/168#entry168comment</comments>
      <pubDate>Mon, 14 Feb 2022 14:00:01 +0900</pubDate>
    </item>
  </channel>
</rss>