{
"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"
}
}
}