전체 글
[BOJ] 11052 카드 구매하기 (Python / 파이썬)
[BOJ] 11052 카드 구매하기 (Python / 파이썬)
2021.08.01🧷 문제 https://www.acmicpc.net/problem/11052 카드 팩의 가격이 주어졌을 때, N개의 카드를 구매하기 위해 지불해야 하는 금액의 최댓값을 구하는 문제이다. 🛠 풀이 이 문제는 Bottom-Up 방식의 다이나믹 프로그래밍(DP)를 이용하여 해결할 수 있다. Step 1. 이 문제를 풀기 위해 생각을 해보면 n개의 카드를 구매하기 위한 최대 금액 d[n]은 d[n], d[1] + d[n-1], d[2] + d[n-2], ... , d[j] + d[n-j]중 가장 큰 값과 같다. Step 2. for문을 돌기 전 d[i]의 값을 입력으로 받은 card_pack[i]로 초기화 시켜준 후에 j == 1와 j == i-1은 같으므로 j는 i의 절반까지만 돌도록 한다. Step 3. f..
[BOJ] 2004 조합 0의 개수 (Python / 파이썬)
[BOJ] 2004 조합 0의 개수 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/2004 조합 nCm의 끝자리 0의 개수를 출력하는 문제이다. 🛠 풀이 이 문제는 시간초과를 신경써야 하는 문제이다. Step 1. 이 문제를 단순히 nCr = n! / r!(n-r)!을 계산한 후에 10으로 나눠서 계산하면 문제에서 주어진 입력의 범위때문에 시간초과가 난다. Step 2. 그렇다면 끝자리가 0이 나올 수 있는 경우를 생각해본다. 끝자리가 0이 되려면 2와 5의 곱으로 이루어져야한다. 즉, 2와 5의 쌍의 갯수를 구하면 끝자리 0의 개수를 구할 수 있다. Step 3. 다시 한번, 10이 만들어지려면 2와 5가 쌍을 이뤄야 하므로 2의 갯수와 5의 갯수 중 더 작은 것을 선택하면 된다. 🖊 나의 코드 import sys i..
[BOJ] 1929 소수 구하기 (Python / 파이썬)
[BOJ] 1929 소수 구하기 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/1929 M이상 N이하의 소수를 모두 출력하는 문제이다. 🛠 풀이 이 문제는 '에라토스테네스의 체' 를 이용해 해결할 수 있다. Step 1. 에라토스테네스의 체를 이용해 소수를 판별한다. 에라토스테네스의 체 : 소수를 판별할 범위만큼 배열을 할당하고 그 인덱스에 해당값을 넣어준 후에, 2부터 시작해서 그 값이 True라면 그 수의 배수에 해당하는 숫자들을 모두 False로 바꿔주는 것을 반복해 대량의 소수를 한꺼번에 판별하는데 용이한 알고리즘이다. 🖊 나의 코드 import sys input = sys.stdin.readline def is_prime(x, y): prime_num = [True] * (y+1) for i ..
[BOJ] 2609 최대공약수와 최소공배수 (Python / 파이썬)
[BOJ] 2609 최대공약수와 최소공배수 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/2609 두 개의 자연수를 입력받아 최대공약수와 최소공배수를 출력하는 문제이다. 🛠 풀이 이 문제는 유클리드 호제법을 이용해 최대 공약수와 최소 공배수를 구하면 된다. Step 1. 유클리드 호제법을 이용해 최대공약수를 구한다. 유클리드 호제법 : 2개의 자연수의 최대공약수를 구하는 알고리즘이다. "a와 b의 최대공약수는 a를 b로 나눈 나머지와 b의 최대공약수와 같다."두 수 x와 y가 있을 때, (단, x >= y) def gcd(x, y): while b > 0: a, b = b, a % b return a 🖊 나의 코드 import sys input = sys.stdin.readline def GCD(a, b): while b > ..
[BOJ] 1918 후위 표기식 (Python / 파이썬)
[BOJ] 1918 후위 표기식 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/1918 주어진 중위 표기식(infix)을 후위 표기식(postfix)로 바꾸는 문제이다. 문제에 나와있다시피 연산자의 우선순위에 따라 스택에서 push, pop의 과정을 통해 해결할 수 있다. 🛠 풀이 이 문제의 중요한 포인트는 연산자의 우선순위를 비교할 때, 우선순위가 같다면 stack안에 들어있는, 즉 식에서 왼쪽에 위치한 연산자를 처리해준다는 것이다. Step 1. expression리스트를 처음부터 한 문자씩 탐색한다. expression[i]가 알파벳이라면 res라는 결과 리스트에 append해준다. Step 2. expression[i]가 알파벳이 아니고 연산자라면 우선순위에 맞게 처리를 해준다. expression[i]가 (..
[BOJ] 10799 쇠막대기 (Python / 파이썬)
[BOJ] 10799 쇠막대기 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/10799 입력으로 주어진 괄호의 쌍을 분석하여 쇠막대기가 레이저에 의해 몇 개의 조각으로 잘려지는지 알아보는 문제이다. 🛠 풀이 이 문제는 스택을 이용하여 해결할 수 있는 문제이다. Step 1. 입력으로 주어진 쇠막대기와 레이저의 배치를 pipes로 받고 for문을 이용해 앞에서부터 탐색을 시작한다. (를 만나면 stack에 push해준다. Step 2. )를 만나면 pipes의 바로 전 인덱스를 살펴보고 만약 pipes[i-1]이 (라면 레이저이기 때문에 stack에서 pop해주고 res에 stack의 길이만큼 더해준다. 그렇지 않고 pipes[i-1]이 )라면 해당 라인의 막대기가 끝나는 지점이기 때문에 res에 1을 더해준다. 처..
[BOJ] 1158 요세푸스 문제 (Pyhton / 파이썬)
[BOJ] 1158 요세푸스 문제 (Pyhton / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/1158 N명의 사람이 원을 이루면서 앉아있을 때, K번째 사람을 모든 사람이 제거될 때까지 계속 반복하는 문제이다. 🛠 풀이 이 문제를 풀 때 어떻게 풀어가야 하는지보다는 어떻게 출력해야 하는지 애를 먹었다. 덕분에 파이썬의 출력형식과 join에 대해서 알아볼 수 있는 기회였다. Step 1. n과 k를 입력받아준 후에 peoples라는 queue를 만들어주었다. peoples의 원소가 없어질 때까지 while문을 이용해 k번 째 원소를 popleft해줌과 동시에 res라는 결과 리스트에 append 해주었다. Step 2. res리스트의 원소들을 join함수를 이용하여 문제에서 원하는 포맷으로 출력할 수 있었다. Pyhton의 join..
[BOJ] 1874 스택수열 (Python / 파이썬)
[BOJ] 1874 스택수열 (Python / 파이썬)
2021.07.30🧷 문제 https://www.acmicpc.net/problem/1874 1부터 n까지의 수를 스택에 넣고 빼는 것을 반복하는데, 오름차순으로만 push할 수 있고 임의의 수열이 주어졌을 때 위의 스택을 이용하여 만들 수 있는지 없는지를 알아보는 문제이다. 🛠 풀이 이 문제를 풀 때 처음에는 문제 자체를 이해하는데 어려움이 있었지만 아래에 있는 예제를 직접 손으로 그려가면서 이해할 수 있었다. Step 1. 1부터 n까지의 수를 넣어줄 sequence리스트와 결과로 보여줄 res리스트를 만들었다. 그리고 num변수를 1로 초기화하고 문제 조건과 비교할 수 있는 check변수를 True로 설정한 후에 임의의 수열을 만들 수 없다면 NO를 출력할 수 있도록 만들었다. Step 2. n개의 줄을 통해 입력되..
[CSS] 📘CSS란?
[CSS] 📘CSS란?
2021.07.24✍ CSS란? CSS(Cascading Style Sheets, 캐스케이딩 스타일 시트)란 HTML이나 XML같은 마크업 언어로 작성된 문서의 표시 방법을 기술하는 언어이다. HTML이 명사의 역할을 한다면 CSS는 형용사의 역할을 한다고 할 수 있다. 🔎 CSS rule (ruleset) h1 { color: blue; text-align: center; font-size: 20px; } 선택자(selector) : 꾸밀 HTML의 요소 이름 선언(declaration) : property: value;의 형태, 꾸밀 요소의 속성을 명시 속성(property) : 주어진 HTML 요소를 꾸밀 수 있는 방법 값(property value) : 속성을 위한 많은 결과 중 하나를 선택 🗝️ CSS를 적용하는..
[HTML] 🏷️시맨틱(Semantic) HTML
[HTML] 🏷️시맨틱(Semantic) HTML
2021.07.23🏷️Semantic HTML이란? 시맨틱(semantic)은 "의미의, 의미론적인" 이라는 뜻을 가진다. 즉, 시맨틱(semantic) HTML이란 의미론적 HTML을 말한다. 우리는 HTML의 요소에 대해 생각할 때 그 요소가 어떻게 보일지에 대해 생각하지 말고 실제로 무엇을 의미하고 나타내는 것인지 생각해야 한다. 이게 기본적인 시맨틱 HTML의 정의다. non-semantic elements의 예시 , , 등이 있다. 이들은 아무런 의미가 없는 element이다. semantic elements의 예시 , , 등이 있다. HTML 5와 함께 새롭게 등장한 elements를 포함한 이들은 개발자와 브라우저 모두에게 의미를 전달할 수 있다. 이쯤에서 우리는 왜 이렇게 코드를 작성해야 하는지 의문점을 가..
[HTML] 📕HTML이란?
[HTML] 📕HTML이란?
2021.07.22✍ HTML이란? HTML(Hyper Text Markup Language, 하이퍼텍스트 마크업 언어)이란 웹 개발자가 페이지의 전체 콘텐츠를 구조화하고 설명하는 마크업 언어이다. 실제로 프로그래밍 언어가 아닌 뭔가를 설명하기 위한 마크업 언어이다. HTML은 다음과 같은 특징을 가지고 있다. - HTML은 다양한 요소들(elements)로 이루어져있다. - HTML은 이러한 요소들을 사용하여 내용(content)을 설명한다. 🔎 HTML의 요소 HTML is a markup language 여는 태그(opening tag) : 내용(content) : 요소의 내용📝 닫는 태그(closing tag) : (content가 없는 경우 생략 가능) 🌐 Web browsers 결과적으로 Google Chrom..