{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 04wk-1: 퀴즈3\n", "\n", "최규빈 \n", "2024-03-27\n", "\n", "\n", "\n", "\n", "\n", "> **Caution**\n", ">\n", "> - 전북대 학생들을 시험당일 학생증을 지참할 것. (출석체크 및\n", "> 본인확인) 학생증 외에 신분증 여권등도 가능.\n", "> - 부정행위 (카카오톡 채팅을 통한 코드공유, 생성형모델 사용, 대리시험\n", "> 등) 적발시 F 처리함.\n", "> - 퀴즈 중 지각할 경우 지각사실을 기록함. 하지만 별 다른 감점은 하지\n", "> 않음.\n", "> - `.ipynb` 파일 형태로 제출된 답안지만 채점하며 그 외의 형식\n", "> (`.hwp`, `.py` 등)은 채점하지 않음. 즉 0점 처리함." ], "id": "7adeb666-a03d-4a70-99a4-9a2c51599ac5" }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ "import itertools" ], "id": "07fdd396-0dd4-4901-bd0a-83b2b3b447f2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. – 10점\n", "\n", "4개의 문자 $x,x,y,y$ 를 모두 일렬로 나열하는 경우의 수를 파이썬을\n", "이용하여 구하여라.\n", "\n", "- `itertools.permutations()`을 이용할 것.\n", "\n", "**hint:** 답은 $\\frac{4!}{2!2!}=6$ 이다.\n", "\n", "(풀이)" ], "id": "95e70f16-246c-4edc-8d87-5c172f146e78" }, { "cell_type": "code", "execution_count": 51, "metadata": { "tags": [] }, "outputs": [], "source": [ "len(set([''.join(i) for i in itertools.permutations('xxyy')]))\n", "# len(set([i for i in itertools.permutations('xxyy')])) <-- 이렇게 해도 결과는 같음" ], "id": "70349aba-36a5-4baa-af05-a93fabe5e249" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. – 10점\n", "\n", "리스트 컴프리헨션을 이용하여 $a_n=\\frac{1}{n(n+1)}$을 만족하는 수열을\n", "선언하라. ($a_1,a_2,\\dots,a_5$ 까지만 선언하면 정답으로 인정)\n", "\n", "``` python\n", "## 정답은 아래와 같음\n", "[0.5, 0.16666666666666666, 0.08333333333333333, 0.05, \n", " 0.03333333333333333]\n", "```\n", "\n", "(풀이)" ], "id": "fe1f26e2-7bac-420e-8d6d-9f3ef68a0c15" }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [] }, "outputs": [], "source": [ "[1/(n*(n+1)) for n in range(1,6)]" ], "id": "c79f18c5-79e2-4456-8e1e-ab235e11c68c" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. – 40점\n", "\n", "> (1)~(4) 까지 각 10점씩임.\n", "\n", "`(1)` `for` 문을 사용하여 아래와 같은 수열을 정의하라.\n", "($a_1,\\dots,a_{100}$ 까지 선언할 것)\n", "\n", "- $a_1=a_2=1$\n", "- $a_{n} = a_{n-1} + a_{n-2}$ where $n\\geq 2$\n", "\n", "``` python\n", "## 정답은 아래와 같음\n", "[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,\n", " 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393,\n", " 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887,\n", " 9227465, 14930352, 24157817, 39088169, 63245986, 102334155,\n", " 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903,\n", " 2971215073, 4807526976, 7778742049, 12586269025, 20365011074,\n", " 32951280099, 53316291173, 86267571272, 139583862445, 225851433717,\n", " 365435296162, 591286729879, 956722026041, 1548008755920,\n", " 2504730781961, 4052739537881, 6557470319842, 10610209857723,\n", " 17167680177565, 27777890035288, 44945570212853, 72723460248141,\n", " 117669030460994, 190392490709135, 308061521170129, 498454011879264,\n", " 806515533049393, 1304969544928657, 2111485077978050,\n", " 3416454622906707, 5527939700884757, 8944394323791464,\n", " 14472334024676221, 23416728348467685, 37889062373143906,\n", " 61305790721611591, 99194853094755497, 160500643816367088,\n", " 259695496911122585, 420196140727489673, 679891637638612258,\n", " 1100087778366101931, 1779979416004714189, 2880067194370816120,\n", " 4660046610375530309, 7540113804746346429, 12200160415121876738,\n", " 19740274219868223167, 31940434634990099905, 51680708854858323072,\n", " 83621143489848422977, 135301852344706746049, 218922995834555169026,\n", " 354224848179261915075]\n", "```\n", "\n", "(풀이)" ], "id": "8a152e7c-a83e-44e6-9b3e-0250c765aec3" }, { "cell_type": "code", "execution_count": 49, "metadata": { "tags": [] }, "outputs": [], "source": [ "an = [1,1]\n", "for n in range(3,101): # range(2,100) 혹은 range(98) 을 써도 결과는 같음\n", " an.append(an[-1]+an[-2])\n", "#an" ], "id": "6dd18925-e83d-4e3f-9f25-243ecccd1d4d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(2)` 3-(1)의 결과로 나온 숫자들의 자리수를 카운트하는 파이썬코드를\n", "리스트 컴프리헨션을 이용하여 구현하라.\n", "\n", "**hint** 3-(1)를 풀지못하였더라도 아래의 리스트를 입력하면 이 문제를 풀\n", "수 있음." ], "id": "3058434d-8cb7-4143-8482-54661a5c98a2" }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "lst = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,\n", " 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393,\n", " 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887,\n", " 9227465, 14930352, 24157817, 39088169, 63245986, 102334155,\n", " 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903,\n", " 2971215073, 4807526976, 7778742049, 12586269025, 20365011074,\n", " 32951280099, 53316291173, 86267571272, 139583862445, 225851433717,\n", " 365435296162, 591286729879, 956722026041, 1548008755920,\n", " 2504730781961, 4052739537881, 6557470319842, 10610209857723,\n", " 17167680177565, 27777890035288, 44945570212853, 72723460248141,\n", " 117669030460994, 190392490709135, 308061521170129, 498454011879264,\n", " 806515533049393, 1304969544928657, 2111485077978050,\n", " 3416454622906707, 5527939700884757, 8944394323791464,\n", " 14472334024676221, 23416728348467685, 37889062373143906,\n", " 61305790721611591, 99194853094755497, 160500643816367088,\n", " 259695496911122585, 420196140727489673, 679891637638612258,\n", " 1100087778366101931, 1779979416004714189, 2880067194370816120,\n", " 4660046610375530309, 7540113804746346429, 12200160415121876738,\n", " 19740274219868223167, 31940434634990099905, 51680708854858323072,\n", " 83621143489848422977, 135301852344706746049, 218922995834555169026,\n", " 354224848179261915075]" ], "id": "3799487b-b885-487a-b06c-972543b338ae" }, { "cell_type": "markdown", "metadata": {}, "source": [ "**hint** 아래의 코드를 이용할 것" ], "id": "2491f276-a05e-4dc7-a5d5-f5ce1d372284" }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "len(str(2584)), len(str(354224848179261915075))" ], "id": "679abf14-4c8d-4bcb-9f30-012a48cf4ad9" }, { "cell_type": "markdown", "metadata": {}, "source": [ "``` python\n", "## 답은 아래와 같다. \n", "[ 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4,\n", " 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7,\n", " 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11,\n", " 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14,\n", " 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18,\n", " 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21 ]\n", "```\n", "\n", "(풀이)" ], "id": "331fc1aa-b28b-4b71-b6b1-d236f3ca96f9" }, { "cell_type": "code", "execution_count": 15, "metadata": { "tags": [] }, "outputs": [], "source": [ "# [len(str(i)) for i in an]" ], "id": "66399966-0d9f-40e4-be68-80533992bae4" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(3)` 3-(1)의 결과로 나온 숫자들의 유일한 숫자의 수를 카운트하는\n", "파이썬코드를 리스트 컴프리헨션을 이용하여 구현하라. (여기에서 17711 은\n", "유일한 숫자가 “1,7” 2개이며, 10946은 유일한 숫자가 “1,0,9,4,6” 5개 이다.\n", "\n", "**hint** 아래의 코드를 활용할 것" ], "id": "6ea741b9-56be-4a0c-a359-bdd38e62bc20" }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "len(set(str(9227465)))" ], "id": "2d975ced-aeef-408f-a595-2a24b67e2f6f" }, { "cell_type": "markdown", "metadata": {}, "source": [ "``` python\n", "## 답은 아래와 같다. \n", "[ 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 3, 3, 4,\n", " 4, 3, 3, 5, 2, 5, 4, 4, 4, 5, 4, 5, 5, 6, 7, 6, 5,\n", " 6, 7, 6, 6, 7, 6, 6, 6, 4, 6, 6, 6, 7, 8, 6, 7, 8,\n", " 7, 7, 6, 8, 7, 7, 7, 8, 8, 10, 9, 10, 9, 6, 7, 9, 8,\n", " 7, 8, 9, 9, 8, 10, 8, 9, 8, 8, 7, 8, 9, 8, 8, 8, 7,\n", " 9, 8, 7, 7, 9, 8, 10, 9, 9, 7, 9, 8, 10, 9, 10 ]\n", "```\n", "\n", "> 문제의 뜻이 이해안되면 질문할 것\n", "\n", "(풀이)" ], "id": "475a1173-02f5-4566-9d95-9e83f7615ea5" }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [] }, "outputs": [], "source": [ "# [len(set(str(i))) for i in an]" ], "id": "3f73cd6f-27f7-4c88-8750-9b895051a28a" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(4)` 3-(1)의 결과로 나온 숫자들 중 짝수에 해당하는 숫자가 몇개인지\n", "카운트하는 코드를 작성하라. 코드 작성시 `if`가 포함된 리스트컴프리헨션을\n", "이용하라. (numpy 이용시 부분점수 없이 0점)\n", "\n", "(풀이)" ], "id": "0d1cdd81-1ecb-4559-a808-499e5c9e763e" }, { "cell_type": "code", "execution_count": 28, "metadata": { "tags": [] }, "outputs": [], "source": [ "len([i for i in an if i %2 ==0])" ], "id": "67e9aa53-63f2-4d5e-8d86-d073795a3c4f" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. – 40점\n", "\n", "10원짜리 동전 13개, 100원짜리 동전 17개, 500원짜리 동전 4개가 있다고\n", "하자. 이러한 동전들로 표현할 수 있는 돈의 액수는 모두 몇 가지인가?\n", "파이썬의 itertools 모듈을 이용하여 count하라.\n", "\n", "– 예시 –\n", "\n", "10원짜리 동전 1개, 100원짜리 동전 5개, 500원짜리 동전 1개가 있다면\n", "표현할 수 있는 돈은 아래와 같다.\n", "\n", "| 경우 | 10원 | 100원 | 500원 | 총액 |\n", "|:------:|:----:|:-----:|:-----:|:------:|\n", "| 경우1 | 0 | 0 | 0 | 0원 |\n", "| 경우2 | 0 | 0 | 1 | 500원 |\n", "| 경우3 | 0 | 1 | 0 | 100원 |\n", "| 경우4 | 0 | 1 | 1 | 600원 |\n", "| 경우5 | 0 | 2 | 0 | 200원 |\n", "| 경우6 | 0 | 2 | 1 | 700원 |\n", "| 경우7 | 0 | 3 | 0 | 300원 |\n", "| 경우8 | 0 | 3 | 1 | 800원 |\n", "| 경우9 | 0 | 4 | 0 | 400원 |\n", "| 경우10 | 0 | 4 | 1 | 900원 |\n", "| 경우11 | 0 | 5 | 0 | 500원 |\n", "| 경우12 | 0 | 5 | 1 | 1000원 |\n", "| 경우13 | 1 | 0 | 0 | 10원 |\n", "| 경우14 | 1 | 0 | 1 | 510원 |\n", "| 경우15 | 1 | 1 | 0 | 110원 |\n", "| 경우16 | 1 | 1 | 1 | 610원 |\n", "| 경우17 | 1 | 2 | 0 | 210원 |\n", "| 경우18 | 1 | 2 | 1 | 710원 |\n", "| 경우19 | 1 | 3 | 0 | 310원 |\n", "| 경우20 | 1 | 3 | 1 | 810원 |\n", "| 경우21 | 1 | 4 | 0 | 410원 |\n", "| 경우22 | 1 | 4 | 1 | 910원 |\n", "| 경우23 | 1 | 5 | 0 | 510원 |\n", "| 경우24 | 1 | 5 | 1 | 1010원 |\n", "\n", "여기에서 경우2와 경우11은 중복이고, 경우14와 경우23은 중복이므로 총\n", "22개의 경우가 나온다.\n", "\n", "> 문제의 뜻이 이해안되면 질문할 것\n", "\n", "(풀이)" ], "id": "d78629d1-774a-45ac-8fab-1fd5825c0619" }, { "cell_type": "code", "execution_count": 39, "metadata": { "tags": [] }, "outputs": [], "source": [ "lst10 = list(range(14))\n", "lst100 = list(range(18))\n", "lst500 = list(range(5)) " ], "id": "776c026e-8ee7-4381-b642-366590690032" }, { "cell_type": "code", "execution_count": 40, "metadata": { "tags": [] }, "outputs": [], "source": [ "len(set([i*10+j*100+k*500 for i,j,k in itertools.product(lst10,lst100,lst500)]))" ], "id": "5a330a1e-3412-431d-b615-dd26564afd8d" } ], "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3 (ipykernel)", "language": "python" }, "language_info": { "name": "python", "codemirror_mode": { "name": "ipython", "version": "3" }, "file_extension": ".py", "mimetype": "text/x-python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } } }