Tryhelloworld 스크래핑

In [31]:
import requests
from bs4 import BeautifulSoup

curl="http://tryhelloworld.co.kr/challenge_codes/"
addurl="1"
tourl=curl+addurl

tourl
Out[31]:
'http://tryhelloworld.co.kr/challenge_codes/1'
In [8]:
response=requests.get(tourl)
html=response.text
response.encoding 
Out[8]:
'utf-8'
In [9]:
soup=BeautifulSoup(html,'html.parser')
print(soup.prettify())
<!DOCTYPE html>
<html lang="ko" xml:lang="ko" xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta charset="utf-8"/>
  <title>
   약수의 합 | helloworld
  </title>
  <link href="/assets/favicons/favicon-b96eb3abe91fabdc339362538681d66dc19c91754216473f4d8ae638a437cdbe.ico" rel="shortcut icon" type="image/x-icon"/>
  <link href="/assets/favicons/apple-touch-icon-5e46dd77716d09582f3b3628bc0bac081d8197889f502940a715a74b20c4828a.png" rel="apple-touch-icon" type="image/png"/>
  <meta content="어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다." name="description"/>
  <meta content="코딩 교육, 코딩, 프로그래밍, 실습, 생활코딩, 알고리즘, java" name="keywords"/>
  <meta content="611910075618516" property="fb:app_id"/>
  <meta content="약수의 합 | helloworld" itemprop="title name" name="twitter:title" property="og:title"/>
  <meta content="어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다." itemprop="description" name="twitter:description" property="og:description"/>
  <meta content="http://tryhelloworld.co.kr/assets/course/img_course_java@2x-0baf8ce0e3f1c4ef4cb8f627f0559daac65c2df92f8649607107658129dcdc52.png" itemprop="image primaryImageOfPage" name="twitter:image" property="og:image"/>
  <meta content="http://tryhelloworld.co.kr/challenge_codes/1" name="twitter:url" property="og:url"/>
  <meta content="website" property="og:type"/>
  <meta content="helloworld" property="og:site_name"/>
  <meta content="ko_KR" property="og:locale"/>
  <meta content="summary" name="twitter:card"/>
  <meta content="width=device-width, initial-scale=1.0,minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/>
  <meta content="true" name="HandheldFriendly"/>
  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
   <script type="text/javascript">
    window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"efcef7203b","applicationID":"16331087","transactionName":"JVgIF0YNDlRXQx5RCQdbCgZaBQdnUV5VVxJJRA4MQw==","queueTime":0,"applicationTime":30,"agent":""}
   </script>
   <script type="text/javascript">
    window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o||n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({1:[function(e,n,t){function r(){}function o(e,n,t){return function(){return i(e,[c.now()].concat(u(arguments)),n?null:this,t),n?void 0:this}}var i=e("handle"),a=e(2),u=e(3),f=e("ee").get("tracer"),c=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],d="api-",l=d+"ixn-";a(p,function(e,n){s[n]=o(d+n,!0,"api")}),s.addPageAction=o(d+"addPageAction",!0),s.setCurrentRouteName=o(d+"routeName",!0),n.exports=newrelic,s.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(e,n){var t={},r=this,o="function"==typeof n;return i(l+"tracer",[c.now(),e,t],r),function(){if(f.emit((o?"":"no-")+"fn-start",[c.now(),r,o],t),o)try{return n.apply(this,arguments)}finally{f.emit("fn-end",[c.now()],t)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,n){m[n]=o(l+n)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,c.now()])}},{}],2:[function(e,n,t){function r(e,n){var t=[],r="",i=0;for(r in e)o.call(e,r)&&(t[i]=n(r,e[r]),i+=1);return t}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],3:[function(e,n,t){function r(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(o<0?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=r},{}],4:[function(e,n,t){n.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,n,t){function r(){}function o(e){function n(e){return e&&e instanceof r?e:e?f(e,u,i):i()}function t(t,r,o,i){if(!d.aborted||i){e&&e(t,r,o);for(var a=n(o),u=m(t),f=u.length,c=0;c<f;c++)u[c].apply(a,r);var p=s[y[t]];return p&&p.push([b,t,r,a]),a}}function l(e,n){v[e]=m(e).concat(n)}function m(e){return v[e]||[]}function w(e){return p[e]=p[e]||o(t)}function g(e,n){c(e,function(e,t){n=n||"feature",y[t]=n,n in s||(s[n]=[])})}var v={},y={},b={on:l,emit:t,get:w,listeners:m,context:n,buffer:g,abort:a,aborted:!1};return b}function i(){return new r}function a(){(s.api||s.feature)&&(d.aborted=!0,s=d.backlog={})}var u="nr@context",f=e("gos"),c=e(2),s={},p={},d=n.exports=o();d.backlog=s},{}],gos:[function(e,n,t){function r(e,n,t){if(o.call(e,n))return e[n];var r=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[n]=r,r}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],handle:[function(e,n,t){function r(e,n,t,r){o.buffer([e],r),o.emit(e,n,t)}var o=e("ee").get("handle");n.exports=r,r.ee=o},{}],id:[function(e,n,t){function r(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");n.exports=r},{}],loader:[function(e,n,t){function r(){if(!x++){var e=h.info=NREUM.info,n=d.getElementsByTagName("script")[0];if(setTimeout(s.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&n))return s.abort();c(y,function(n,t){e[n]||(e[n]=t)}),f("mark",["onload",a()+h.offset],null,"api");var t=d.createElement("script");t.src="https://"+e.agent,n.parentNode.insertBefore(t,n)}}function o(){"complete"===d.readyState&&i()}function i(){f("mark",["domContent",a()+h.offset],null,"api")}function a(){return E.exists&&performance.now?Math.round(performance.now()):(u=Math.max((new Date).getTime(),u))-h.offset}var u=(new Date).getTime(),f=e("handle"),c=e(2),s=e("ee"),p=window,d=p.document,l="addEventListener",m="attachEvent",w=p.XMLHttpRequest,g=w&&w.prototype;NREUM.o={ST:setTimeout,CT:clearTimeout,XHR:w,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var v=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1026.min.js"},b=w&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),h=n.exports={offset:u,now:a,origin:v,features:{},xhrWrappable:b};e(1),d[l]?(d[l]("DOMContentLoaded",i,!1),p[l]("load",r,!1)):(d[m]("onreadystatechange",o),p[m]("onload",r)),f("mark",["firstbyte",u],null,"api");var x=0,E=e(4)},{}]},{},["loader"]);
   </script>
   <meta content="#333333" name="theme-color">
    <link data-turbolinks-track="false" href="/assets/application-40ebe7caab222ebfefbda5693e13a6e9cedb3400fd02efd0ca74bd431aa5073b.css" media="all" rel="stylesheet"/>
    <meta content="authenticity_token" name="csrf-param"/>
    <meta content="u8OpuM4t7hC/zXXzq02CRvs0iAMfvj/Di1CqjSisPbeRzK9uKD8lVzm84WVN/1RVLerurvPQIkFwjlDq875g6w==" name="csrf-token"/>
    <script type="text/javascript">
     (function (i, s, o, g, r, a, m) {
    i['GoogleAnalyticsObject'] = r;
    i[r] = i[r] || function () {
          (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date();
    a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
    a.async = 1;
    a.src = g;
    m.parentNode.insertBefore(a, m)
  })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

  ga('create', 'UA-72680702-2', 'auto', {'userId': 'G1653993'});
  ga('send', 'pageview');
    </script>
   </meta>
  </meta>
 </head>
 <body class="challenge-codes challenge-codes-show" data-action="show" data-controller="challenge_codes">
  <div class="l-site">
   <div class="l-nav">
    <nav class="nav">
     <ul class="navbar-nav">
      <li class="nav-link">
       <a class="nav-link" href="http://tryhelloworld.co.kr/">
        helloworld
       </a>
      </li>
      <li class="nav-link">
       <a class="nav-link" href="http://tryhelloworld.co.kr/courses">
        모든 코스
       </a>
      </li>
      <li class="nav-link">
       <a class="nav-link" href="http://tryhelloworld.co.kr/challenges">
        알고리즘 문제
       </a>
      </li>
      <li class="nav-link">
       <a class="nav-link" href="https://tryhelloworld.co.kr/users/signup">
        계정만들기
       </a>
      </li>
      <li class="nav-link">
       <a class="nav-link" href="https://tryhelloworld.co.kr/users/signin">
        로그인
       </a>
      </li>
     </ul>
    </nav>
   </div>
   <div class="l-page">
    <!-- navigation bar //-->
    <nav class="navbar top-navbar">
     <div class="container-flex-center">
      <div class="menu-sm">
       <div class="menu-hamburger">
       </div>
      </div>
      <a class="logo-sm" href="http://tryhelloworld.co.kr/">
       <span class="hw-icons-logo-s">
        helloworld
       </span>
      </a>
      <div class="row-flex-space-between">
       <!-- Brand -->
       <div class="col-flex flex-center">
        <a class="navbar-brand" href="http://tryhelloworld.co.kr/">
         <span class="hw-icons-logo-l">
          helloworld
         </span>
        </a>
        <h4 class="nav-title">
         <a href="http://tryhelloworld.co.kr/challenges">
          알고리즘 문제
         </a>
        </h4>
        <!-- Links -->
       </div>
       <div class="col-flex flex-center right-menu">
        <ul class="nav navbar-nav">
         <li class="nav-item">
          <a class="nav-link btn signup" href="https://tryhelloworld.co.kr/users/signup">
           계정만들기
          </a>
         </li>
         <li class="nav-item">
          <a class="nav-link btn signin" href="https://tryhelloworld.co.kr/users/signin">
           로그인
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
    </nav>
    <div class="main">
     <div class="challenge-nav level-group" data-level-group="first">
      <div class="title">
       <span class="level level-color-border">
        Level 1
       </span>
       <h4>
        약수의 합
       </h4>
      </div>
      <div class="languages">
       <a class="" href="http://tryhelloworld.co.kr/challenge_codes/146">
        <span class="hw-icons-cpp gray-color">
         cpp
        </span>
       </a>
       <a class="active" href="http://tryhelloworld.co.kr/challenge_codes/1">
        <span class="hw-icons-java ">
         java
        </span>
       </a>
       <a class="" href="http://tryhelloworld.co.kr/challenge_codes/3">
        <span class="hw-icons-javascript gray-color">
         javascript
        </span>
       </a>
       <a class="" href="http://tryhelloworld.co.kr/challenge_codes/2">
        <span class="hw-icons-python3 gray-color">
         python3
        </span>
       </a>
      </div>
     </div>
     <div class="challenge-content language level-group" data-challenge-code-id="1" data-language="java" data-level-group="first">
      <form class="challenge-form">
       <div class="challenge">
        <div class="main-section">
         <div class="content-block">
          <div class="guide-section" id="tour1">
           <div class="markdown">
            <p>
             어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.
            </p>
           </div>
           <div class="button-block">
            <a data-remote="true" href="http://tryhelloworld.co.kr/bug_reports/new?challenge_code_id=1">
             <span class="hw-icons-bug">
              bug
             </span>
             오류 신고하기
            </a>
            <ul class="challenge-share list-inline">
             <li class="list-inline-item">
              <a href="#" onclick="return Kairos.share.facebook('http://tryhelloworld.co.kr/challenge_codes/1');">
               <span class="hw-icons-facebook">
                facebook
               </span>
              </a>
             </li>
             <li class="list-inline-item">
              <a href="#" onclick="return Kairos.share.twitter('약수의 합 | helloworld\\n어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.', 'http://tryhelloworld.co.kr/challenge_codes/1');">
               <span class="hw-icons-twitter">
                twitter
               </span>
              </a>
             </li>
             <li class="list-inline-item">
              <a href="#" onclick="return Kairos.share.google('http://tryhelloworld.co.kr/challenge_codes/1');">
               <span class="hw-icons-google">
                google
               </span>
              </a>
             </li>
            </ul>
           </div>
           <div class="challenge-sm-nav">
            <h5>
             언어선택
            </h5>
            <div class="languages">
             <a class="" href="http://tryhelloworld.co.kr/challenge_codes/146">
              <span class="hw-icons-cpp gray-color">
               cpp
              </span>
             </a>
             <a class="active" href="http://tryhelloworld.co.kr/challenge_codes/1">
              <span class="hw-icons-java ">
               java
              </span>
             </a>
             <a class="" href="http://tryhelloworld.co.kr/challenge_codes/3">
              <span class="hw-icons-javascript gray-color">
               javascript
              </span>
             </a>
             <a class="" href="http://tryhelloworld.co.kr/challenge_codes/2">
              <span class="hw-icons-python3 gray-color">
               python3
              </span>
             </a>
            </div>
           </div>
          </div>
          <div class="run-section">
           <div class="code-section" id="tour2" onkeyup="Kairos.exercises.resize_editor(this);">
            <div class="tab-header">
             <ul class="nav nav-pills">
              <li class="nav-item">
               <a class="btn-tab nav-link active" data-filename="SumDivisor.java" href="#">
                SumDivisor.java
               </a>
              </li>
             </ul>
            </div>
            <div class="editor">
             <textarea hidden="" id="code" name="code">class SumDivisor {
	public int sumDivisor(int num) {
		int answer = 0;

		return answer;
	}

	// 아래는 테스트로 출력해 보기 위한 코드입니다.
	public static void main(String[] args) {
		SumDivisor c = new SumDivisor();
		System.out.println(c.sumDivisor(12));
	}
}
</textarea>
            </div>
           </div>
           <div class="output-section" id="tour3">
            <div class="tab-header">
             <ul class="nav nav-pills">
              <li class="nav-item">
               <a class="nav-link active" data-toggle="tab" href="#output">
                실행결과
               </a>
              </li>
             </ul>
             <div class="resizer-wrap">
              <span class="hw-icons-resizer ">
               resizer
              </span>
             </div>
            </div>
            <div class="console tab-content">
             <div class="console-output tab-pane fade in active" id="output">
              실행 결과가 여기에
                  표시됩니다.
             </div>
            </div>
           </div>
           <div class="button-block" id="tour4">
            <div class="left">
             <a class="btn opacity-30" href="#" onclick='swal({ title: "문제를 먼저 풀어야 다른 사람의 풀이를 볼 수 있습니다.", type: "info", confirmButtonClass: "btn-danger", confirmButtonText: "확인" }); return false;'>
              <span class="hw-icons-check">
              </span>
              다른 사람의 풀이
             </a>
            </div>
            <div class="right">
             <button class="btn" type="reset">
              초기화
             </button>
             <button class="btn run-code" type="button">
              실행
             </button>
             <button class="btn level-color-btn submit-code" type="button">
              제출
             </button>
            </div>
           </div>
          </div>
         </div>
        </div>
       </div>
      </form>
     </div>
    </div>
   </div>
  </div>
  <div aria-hidden="true" aria-labelledby="mLabel" class="modal fade" id="modal-dialog" role="dialog" tabindex="-1">
  </div>
  <script data-turbolinks-track="false" src="/assets/application-f5a42ab6eb8065f8744f50fa6d0f37c3c4a20add09884a5171689ba1b86c8613.js">
  </script>
  <script type="text/javascript">
   $(document).ready(function () {
    try {
      Kakao.init('92f2d51a0a47b0234bd5ee8e908ce958');
    } catch (e) {
      Rollbar.error(e);
    }
  });

  window.fbAsyncInit = function () {
    FB.init({
      appId: '611910075618516',
      xfbml: true,
      version: 'v2.5'
    });
  };

  (function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {
      return;
    }
    js = d.createElement(s);
    js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
  </script>
  <noscript>
   이 사이트의 기능을 모두 활용하기 위해서는 자바스크립트를 활성화 시킬 필요가 있습니다.
   <a href="http://www.enable-javascript.com/ko/" target="_blank">
    브라우저에서 자바스크립트를 활성화하는 방법
   </a>
   을 참고 하세요.
  </noscript>
 </body>
</html>

In [11]:
soup.select('div.markdown p')
Out[11]:
[<p>어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.</p>]
In [14]:
for i in soup.select('div.markdown p'):
    print(i.text)
어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.
In [18]:
soup.select('div.title')
Out[18]:
[<div class="title">
 <span class="level level-color-border">Level 1</span>
 <h4>약수의 합</h4>
 </div>]
In [30]:
for i in soup.select('div.title'):
    print(i.select('span')[0].text)
    print(i.select('h4')[0].text)
Level 1
약수의 합

코드 정리

In [43]:
import requests
from bs4 import BeautifulSoup

dis1=[]
for k in range(1,400):
    curl="http://tryhelloworld.co.kr/challenge_codes/"
    addurl=str(k)
    tourl=curl+addurl
    response=requests.get(tourl)
    html=response.text
    soup=BeautifulSoup(html,'html.parser')
    
    for i in soup.select('div.title'):
        if not i.select('h4')[0].text in dis1:
            print("*"*200)
            print(i.select('span')[0].text, i.select('h4')[0].text)
            for j in soup.select('div.markdown p'):
                print(j.text)
#                 print("-"*100)
                dis1.append(i.select('h4')[0].text)

    

    
********************************************************************************************************************************************************************************************************
Level 1 약수의 합
어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 피보나치 수
피보나치 수는 F(0) = 0, F(1) = 1일 때, 2 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 점화식입니다. 2 이상의 n이 입력되었을 때, fibonacci 함수를 제작하여 n번째 피보나치 수를 반환해 주세요. 예를 들어 n = 3이라면 2를 반환해주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 행렬의 덧셈
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환해 주세요.
예를 들어 2x2 행렬인 A = ((1, 2), (2, 3)), B = ((3, 4), (5, 6)) 가 주어지면, 같은 2x2 행렬인 ((4, 6), (7, 9))를 반환하면 됩니다.(어떠한 행렬에도 대응하는 함수를 완성해주세요.)
********************************************************************************************************************************************************************************************************
Level 1 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. collatz 함수를 만들어 입력된 수가 몇 번 만에 1이 되는지 반환해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.
********************************************************************************************************************************************************************************************************
Level 2 소수 찾기
numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다. 
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요. 
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환
********************************************************************************************************************************************************************************************************
Level 3 시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 
A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다.
보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 ceasar 함수를 완성해 보세요.
********************************************************************************************************************************************************************************************************
Level 3 야근 지수
야근 지수
회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 22 + 22 + 22 = 12가 되어 12를 반환해 줍니다.
********************************************************************************************************************************************************************************************************
Level 3 N개의 최소공배수
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. nlcm 함수를 통해 n개의 숫자가 입력되었을 때, 최소공배수를 반환해 주세요. 예를들어 [2,6,8,14] 가 입력된다면 168을 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 3 멀리 뛰기
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 출력하는 jumpCase 함수를 완성하세요. 예를 들어 4가 입력된다면, 5를 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 4 땅따먹기 게임
영희는 땅따먹기 게임에 푹 빠졌습니다. 땅따먹기 게임의 땅은 총 N행 4열로 나누어져 있고, 모든 칸에는 점수가 쓰여 있습니다. 땅을 밟으면서 한 행씩 내려올 때, 영희는 각 행의 4칸 중 1칸만 밟으면서 내려올 수 있습니다. 땅따먹기 게임에는 같은 열을 연속해서 밟을 수가 없는 특수 규칙이 있습니다. 즉, 1행에서 (5)를 밟았다면, 2행의 (8)은 밟을 수가 없게 됩니다. 마지막 행까지 모두 내려왔을 때, 점수가 가장 높은 사람이 게임의 승자가 됩니다. 여러분이 hopscotch 함수를 제작하여 영희가 최대 몇 점을 얻을 수 있는지 알려주세요. 예를 들어
1 2 3 5
5 6 7 8
4 3 2 1
의 땅이 있다면, 영희는 각 줄에서 (5), (7), (4) 땅을 밟아 16점을 최고점으로 받을 수 있으며, hopscotch 함수에서는 16을 반환해주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 4 최고의 집합
자연수 N개로 이루어진 집합 중에, 각 원소의 합이 S가 되는 수의 집합은 여러 가지가 존재합니다. 최고의 집합은, 위의 조건을 만족하는 집합 중 각 원소의 곱이 최대가 되는 집합을 의미합니다. 집합 원소의 개수 n과 원소들의 합 s가 주어지면, 최고의 집합을 찾아 원소를 오름차순으로 반환해주는 bestSet 함수를 만들어 보세요. 만약 조건을 만족하는 집합이 없을 때는 배열 맨 앞에 –1을 담아 반환하면 됩니다. 예를 들어 n=3, s=13이면 [4,4,5]가 반환됩니다.
(자바는 집합이 없는 경우 크기가 1인 배열에 -1을 담아 반환해주세요.)
********************************************************************************************************************************************************************************************************
Level 4 숫자의 표현
수학을 공부하던 민지는 재미있는 사실을 발견하였습니다. 그 사실은 바로 연속된 자연수의 합으로 어떤 숫자를 표현하는 방법이 여러 가지라는 것입니다. 예를 들어, 15를 표현하는 방법은
(1+2+3+4+5)
(4+5+6)
(7+8)
(15)
로 총 4가지가 존재합니다. 숫자를 입력받아 연속된 수로 표현하는 방법을 반환하는 expressions 함수를 만들어 민지를 도와주세요. 예를 들어 15가 입력된다면 4를 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 5 하노이의 탑
하노이의 탑은 대표적인 퍼즐의 일종입니다. 세 개의 기둥이 있고 맨 왼쪽의 기둥에는 원판의 크기 순서대로 N개가 쌓여 있습니다. 
 
이렇게 쌓여 있는 원판을 가장 오른쪽 기둥으로 모두 옮겨야 합니다.
단, 한 번에 원판을 하나씩 이동시킬 수 있고, 큰 원판을 작은 원판 위에 쌓을 수 없습니다.
N개의 원판은 총 2N -1 번의 과정을 거쳐 이동할 수 있습니다. 하지만 어떠한 과정으로 원판을 옮겨야 2N -1 번만에 옮길 수 있는지는 아직 모릅니다. 원판이 N개 있을 때, Hanoi 함수에서 어떠한 과정으로 2N -1 번만에 옮길 수 있는지 과정을 리턴하세요. 
리턴값의 표기 방법은 다음과 같습니다.
이러한 이동 순서를 담는 배열을 리턴하면 됩니다. 예를들어 N이 2라면 아래 그림과 같이 옮길 수 있으므로

리턴값은 [ [1,2], [1,3], [2,3] ]입니다.
********************************************************************************************************************************************************************************************************
Level 5 124나라의 숫자
1,2,4  세 개의 숫자만 쓰는 124나라가 있습니다. 
124나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법의 수 N이 입력될 때, 124나라에서 쓰는 숫자로 변환하여 반환해주는 change124 함수를 완성해 보세요. 예를 들어 N = 10이면 “41”를 반환해주면 됩니다.
리턴 타입은 문자열입니다.
********************************************************************************************************************************************************************************************************
Level 5 줄 서는 방법
N명의 사람이 있을 때, N명의 사람을 서로 다른 방법으로 줄을 세우는 방법은 N!개가 존재합니다.
이 때 각각의 사람들에게 번호를 매겨서 줄을 서는 방법을 표시합니다. 예를들어 [1,2,3,4]는 1번 사람이 제일 앞에, 2번 사람이 2두번째에... 서 있는 상태를 나타냅니다.
이러한 각각의 방법을 사전순으로 정렬했을때 K번째 방법으로 줄을 세우는 방법을 찾아 보려고 합니다.
예를 들어 3명의 사람이 있다면 총 6개의 방법은 다음과 같이 정렬할 수 있습니다.
이 때 K가 5이면 [3,1,2]가 그 방법입니다.
사람의 수 N과 순서 K를 입력받아 K번째 방법으로 줄을 세우는 setAlign 함수를 완성해 보세요. 예를 들어 setAlign(3,5)를 입력받는다면 [3,1,2]를 리턴해주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 5 2 x n 타일링
1x1 정사각형 2개가 붙어 있는 타일이 있습니다. 이 타일을 이용하여 총 2xN 의 보드판을 채우려고 합니다. 타일은 가로, 세로 두 가지 방향으로 배치할 수 있습니다. 
보드판의 길이 N이 주어질 때, 2xN을 타일로 채울 수 있는 경우의 수를 반환하는 tiling 함수를 완성하세요. 
예를들어 N이 7일 경우 아래 그림이 타일을 배치할 수 있는 한 경우입니다.

단, 리턴하는 숫자가 매우 커질 수도 있으므로 숫자가 5자리를 넘어간다면 맨 끝자리 5자리만 리턴하세요.예를 들어 N = 2일 경우 가로로 배치하는 경우와 세로로 배치하는 경우가 있을 수 있으므로 2를 반환해 주면 됩니다. 하지만 만약 답이 123456789라면 56789만 반환해주면 됩니다. 리턴하는 숫자의 앞자리가 0일 경우 0을 제외한 숫자를 리턴하세요. 리턴타입은 정수형이어야 합니다.
********************************************************************************************************************************************************************************************************
Level 6 버스 여행
버스정류장 N개가 있습니다. 정류장에는 1번부터 N번까지의 번호가 매겨져 있습니다.
2차원 배열에서 A번 정류장에서 B번 정류장으로 가는 버스가 있다면 O, 없다면 X로 표시합니다.
예를들어 3개의 버스정류장이 있을 때
X O X
X X O
O X X
와 같이 표시하면 
이 표를 이용해서 버스를 계속 갈아타서라도 갈 수 있는 정류장을 모두 표시하는 2차원 배열을 리턴하세요.
위의 표와 같이 1번에서 2번 정류장으로, 그리고 2번에서 3번 정류장으로 가는 버스가 있다면, 한 번 갈아타면 1번에서 3번 정류장으로 갈 수 있다는 뜻이 됩니다. 
busTour 함수를 통해 모든 정류장에서 출발해서 도달할 수 있는지를 표시하는 배열을 리턴하세요.
입력이 
X O X
X X O
O X X
라면 다음과 같이 리턴하면 됩니다.
O O O
O O O
O O O
********************************************************************************************************************************************************************************************************
Level 6 과자 많이 먹기
과자를 좋아하는 동우는 책상 위에 일렬로 놓아진 과자를 발견하였습니다. 과자에는 맛을 숫자로 평가한 종이가 붙어 있습니다. 동우는 맨 왼쪽부터 순서대로 과자를 먹기로 하였습니다. 동우는 먹을 과자를 고를 때 이전에 먹은 과자보다 맛이 더 좋은 과자만 먹습니다. 
제일 처음에 맛이 3인 과자를 먹었다면, 다음에는 4보다 작은 맛의 과자는 먹지 않습니다. 
책상위에 놓인 과자의 맛이 입력되면, 동우가 최대 과자를 몇 개를 먹을 수 있는지 반환해주는 eatCookie 함수를 완성하세요.
예를 들어 [1, 4, 2, 6, 3, 4, 1, 5] 가 입력된다면 동우는 1, 3, 5, 6, 8번째 과자(각각의 맛은 1, 2, 3, 4, 5)를 골라 총 5개를 먹을 수 있고, 5개보다 더 많이 먹을 수 있는 방법은 없으므로 5를 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 6 거스름돈
물건 값보다 많은 돈을 낼 경우 거스름돈을 돌려주게 됩니다. 거스름돈은 한 금액의 돈으로 줄 수도 있지만, 여러 금액의 동전을 섞어 거슬러 줄 수 있습니다. 
거스름돈이 N원일 때, 1원, 2원, 5원 동전이 있다면 몇 가지 방법으로 돈을 거슬러 줄 수 있을까요? change 함수를 통해 경우의 수를 반환해주는 함수를 만들어 보세요. K에는 사용할 수 있는 동전의 종류가 들어 있습니다.
예를 들어, N = 5이고 K = [1, 2, 5]이면 1원, 2원, 5원 동전을 가지고 5원을 맞추는 경우의 수를 찾으면 됩니다.
이렇게 총 4가지 경우가 있으면, 4를 리턴해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 6 3 x n 타일링
1x1 정사각형 2개가 붙어 있는 타일이 있습니다. 이 타일을 이용하여 총 3xN 의 보드판을 채우려고 합니다. 타일은 가로, 세로 두 가지 방향으로 배치할 수 있습니다.
보드판의 길이 N이 주어질 때, 3xN을 타일로 채울 수 있는 경우의 수를 반환하는 tiling 함수를 완성하세요.
단, 리턴하는 숫자가 매우 커질 수도 있으므로 숫자가 5자리를 넘어간다면 맨 끝자리 5자리만 리턴하세요.예를 들어 N = 2일 경우 3을 반환해 주면 됩니다. 하지만 만약 답이 123456789라면 56789만 반환해주면 됩니다. 리턴하는 숫자의 앞자리가 0일 경우 0을 제외한 숫자를 리턴하세요. 리턴타입은 정수형이어야 합니다.
참고: 이 문제는 2 x n 타일링 문제와 유사합니다. 문제이해가 어려우면 2 x n 타일링 문제를 먼저 풀어 보세요.
********************************************************************************************************************************************************************************************************
Level 7 N-Queen
체스판은 8 * 8 개의 정사각형으로 흰 칸, 검은 칸이 교차되며 나누어져 있습니다. 체스의 기물 중 가장 강력한 말은 퀸으로, 퀸은 자신의 위치에서 가로, 세로, 대각선에 있는 모든 적을 공격할 수 있습니다. 
만약 N * N 개의 정사각형으로 된 체스판이 있다면, 서로 공격당하지 않도록 N개의 퀸을 둘 수 있는 경우는 몇 가지가 있을까요? 
예를들어 일반적인 8 * 8인 체스판에서 퀸을 다음 그림과 같이 배치하면 모든 퀸은 서로를 공격하고 있지 않으므로 둘 수 있는 하나의 경우가 됩니다.

nQueen 함수를 제작하여 경우의 수를 반환하여 주세요. 예를 들어 N = 3이라면 0을 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 7 숫자 블록
A시에서는 0으로 된 도로에 숫자 블록을 설치하기로 하였습니다. 숫자 블록의 규칙은 다음과 같습니다.
블록의 번호가 n일 때, 가장 처음 블록은 n*2 번 째 위치에 설치합니다. 그 다음은 n*3, 그 다음은 n*4, ... 로 진행합니다. 만약 기존에 블록이 깔려있는 자리라면 그 블록을 빼고 새로운 블록으로 집어넣습니다.
예를들어 
이렇게 3번 블록까지 설치하고 나면 첫 10개의 블록은  0, 1, 1, 2, 1, 3, 1, 2, 3, 2이 됩니다.
A시는 길이가 100조나 되는 도로에 1번 블록부터 시작하여 1000만 번 블록까지 위의 규칙으로 모두 놓았습니다. 이 때, 두 수 a와 b를 입력받아 a와 b번 사이에 어떠한 블록이 깔렸는지 블록의 숫자를 배열로 반환하는 numberBlock 함수를 완성하세요.
예를 들어 99999999999990과 100000000000000가 입력된다면
[376830,9999997,7973704,9052401,5422,6414455,9999998,839,14,9999999,10000000]을 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 8 올바른 괄호
올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미합니다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 됩니다. 괄호를 이리저리 움직이며 올바른 괄호를 찾던 민호는 N개의 괄호쌍이 있을 때, 올바른 괄호를 만들 수 있는 경우의 수가 궁금해졌습니다. 괄호 쌍의 개수 N개가 주어졌을 때, 경우의 수를 반환하는 parenthesisCase 함수를 완성해 보세요. 예를 들어 
********************************************************************************************************************************************************************************************************
Level 8 최적의 행렬 곱셈
크기가 X*Y 인 행렬 A와 Y*Z인 행렬 B가 있을 때, 두 행렬을 곱하기 위해 총 X*Y*Z 번의 곱셈을 해야 합니다.
하지만 곱셈 순서를 바꾸면 곱셈을 더 적게 할 수 있습니다. 예를 들어, 5*3 행렬 A, 3*2 행렬 B, 2*6인 행렬 C가 있다면 A와 B를 먼저 곱하고 C를 곱하는 것이, B와 C를 곱한 다음 A를 곱하는 것보다 곱셈을 더 적게 할 수 있습니다.
행렬의 곱셈을 수행하면서 필요한 최소한의 곱셈 횟수를 알려주는 matrix 함수를 만들어 보세요.
입력값의 형식은 다음과 같습니다.
[[5,3] [3,2] [2,6]]
이 경우 
의 곱을 계산하는 연산이 분석의 대상입니다.
이때 matrix 함수에서는 90을 반환해야 합니다.
********************************************************************************************************************************************************************************************************
Level 8 선입선출 스케줄링
처리해야 할 작업이 N개가 대기중이고 이를 처리하기위한 CPU가 있습니다. N개의 작업은 모두 동일한 작업이라고 가정합니다.
작업을 수행하는 CPU에는 여러개의 코어가 있는데요. 코어별로 한 작업당 걸리는 시간이 다릅니다. 한 코어에서 작업이 끝나면 빈 코어에 다음 작업이 바로 들어가며, 2개 이상의 코어가 남을 경우 앞의 코어부터 채워줍니다. 처리해야 될 작업의 개수 n과, 각 코어의 처리 시간이 담긴 배열 core가 주어질 때, 마지막 작업이 들어가는 코어의 번호를 반환해주는 getCoreNumber 함수를 완성하세요.
예를 들어 작업이 6개이고, CPU의 코어별 처리 시간이 [1,2,3] 이라면 처음 3개의 작업은 각각 1,2,3번에 들어가고, 1의 시간 뒤 1번 코어에 4번째 작업, 다시 1의 시간 뒤 1,2번 코어에 5,6번 째 작업이 들어가므로 2를 반환해 주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 가운데 글자 가져오기
getMiddle메소드는 하나의 단어를 입력 받습니다. 단어를 입력 받아서 가운데 글자를 반환하도록 getMiddle메소드를 만들어 보세요. 단어의 길이가 짝수일경우 가운데 두글자를 반환하면 됩니다.
예를들어 입력받은 단어가 power이라면 w를 반환하면 되고, 입력받은 단어가 test라면 es를 반환하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 가장 긴 팰린드롬
앞뒤를 뒤집어도 똑같은 문자열을 palindrome이라고 합니다.
longest_palindrom함수는 문자열 s를 매개변수로 입력받습니다.
s의 부분문자열중 가장 긴 palindrom의 길이를 리턴하는 함수를 완성하세요.
예를들어 s가 "토마토맛토마토"이면 7을 리턴하고 "토마토맛있어"이면 3을 리턴합니다.
********************************************************************************************************************************************************************************************************
Level 1 같은 숫자는 싫어
no_continuous함수는 스트링 s를 매개변수로 입력받습니다.
s의 글자들의 순서를 유지하면서, 글자들 중 연속적으로 나타나는 아이템은 제거된 배열(파이썬은 list)을 리턴하도록 함수를 완성하세요.
예를들어 다음과 같이 동작하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 괄호 확인하기
is_pair함수는 문자열 s를 매개변수로 입력받습니다.
s에 괄호가 알맞게 짝지어져 있으면 True를 아니면 False를 리턴하는 함수를 완성하세요.
예를들어 s가 "(hello)()"면 True이고, ")("이면 False입니다.
s가 빈 문자열("")인 경우는 없습니다.
********************************************************************************************************************************************************************************************************
Level 1 나누어 떨어지는 숫자 배열
divisible 메소드는 int형 배열 array와 int divisor를 매개변수로 받습니다.
array의 각 element 중 divisor로 나누어 떨어지는 값만 포함하는 새로운 배열을 만들어서 반환하도록 divisible에 코드를 작성해 보세요.
예를들어 array가 {5, 9, 7, 10}이고 divisor가 5이면 {5, 10}을 리턴해야 합니다.
********************************************************************************************************************************************************************************************************
Level 2 두 정수 사이의 합
adder함수는 정수 a, b를 매개변수로 입력받습니다.
두 수와 두 수 사이에 있는 모든 정수를 더해서 리턴하도록 함수를 완성하세요. a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
예를들어 a가 3, b가 5이면 12를 리턴하면 됩니다.
a, b는 음수나 0, 양수일 수 있으며 둘의 대소 관계도 정해져 있지 않습니다.
********************************************************************************************************************************************************************************************************
Level 1 딕셔너리 정렬
딕셔너리는 들어있는 값에 순서가 없지만, 키를 기준으로 정렬하고 싶습니다. 그래서 키와 값을 튜플로 구성하고, 이를 순서대로 리스트에 넣으려고 합니다.
예를들어 {"김철수":78, "이하나":97, "정진원":88}이 있다면 각각의 키와 값을
과 같이 튜플로 분리하고 키를 기준으로 정렬해서 다음과 같은 리스트를 만들면 됩니다.
[ ("김철수", 78), ("이하나", 97), ("정진원", 88) ]
다음 sort_dictionary 함수를 완성해 보세요.
********************************************************************************************************************************************************************************************************
Level 1 문자열 내 마음대로 정렬하기
strange_sort함수는 strings와 n이라는 매개변수를 받아들입니다.
strings는 문자열로 구성된 리스트인데, 각 문자열을 인덱스 n인 글자를 기준으로 정렬하면 됩니다.
예를들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1인 문자 u, e ,a를 기준으로 정렬해야 하므로 결과는 ["car", "bed", "sun"]이 됩니다.
strange_sort함수를 완성해 보세요.
********************************************************************************************************************************************************************************************************
Level 1 문자열 내 p와 y의 개수
numPY함수는 대문자와 소문자가 섞여있는 문자열 s를 매개변수로 입력받습니다.
s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 리턴하도록 함수를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다.
예를들어 s가 "pPoooyY"면 True를 리턴하고 "Pyy"라면 False를 리턴합니다.
********************************************************************************************************************************************************************************************************
Level 1 문자열 내림차순으로 배치하기
reverseStr 메소드는 String형 변수 str을 매개변수로 입력받습니다.
str에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 String을 리턴해주세요.
str는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
예를들어 str이 "Zbcdefg"면 "gfedcbZ"을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 문자열 다루기 기본
alpha_string46함수는 문자열 s를 매개변수로 입력받습니다.
s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수를 완성하세요.
예를들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다
********************************************************************************************************************************************************************************************************
Level 1 삼각형출력하기
printTriangle 메소드는 양의 정수 num을 매개변수로 입력받습니다.
다음을 참고해 *(별)로 높이가 num인 삼각형을 문자열로 리턴하는 printTriangle 메소드를 완성하세요
printTriangle이 return하는 String은 개행문자('\n')로 끝나야 합니다.
높이가 3일때
높이가 5일때
********************************************************************************************************************************************************************************************************
Level 1 서울에서김서방찾기
findKim 함수(메소드)는 String형 배열 seoul을 매개변수로 받습니다.
seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하세요.
seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
********************************************************************************************************************************************************************************************************
Level 1 수박수박수박수박수박수?
water_melon함수는 정수 n을 매개변수로 입력받습니다.
길이가 n이고, 수박수박수...와 같은 패턴을 유지하는 문자열을 리턴하도록 함수를 완성하세요.
예를들어 n이 4이면 '수박수박'을 리턴하고 3이라면 '수박수'를 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 스트링을 숫자로 바꾸기
strToInt 메소드는 String형 str을 매개변수로 받습니다.
str을 숫자로 변환한 결과를 반환하도록 strToInt를 완성하세요.
예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.
********************************************************************************************************************************************************************************************************
Level 1 역삼각형 출력하기
printReversedTriangle 메소드는 양의 정수 num을 매개변수로 입력받습니다.
다음을 참고해 *(별)로 높이가 num인 삼각형을 문자열로 리턴하는 printReversedTriangle 메소드를 완성하세요
높이(num)가 3일때 다음과 같은 문자열을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 이상한 문자만들기
toWeirdCase함수는 문자열 s를 매개변수로 입력받습니다.
문자열 s에 각 단어의 짝수번째 인덱스 문자는 대문자로, 홀수번째 인덱스 문자는 소문자로 바꾼 문자열을 리턴하도록 함수를 완성하세요.
예를 들어 s가 "try hello world"라면 첫 번째 단어는 "TrY", 두 번째 단어는 "HeLlO", 세 번째 단어는 "WoRlD"로 바꿔 "TrY HeLlO WoRlD"를 리턴하면 됩니다.
주의 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단합니다.
********************************************************************************************************************************************************************************************************
Level 1 자릿수더하기
sum_digit함수는 자연수를 전달 받아서 숫자의 각 자릿수의 합을 구해서 return합니다.
예를들어 number = 123이면 1 + 2 + 3 = 6을 return하면 됩니다.
sum_digit함수를 완성해보세요.
********************************************************************************************************************************************************************************************************
Level 2 자연수를 뒤집어 리스트로 만들기
digit_reverse함수는 양의 정수 n을 매개변수로 입력받습니다.
n을 뒤집어 숫자 하나하나를 list로 표현해주세요
예를들어 n이 12345이면 [5,4,3,2,1]을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 정수 내림차순으로 배치하기
reverseInt 메소드는 int형 n을 매개변수로 입력받습니다.
n에 나타나는 숫자를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.
예를들어 n이 118372면 873211을 리턴하면 됩니다.
n은 양의 정수입니다.
********************************************************************************************************************************************************************************************************
Level 1 정수제곱근판별하기
nextSqaure함수는 정수 n을 매개변수로 입력받습니다.
n이 임의의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 임의의 정수 x의 제곱이 아니라면 'no'을 리턴하는 함수를 완성하세요.
예를들어 n이 121이라면 이는 정수 11의 제곱이므로 (11+1)의 제곱인 144를 리턴하고, 3이라면 'no'을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 제일 작은 수 제거하기
rm_small함수는 list타입 변수 mylist을 매개변수로 입력받습니다.
mylist 에서 가장 작은 수를 제거한 리스트를 리턴하고, mylist의 원소가 1개 이하인 경우는 []를 리턴하는 함수를 완성하세요.
예를들어 mylist가 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10, 8, 22]면 [10, 22]를 리턴 합니다.
********************************************************************************************************************************************************************************************************
Level 1 짝수와 홀수
evenOrOdd 메소드는 int형 num을 매개변수로 받습니다.
num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하도록 evenOrOdd에 코드를 작성해 보세요.
num은 0이상의 정수이며, num이 음수인 경우는 없습니다.
********************************************************************************************************************************************************************************************************
Level 1 최대값과 최소값
getMinMaxString 메소드는 String형 변수 str을 매개변수로 입력받습니다.
str에는 공백으로 구분된 숫자들이 저장되어 있습니다.
str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 String을 반환하는 메소드를 완성하세요.
예를들어 str이 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 평균구하기
def average(list):
함수를 완성해서 매개변수 list의 평균값을 return하도록 만들어 보세요.
어떠한 크기의 list가 와도 평균값을 구할 수 있어야 합니다.
********************************************************************************************************************************************************************************************************
Level 2 하샤드수
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요.
예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 핸드폰번호 가리기
별이는 헬로월드텔레콤에서 고지서를 보내는 일을 하고 있습니다. 개인정보 보호를 위해 고객들의 전화번호는 맨 뒷자리 4자리를 제외한 나머지를 "*"으로 바꿔야 합니다.
전화번호를 문자열 s로 입력받는 hide_numbers함수를 완성해 별이를 도와주세요
예를들어 s가 "01033334444"면 "*******4444"를 리턴하고, "027778888"인 경우는 "*****8888"을 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 JadenCase문자열 만들기
Jaden_Case함수는 문자열 s을 매개변수로 입력받습니다.
s에 모든 단어의 첫 알파벳이 대문자이고, 그 외의 알파벳은 소문자인 문자열을 리턴하도록 함수를 완성하세요
예를들어 s가 "3people unFollowed me for the last week"라면 "3people Unfollowed Me For The Last Week"를 리턴하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 x만큼 간격이 있는 n개의 숫자
number_generator함수는 x와 n을 입력 받습니다.
2와 5를 입력 받으면 2부터 시작해서 2씩 증가하는 숫자를 5개 가지는 리스트를 만들어서 리턴합니다.
[2,4,6,8,10] 
4와 3을 입력 받으면 4부터 시작해서 4씩 증가하는 숫자를 3개 가지는 리스트를 만들어서 리턴합니다.
[4,8,12]
이를 일반화 하면 x부터 시작해서 x씩 증가하는 숫자를 n개 가지는 리스트를 리턴하도록 함수 number_generator를 완성하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 1 다이빙 점수평가
다이빙 점수를 평가할때는 7명의 심사위원이 평가한 점수에 대해 최고점수와 최저점수를 제외하고 5명의 평균을 냅니다.
함수 diving_score의 매개변수 scores는 각 심사위원의 점수를 담고 있는데요. 최고점수와 최소점수를 제외한 평균을 return해 보세요.
********************************************************************************************************************************************************************************************************
Level 2 행렬의 곱셈
행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요.
********************************************************************************************************************************************************************************************************
Level 3 다음 큰 숫자
어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.
예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다.
N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.
********************************************************************************************************************************************************************************************************
Level 2 2016년
2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터  토요일까지 각각
SUN,MON,TUE,WED,THU,FRI,SAT
를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다.
********************************************************************************************************************************************************************************************************
Level 2 최솟값 만들기
자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
예를 들어 A = [1, 2] , B = [3, 4] 라면
1. A에서 1, B에서 4를 뽑아 곱하여 더합니다.
2. A에서 2, B에서 3을 뽑아 곱하여 더합니다.
수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다.
수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요.
********************************************************************************************************************************************************************************************************
Level 4 공항 건설하기
1보다 큰 N개의 도시 중 한 곳에 공항을 지을 예정입니다. 사람들의 편의를 위해 공항으로부터 각 사람들까지의 도시간 이동 거리가 최소가 되는 도시에 짓기로 하였습니다. 편의상 도시는 일직선상에 놓여있다고 가정하며 좌표의 범위는 음수가 포함됩니다. 또한 좌표는 정렬되어 있지 않습니다. 직선상의 위치와 그 도시에 사는 사람들의 수가 주어질 때, 공항을 지을 도시의 위치를 반환해주는 함수 chooseCity 함수를 완성하세요. 거리가 같은 도시가 2개 이상일 경우 위치가 더 작은 쪽의 도시를 선택하면 됩니다. 예를 들어 다음과 같은 정보의 도시가 있다고 가정해 봅시다.
이 살 경우, 각각의 도시에 공항을 지었을 때의 사람들의 이동 거리는 8, 8, 12 이므로 1번 또는 2번에 지을 수 있지만, 1의 위치가 더 작으므로 1을 반환해주면 됩니다.
********************************************************************************************************************************************************************************************************
Level 4 가장 큰 정사각형 찾기
O와 X로 채워진 표가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 O로 이루어진 가장 큰 정사각형을 찾아 넓이를 반환하는 findLargestSquare 함수를 완성하세요. 예를 들어
가 있다면 정답은
가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/Users/ckn/anaconda/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    383             try:  # Python 2.7, use buffering of HTTP responses
--> 384                 httplib_response = conn.getresponse(buffering=True)
    385             except TypeError:  # Python 2.6 and older, Python 3

TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-43-3ca0aa2afcab> in <module>()
      7     addurl=str(k)
      8     tourl=curl+addurl
----> 9     response=requests.get(tourl)
     10     html=response.text
     11     soup=BeautifulSoup(html,'html.parser')

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/api.py in get(url, params, **kwargs)
     68 
     69     kwargs.setdefault('allow_redirects', True)
---> 70     return request('get', url, params=params, **kwargs)
     71 
     72 

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/api.py in request(method, url, **kwargs)
     54     # cases, and look like a memory leak in others.
     55     with sessions.Session() as session:
---> 56         return session.request(method=method, url=url, **kwargs)
     57 
     58 

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    486         }
    487         send_kwargs.update(settings)
--> 488         resp = self.send(prep, **send_kwargs)
    489 
    490         return resp

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/sessions.py in send(self, request, **kwargs)
    607 
    608         # Send the request
--> 609         r = adapter.send(request, **kwargs)
    610 
    611         # Total elapsed time of the request (approximately)

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    421                     decode_content=False,
    422                     retries=self.max_retries,
--> 423                     timeout=timeout
    424                 )
    425 

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, **response_kw)
    592                                                   timeout=timeout_obj,
    593                                                   body=body, headers=headers,
--> 594                                                   chunked=chunked)
    595 
    596             # If we're going to release the connection in ``finally:``, then

/Users/ckn/anaconda/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
    385             except TypeError:  # Python 2.6 and older, Python 3
    386                 try:
--> 387                     httplib_response = conn.getresponse()
    388                 except Exception as e:
    389                     # Remove the TypeError from the exception chain in Python 3;

/Users/ckn/anaconda/lib/python3.6/http/client.py in getresponse(self)
   1329         try:
   1330             try:
-> 1331                 response.begin()
   1332             except ConnectionError:
   1333                 self.close()

/Users/ckn/anaconda/lib/python3.6/http/client.py in begin(self)
    295         # read until we get a non-100 response
    296         while True:
--> 297             version, status, reason = self._read_status()
    298             if status != CONTINUE:
    299                 break

/Users/ckn/anaconda/lib/python3.6/http/client.py in _read_status(self)
    256 
    257     def _read_status(self):
--> 258         line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
    259         if len(line) > _MAXLINE:
    260             raise LineTooLong("status line")

/Users/ckn/anaconda/lib/python3.6/socket.py in readinto(self, b)
    584         while True:
    585             try:
--> 586                 return self._sock.recv_into(b)
    587             except timeout:
    588                 self._timeout_occurred = True

KeyboardInterrupt: 
In [ ]: