diff --git a/Homework #1.ipynb b/Homework #1.ipynb new file mode 100644 index 0000000..7262916 --- /dev/null +++ b/Homework #1.ipynb @@ -0,0 +1,978 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5ffcc28a", + "metadata": {}, + "source": [ + "2018136073 위 건 - 스크립트 프로그래밍\n", + "\n", + "### 1. a = \"Hello Python\" 문자열을 Slicing과 연결 연산자 (+)를 사용하여 \"Python Hello\"로 변경하시오.\n", + " - [주의] a 변수 자체에 \"Python Hello\" 문자열이 저장되어야 함\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9fe34b40", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Python Hello\n" + ] + } + ], + "source": [ + "a = \"Hello Python\"\n", + "a = a[6:] + a[5] + a[:5]\n", + "print(a)" + ] + }, + { + "cell_type": "markdown", + "id": "663781de", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "a[6:] = Python (6번째'P'부터 끝까지 슬라이싱)\n", + "\n", + "a[5] = ' ' (띄어쓰기 빈칸)\n", + "\n", + "a[:5] = Hello (5번째 전 즉, a[4]번인 'o'까지 슬라이싱)\n", + "\n", + "이므로 a[] = \"Python Hello\"\n", + "\n", + "─────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "7c113dc4", + "metadata": {}, + "source": [ + "### 2. b = \"Hello Python World\" 문자열을 Slicing과 연결 연산자 (+)를 사용하여 \"World Python Hello\"로 변경하시오.\n", + "\n", + "- [주의] b 변수 자체에 \"World Python Hello\" 문자열이 저장되어야 함" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b89b10ab", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "World Python Hello\n" + ] + } + ], + "source": [ + "b = \"Hello Python World\"\n", + "b = b[13:] + b[5:12] + b[5] + b[:5]\n", + "print(b)" + ] + }, + { + "cell_type": "markdown", + "id": "fedc571c", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "b[13:] = World (b[13]인 'W'부터 끝까지 슬라이싱)\n", + "\n", + "b[5:12] = Python (b[5]인 ' '부터 b[12]인 'n'까지 슬라이싱)\n", + "\n", + "b[5] = ' ' (띄어쓰기 빈칸)\n", + "\n", + "b[:5] = Hello (처음부터 b[4]인 o까지 슬라이싱)\n", + "\n", + "이므로 b[] = \"World Python Hello\"\n", + "\n", + "───────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "793b78c0", + "metadata": {}, + "source": [ + "### 3. c = \"Hello\"를 \"olleH\"로 변경하시오\n", + "\n", + "- [주의] c 변수 자체에 \"olleH\" 문자열이 저장되어야 함" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4255a3f9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "olleH\n" + ] + } + ], + "source": [ + "c = \"Hello\"\n", + "c = c[::-1]\n", + "print(c)" + ] + }, + { + "cell_type": "markdown", + "id": "68112758", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "리스트 c에서\n", + "c[::-1]이란, -1씩 감소시키면서 리스트의 마지막 요소까지 가져옴\n", + "이후 c에 다시 저장하고 출력\n", + "\n", + "───────────────────────────────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "0348d33c", + "metadata": {}, + "source": [ + "### 4. s = \"python\"에 대해 다음 문제를 풀어보시오.\n", + "- A. s[0], s[0][0], s[0][0][0]은 각각 어떤 값이 나오는지 확인하고 그 이유를 나름대로 설명해 보시오.\n", + "\n", + "- B. s[-100], s[100]은 값이 나오는지 에러가 나오는지 확인하고 그 결과에 대한 이유를 나름대로 설명해 보시오.\n", + "\n", + "- C. s[-100, 100]은 값이 나오는지 에러가 나오는지 확인하고 그 결과에 대한 이유를 나름대로 설명해 보시오.\n", + "\n", + "- D. s[1:-1]의 결과를 확인하고 그 결과에 대한 이유를 정확하게 설명하시오.\n", + "\n", + "- E. s[3:-3]의 결과를 확인하고 그 결과에 대한 이유를 정확하게 설명하시오." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "002404fd", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "p\n", + "p\n", + "p\n" + ] + } + ], + "source": [ + "# A\n", + "s = \"python\"\n", + "print(s[0])\n", + "print(s[0][0])\n", + "print(s[0][0][0])" + ] + }, + { + "cell_type": "markdown", + "id": "9969fdb6", + "metadata": {}, + "source": [ + "A :\n", + "\n", + "s[0] = 'p'\n", + "\n", + "s[0][0] = 'p'\n", + "\n", + "s[0][0][0] = 'p'가 나옴\n", + "\n", + "이유는 list s에서 0번째에 해당하는 'p'단어가 나옴." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "36ac164a", + "metadata": {}, + "outputs": [ + { + "ename": "IndexError", + "evalue": "string index out of range", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# B\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"python\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mIndexError\u001b[0m: string index out of range" + ] + } + ], + "source": [ + "# B\n", + "s = \"python\"\n", + "print(s[-100])\n", + "print(s[100])" + ] + }, + { + "cell_type": "markdown", + "id": "ce699f03", + "metadata": {}, + "source": [ + "B:\n", + "\n", + "s의 범위는 0부터 5까지 6의 값을 가지고 있기 때문에, 범위를 벗어난 -100과 100은 출력되지 않는다." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "28eebc40", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "string indices must be integers", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# C\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"python\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0ms\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m100\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m: string indices must be integers" + ] + } + ], + "source": [ + "# C\n", + "s = \"python\"\n", + "s[-100, 100]" + ] + }, + { + "cell_type": "markdown", + "id": "b3b3f265", + "metadata": {}, + "source": [ + "C:\n", + "인덱스 값이 정수가 아니므로 오류가 난다." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "55e7d628", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'ytho'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# D\n", + "s = \"python\"\n", + "s[1:-1]" + ] + }, + { + "cell_type": "markdown", + "id": "e3d16c3e", + "metadata": {}, + "source": [ + "D:\n", + "\n", + "\n", + "문자열 python에서 s[1]은 두번째 y이고, s[-1]은 오른쪽 끝부터 시작이니 n이다.\n", + "\n", + "그러므로 슬라이싱을 한 s[1,-1]의 값은 'ytho'이다" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "3fbf948c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# E\n", + "s = \"python\"\n", + "s[3:-3]" + ] + }, + { + "cell_type": "markdown", + "id": "aad1b9cf", + "metadata": {}, + "source": [ + "E: s[3:-3]는 s[3]는 h이고, s[-3]도 h이다. 그러므로 3부터 -3전까지는 ' '이다.\n", + "\n", + "──────────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "56341367", + "metadata": {}, + "source": [ + "### 5. for문을 활용하여 1부터 100사이의 홀수를 출력하시오." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "21e686ed", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 " + ] + } + ], + "source": [ + "for i in range(1,101) :\n", + " if i % 2 == 0:\n", + " pass\n", + " else :\n", + " print(i, end=\" \")" + ] + }, + { + "cell_type": "markdown", + "id": "1492b495", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "for을 통해 i가 1부터 100까지의 숫자를 갖도록 한다.(바라봄)\n", + "\n", + " if 조건문\n", + "\n", + " i%2 == 0 2로 나누어 떨어진다면 짝수이기에\n", + "\n", + " pass로 반복문을 계속 돌리고\n", + "\n", + " else\n", + "\n", + " 아니라면 홀수이니 출력함\n", + "──────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "600dd8df", + "metadata": {}, + "source": [ + "### 6. while문을 활용하여 1부터 100사이의 짝수의 합을 계산하며 출력하시오." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "ac11592a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2550\n" + ] + } + ], + "source": [ + "i = 1\n", + "sum = 0\n", + "while i <= 100:\n", + " if i % 2 == 0 :\n", + " sum += i\n", + " else :\n", + " pass\n", + " i += 1\n", + "print(sum)" + ] + }, + { + "cell_type": "markdown", + "id": "8c9203ab", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "i = 1 (1부터 100까지의 수를 구하는 것이기에 시작인 1)\n", + "\n", + "sum = 0 (짝수들의 합)\n", + "\n", + "while\n", + "\n", + " if 조건문\n", + " \n", + " 2로 나누어떨어짐 = 짝수\n", + " \n", + " sum의 더함\n", + " \n", + " else\n", + "\n", + " 반복문 패스\n", + " \n", + " i 1증가\n", + "\n", + "sum 출력\n", + "\n", + "────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "a74e33ad", + "metadata": {}, + "source": [ + "### 7. 사용자로부터 임의의 정수를 입력받고, 해당 숫자를 역순으로 출력하는 프로그램을 작성하시오.\n", + "\n", + " [실행 예]\n", + " \n", + " 정수를 입력하세요 : 3125\n", + " \n", + " 숫자 역순은 5213 입니다." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "b7d9e6e4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "정수를 입력하세요 : 9870\n", + "숫자 역순은 : 0789\n" + ] + } + ], + "source": [ + "number = input(\"정수를 입력하세요 : \")\n", + "print(\"숫자 역순은 : \" + number[::-1])" + ] + }, + { + "cell_type": "markdown", + "id": "858162c5", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "정수를 input로 입력받아 number라는 list로 저장\n", + "\n", + "처음부터 끝까지 -1씩 감소시켜 전부 불러온 뒤 출력\n", + "\n", + "────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "e38872a6", + "metadata": {}, + "source": [ + "### 8. 사용자로부터 정수를 입력받아서 1부터 그 사이에 존재하는 소수 (Prime number)를 출력하는 파이썬 프로그램을 작성하시오." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "e9eda233", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "소수를 구할 정수를 입력해주세요 : 100\n", + "[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]\n", + "\n", + "[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]\n" + ] + } + ], + "source": [ + "# 직접 만든 함수\n", + "def primeNumber(n):\n", + " num = []\n", + "\n", + " for i in range(2, n + 1):\n", + " check = 1\n", + " for j in range(2, i):\n", + " if i % j == 0:\n", + " check = 0\n", + " break\n", + "\n", + " if check == 1:\n", + " num.append(i)\n", + "\n", + " return num\n", + "\n", + "# 에라토스테네스의 체를 활용한 함수 (인터넷)\n", + "def get_prime_nums(n):\n", + " sieve = [True] * (n+1)\n", + "\n", + " for i in range(2, int(n ** 0.5) + 1):\n", + " if sieve[i]:\n", + " for j in range(i + i, n+1, i):\n", + " sieve[j] = False\n", + "\n", + " return [i for i in range(2, (n+1)) if sieve[i]]\n", + "\n", + "\n", + "if __name__ == '__main__':\n", + "\n", + " number = int(input(\"소수를 구할 정수를 입력해주세요 : \"))\n", + " print(primeNumber(number))\n", + " print()\n", + " print(get_prime_nums(number))" + ] + }, + { + "cell_type": "markdown", + "id": "9561a015", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + " 1 def primeNumber(n)은 직접 만든 함수이다.:\n", + "\n", + " num = [] //소수가 들어갈 list\n", + " \n", + " for i in range(2, n + 1): // 1은 소수가 아니므로 2부터 시작, n까지 반복하기 위해서 n+1\n", + "\n", + " check = 1 // 조건문 체크를 위한 변수\n", + "\n", + " for j in range(2, i): // 2부터 i전까지 반복\n", + "\n", + " if i % j == 0: // 만약 나누어 떨어진다면 소수가 아니므로\n", + "\n", + " check = 0 // check == 0\n", + "\n", + " break // 반복 종료\n", + "\n", + " if check == 1: // 소수이면 값이 그대로 1이기에\n", + "\n", + " num.append(i) // 소수를 num에 포함\n", + "\n", + " return num // list num 반환\n", + " \n", + " \n", + "\n", + "\n", + "2 get_prime_nums(n)은 인터넷에서 소수에 대해서 찾아보다 알게된 개념인 에라토스테네스의 체를 활용한 함수이다.\n", + "\n", + " sieve = [True] * (n+1)\n", + "\n", + " for i in range(2, int(n ** 0.5) + 1):\n", + " \n", + " if sieve[i]:\n", + " \n", + " for j in range(i + i, n+1, i):\n", + " \n", + " sieve[j] = False\n", + "\n", + " return [i for i in range(2, (n+1)) if sieve[i]]\n", + " \n", + " \n", + " \n", + "주어진 범위 n이라고 한다면 그 안에서 각 수의 배수가 되는 수들은 소수가 될 수 없으니 제거하면서 반복한다.\n", + "\n", + "이렇게 하면 위에서 사용한 primeNumber함수보다 훨씬 빠른 속도로 프로그램 작동이 가능하다.\n", + "\n", + "그 뒤에 main함수를 표시하고 둘 다 출력함\n", + "\n", + "
\n", + "
\n", + "\n", + "─────────────────────────────────────────────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "f5778149", + "metadata": {}, + "source": [ + "### 9. Kevin과 Stuart는 게임을 한다. 규칙은 아래와 같다.\n", + "- 두 플레이어에게 같은 string S가 주어진다.\n", + "- 두 플레이어는 string S의 문자를 사용하여 substring을 만들어야 한다. (중복 가능)\n", + "- Stuart는 자음으로 시작하는 단어를 만들어야 한다.\n", + "- Kevin은 모음으로 시작하는 단어를 만들어야 한다.\n", + "- 게임은 두 플레이어가 만들 수 있는 모든 단어를 만들었을 때 끝난다.\n", + "- 점수 계산 : substring 1개당 +1점을 획득한다.\n", + "\n", + "###### 사용자로부터 대문자로 이루어진 string S를 입력받고, 승자와 그의 점수를 출력하는 프로그램을 작성하시오.\n", + "\n", + "[실행 예]\n", + "\n", + " string S를 입력하세요 : BANANA\n", + " \n", + " 승자 : Stuart 점수 : 12" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "fa396b4c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "단어를 입력해주세요 : WOWOW\n", + "승자 Stuart 점수 : 9\n" + ] + } + ], + "source": [ + "s = input(\"단어를 입력해주세요 : \")\n", + "stuart = 0\n", + "kevin = 0\n", + "\n", + "for i in range(len(s)) :\n", + " if s[i] == 'A' or s[i] == 'E' or s[i] == 'I' or s[i] == 'O' or s[i] == 'U' :\n", + " for n in range(len(s[i:])) :\n", + " kevin += 1\n", + "\n", + " else :\n", + " for n in range(len(s[i:])) :\n", + " stuart += 1\n", + "\n", + "if kevin < stuart :\n", + " print(\"승자 Stuart 점수 : \" + str(stuart))\n", + "\n", + "elif kevin > stuart :\n", + " print(\"승자 Kevin 점수 : \" + str(kevin))\n", + "\n", + "else :\n", + " print(\"무승부 점수 : \" + str(kevin))" + ] + }, + { + "cell_type": "markdown", + "id": "3909ea15", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "규칙을 찾으면 되는데, 입력받은 단어의 첫 단어를 기준으로 오른쪽 단어들을 차례대로 포함하면서 점수를 획득하면된다.\n", + "\n", + "즉, TALL이라는 단어를 받았다면\n", + "\n", + "\n", + "- stuart\n", + "\n", + "가장 먼저 오는 단어가 자음일 때, T는 자음이기에 stuart의 점수를 올리며 시작하는데\n", + "\n", + "T, TA, TAL, TALL이라는 4점을 얻고,\n", + "\n", + "그 다음 L로 시작하는 부분까지 반복을 돌려 다시\n", + "\n", + "L, LL 이라는 2점을 얻어 총 6점을 획득한다.\n", + "\n", + "\n", + "- kevin\n", + "\n", + "모음일 때를 기준으로 삼는다.\n", + "\n", + "알파벳 중 모음은 'A', 'E', 'I' , 'O', 'U'가 있기에 입력받은 리스트 각 항 중 모음이 포함된다면,\n", + "\n", + "A, AL, ALL 이라는 3점을 획득 총 3점이다\n", + "\n", + "
\n", + "\n", + "이렇게 점수를 얻었다면 stuart와 kevin을 비교하여 승자를 가린다.\n", + "\n", + "
\n", + "
\n", + "\n", + "─────────────────────────────────────────────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "6dde5f0f", + "metadata": {}, + "source": [ + "### 10. 알파벳 소문자만으로 이루어진 string S가 주어지고 아래 2가지 연산을 수행할 수 있다.\n", + "- 추가 : string S의 끝에 알파벳 소문자 하나를 추가한다.\n", + "- 삭제 : string S의 마지막 문자 하나를 삭제한다. emphty string에서 삭제 연산을 수행한 결과는 emphty string이다.\n", + "\n", + "두 개의 string s와 t, 그리고 정수 k가 주어질 때, 정확히 k번의 연산을 통해 s를 t로 바꿀 수 있는지 판단하는 함수를 작성하시오.\n", + "\n", + "- [예시]\n", + "\n", + " 1. s = 'hackerhappy'   t = 'hackerrank'   k = 9  =>  'Yes'\n", + " \n", + " 2. s = 'aba'       t = 'aba'      k = 7  =>  'Yes'\n", + " \n", + " 3. s = 'ashley'      t = 'ash'      k = 2  =>  'No'" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "38d71d75", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "s를 입력하세요 : ashley\n", + "t를 입력하세요 : ash\n", + "k를 입력하세요 : 4\n", + "s = ashley | t = ash | k = 4 => YES\n" + ] + } + ], + "source": [ + "def appendDelete(s, t, k = 0) :\n", + " \n", + " # s의 길이가 t보다 클 때\n", + " if len(s) > len(t) :\n", + " for i in range(0, len(t)) :\n", + " if s[i] == t[i] :\n", + " if i == len(t) -1 :\n", + " count = len(s[i:])\n", + " if int(k) >= count :\n", + " return 'YES'\n", + " else :\n", + " return 'NO'\n", + " else :\n", + " continue\n", + " \n", + " else :\n", + " count = len(s[i:]) + len(t[i:])\n", + " if int(k) >= count :\n", + " return 'YES'\n", + " else :\n", + " return 'NO'\n", + " \n", + " # t의 길이가 s보다 클 때 \n", + " elif len(s) < len(t) :\n", + " for i in range(0, len(s)) :\n", + " if s[i] == t[i] :\n", + " if i == len(s) -1 :\n", + " count = len(t[i:])\n", + " if int(k) >= count :\n", + " return 'YES'\n", + " else :\n", + " return 'NO'\n", + " else :\n", + " continue\n", + " \n", + " else :\n", + " count = len(s[i:]) + len(t[i:])\n", + " if int(k) >= count :\n", + " return 'YES'\n", + " else :\n", + " return 'NO'\n", + " \n", + " \n", + " # 둘의 길이가 같을 때 \n", + " elif len(s) == len(t) :\n", + " for i in range(0, len(s)) :\n", + " if s[i] == t[i] :\n", + " if i == len(s) -1:\n", + " return 'YES'\n", + " else : \n", + " continue\n", + " \n", + " else :\n", + " count = len(s[i:]) + len(t[i:])\n", + " if int(k) >= count :\n", + " return 'YES'\n", + " else :\n", + " return 'NO'\n", + " \n", + " \n", + "if __name__ == '__main__' :\n", + " \n", + " s = input('s를 입력하세요 : ')\n", + " t = input('t를 입력하세요 : ')\n", + " k = input('k를 입력하세요 : ')\n", + " \n", + " print('s = ' + s, end = ' ')\n", + " print('| t = ' + t, end = ' ')\n", + " print('| k = ' + k, end = ' ')\n", + " print(' => ' + str(appendDelete(s,t,k)))" + ] + }, + { + "cell_type": "markdown", + "id": "73849d1e", + "metadata": {}, + "source": [ + "[코드 설명]\n", + "\n", + "문자열을 입력 받은 뒤, 삭제되고 추가된 횟수는 s와 t의 같은 문자열 뒤에 존재하는 단어들의 길이의 합이다.\n", + "즉, helloworld와 hellopython을 입력받았을 시,\n", + "\n", + "hello 까지는 동일하기에 o뒤에서부터 기준으로 삼아 world를 삭제하고, python을 추가하기 위해서는 총 5 + 6 = 11이라는 횟수가 필요하다.\n", + "\n", + "이것을 입력받은 k와 비교하여 YES와 NO로 나누어 출력하면 된다.\n", + "\n", + "\n", + "#### 우선 3가지 경우로 나눈다.\n", + "\n", + "- 기존 s의 길이가 t보다 길 때\n", + "\n", + " 우선 반복문을 활용하여 s와 t의 문자가 같은 마지막 지점이 어디인지 찾아낸다.\n", + "\n", + " if len(s) > len(t) : // s의 길이가 t보다 길 때,\n", + " for i in range(0, len(t)) : // 비교적 짧은 t를 기준으로 하여 반복\n", + " if s[i] == t[i] : // 동일한 글자일 때\n", + " if i == len(t) -1 : // i가 t의 마지막 항이라면\n", + " count = len(s[i:]) // 횟수의 변수 count에 s뒤에 남은 길이를 저장\n", + " if int(k) >= count : // 입력받은 k의 값이 count보다 크거나 같다면\n", + " return 'YES' // YES를 출력\n", + " else :\n", + " return 'NO' // 아니라면 NO출력\n", + " else :\n", + " continue // i가 t의 마지막 항이 아니라면 반복 진행\n", + " else : // s[]와 t[]의 글자가 다를 때\n", + " count = len(s[i:]) + len(t[i:]) // 그 순간을 기점으로 s와 t의 뒷부분의 길이를 전부 구하고 합침\n", + " if int(k) >= count : // 입력받은 k의 값이 count보다 크거나 같다면\n", + " return 'YES' // YES를 출력\n", + " else :\n", + " return 'NO' // 아니라면 NO출력\n", + " \n", + " \n", + "
\n", + "\n", + "- s의 길이가 t보다 짧을 때\n", + "\n", + " 위와 같이 반복문을 활용하여 끊어내고 횟수를 계산 한 다음 비교한다.\n", + " \n", + " elif len(s) < len(t) : // s의 길이가 t보다 짧을 때\n", + " for i in range(0, len(s)) : // 비교적 짧은 s를 기준으로 하여 반복\n", + " if s[i] == t[i] : // 동일한 글자일 때\n", + " if i == len(s) -1 : // i가 s의 마지막 항이라면\n", + " count = len(t[i:]) // 횟수의 변수 count에 t 뒤에 남은 길이를 저장\n", + " if int(k) >= count : // 입력받은 k의 값이 count보다 크거나 같으면\n", + " return 'YES' // YES를 출력\n", + " else :\n", + " return 'NO' // 아니라면 NO 출력\n", + " else :\n", + " continue // i가 s의 마지막 항이 아니라면 반복 진행\n", + " else : // s[]와 t[]의 글자가 다를 때\n", + " count = len(s[i:]) + len(t[i:]) // s와 t의 i항 뒷부분부터 길이를 전부 구하고 합침\n", + " if int(k) >= count : // 입력받은 k의 값이 count보다 크거나 같다면\n", + " return 'YES' // YES를 출력\n", + " else :\n", + " return 'NO' // 아나리면 NO출력\n", + " \n", + "
\n", + "\n", + "- 두 문자열의 길이가 같을 때\n", + "\n", + " 두 문자열이 같을 때는 접근을 한가지 추가한다.\n", + " \n", + " elif len(s) == len(t) : // 같을 때라면\n", + " for i in range(0, len(s)) :\n", + " if s[i] == t[i] : // 두 문자가 같을 때\n", + " if i == len(s) -1: // 길이도 같고 전부 같다면\n", + " return 'YES' // 어떤 경우든 YES 출력\n", + " else : \n", + " continue // 반복이 끝까지 돌지 않았다면 그대로 반복\n", + " \n", + " else : // 문자가 다르다면\n", + " count = len(s[i:]) + len(t[i:]) // i를 기점으로 뒷 문자열의 길이를 전부 합쳐서 count에 저장\n", + " if int(k) >= count : // 입력받은 k가 count보다 크거나 같다면\n", + " return 'YES' // YES를 출력\n", + " else :\n", + " return 'NO' // 아니라면 NO출력\n", + " \n", + " \n", + "
\n", + "
\n", + "────────────────────────────────────────────────────────────────────────────────────────" + ] + }, + { + "cell_type": "markdown", + "id": "44c4ec8d", + "metadata": {}, + "source": [ + "
\n", + "\n", + "## 소감\n", + "\n", + "> 스크립트 프로그래밍 수업을 들으면서 개발자로서 중요한 프로그램과 수행과정을 겪은 것 같다.\n", + " 주피터 노트북을 통해 파이썬을 사용해보았고, 주피터 파일을 활용하여 GitHub에 나만의 repository도 만들어 보고 직접 git을 다루어서 업로드\n", + " 도 해보았다.\n", + " 마크다운을 통해 나만의 블로그처럼 글도 작성해보고, 이번 문제를 풀면서 굉장한 성취감을 느꼈다.\n", + " 모든 것이 새롭고 어렵지만, 그로 인해 오는 성취감과 만족감이 너무나도 기분 좋다.\n", + " 좋은 강의해주셔서 감사합니다.\n", + " \n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "269049f5", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/README.md b/README.md deleted file mode 100644 index 7f05955..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# ScriptProgramming \ No newline at end of file