[백준/1927] 최소 힙
·
PS/BOJ&Programmers
문제를 잘 이해하면 구현은 어렵지 않다. 첫번째 시도import sysn = int(sys.stdin.readline())heap = []# 자연수라면 in heap 0이라면 출력 + out heapfor _ in range(n): x = int(sys.stdin.readline()) if x == 0 and len(heap) != 0: print(min(heap)) heap.remove(min(heap)) elif x != 0: heap.append(x) else: print(0) 혼자서 문제에 따라 잘 구현한 것같은데,, 시간 초과ㅠㅠ구글링 후 알게된 점은 파이썬에서 따로 heappush, heappop을 제공한다는 것이었다..!..
[백준/1874] 스택 수열
·
PS/BOJ&Programmers
📝 문제 이해 입력 받은 수열의 첫번째 항까지 모두 stack에 넣고, 스택의 마지막 원소를 pop하면 수열의 첫번째 항이 완성된다. 예컨대 4 3 6 8 7 5 2 1 수열이 있으면 ,2,3,4까지 stack에 push하고 pop을 하면 4가 pop 되면서 수열의 첫번째 항이 완성된다. 만약 stack의 top(가장 마지막에 push된 값)이 입력 받은 수열과 같다면 pop해주고, 또 다시 다음 항의 수열만큼 stack에 push하고 조건문을 통해 검사하고.. 다음항이 stack의 top에 없다면 'NO'를 출력해준다. 🔎 내가 처음 짠 코드 #중간 단계 메모메모 n = int(input()) sequence = range(1,n+1) num, stack = [], [] for _ in range(n)..
[자료구조] 스택 / stack / 스택구현 / push / pop / empty / size / top
·
PS/Data Structure
https://www.acmicpc.net/problem/10828을 풀면서 복기했던 스택에 대해 정리한다. 1. 스택(stack)이란? 컴퓨터 과학에서 요소들의 집합으로 기능하는 abstract data type. (출처: 위키백과) 쉽게 말해서 배열처럼 요소들의 집합인 자료구조이다. 스택의 강력한 특징은 LIFO(Last In - First Out)이다. 조금 더 직관적인 이해를 위해 그림을 그려봤다. 위 그림과 같이 먼저 들어간 a보다 c가 먼저 나오는 구조다. 그리고 데이터는 한쪽에서만 입출력이 가능하다. 처음 스택을 접하면 받아들이기가 힘들 수도 있다. 일반적인 상식과는 어긋나기 때문이다🤣 (먼저 들어간 사람이 먼저 나오는 게 상식적이니까..?) 이렇게 생각하다 보니까 갑자기 스택의 예시로는 뭐..
[백준/14912] 숫자 빈도수
·
PS/BOJ&Programmers
int > strfor i in range(1, n+1): for j in str(i): 위 코드의 의미는 1부터 n까지의 숫자(int)를 만들고, 그 숫자들을 str로 변형한다는 뜻이다.숫자 빈도수 문제에서는 입력된 d에 해당하는 숫자와 같은 숫자의 빈도를 체크하라고 했으니,이중 for문 아래에 다음과 같이 작성해주면 된다. 전체 코드n,d = map(int, input().split())cnt = 0for i in range(1, n+1): for j in str(i): if j == str(d): cnt += 1print(cnt)  프로그래밍을 C로 시작해서 그런지 원시적으로 코드를 짜는 습관이 없지 않아 있다..다른 사람의 코드를 참고해보면 count함수..
[백준/1157] 글자 공부
·
PS/BOJ&Programmers
처음 쓴 코드str = input()size = len(str)cnt = [0 for i in range(size)] # 입력 받은 문자열의 size 만큼 배열 선언 (카운팅을 위해)for i in range(size): for j in range(i+1, size): if str[i] == str[j]: # 이중 포문으로 문자열 서로서로 비교 cnt[i] += 1 # 같은 문자열이 나오면 cnt 배열을 + 해준다.for i in range(len(cnt)): if cnt[i] == cnt[i+1]: print('?') exit()m = max(cnt)if m == 1: print(str.upper()) else: pri..
[백준/1001] A-B
·
PS/BOJ&Programmers
문제 두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오. 입력은 첫째줄에 한번에 A와 B가 주어진다. 파이썬에서 두 정수 한번에 입력 받는 방법 ! a, b = map(int, input().split()) 이 코드의 뜻은 입력 받은 값을 공백을 기준으로 나누고, 입력받은 값들을 int형으로 변환하여 변수 a, b에 저장하라는 것이다. 파이썬 map 함수 입력 받을 때 사용한 map은 파이썬의 내장함수이다. 데이터의 형태를 변환하기 위해 사용한다. 위 코드에서는 입력 받은 수를 한번에 int형으로 변환하기 위해 사용하였다. 문제에서 a, b를 한번에 입력 받고, 뺄셈한 값을 출력하라고 했으니까 코드는 다음과 같이 쓰면 된다. a, b = map(int, input().split(..
[python/AI] MNIST란? MNIST 데이터 개념 / 컴퓨터 비전 / 인공신경망
·
ML
1. MNIST란? MINIST는 손글씨 숫자 이미지들이 모여있는 데이터로, 컴퓨터 비전 데이터라고도 한다. 다음과 같은 손글씨 이미지로 구성되어있다. 이 데이터는 눈으로 봤을 때는 그냥 손글씨 숫자이지만, 각 이미지의 숫자가 무엇인지에 대한 라벨이 붙어있다. 인공신경망에서 라벨은 중요한 역할을 한다. 인공신경망 함수를 통해 출력된 값과 비교하여 상관관계를 따져보는 과정이 학습에서 중요한 부분이기 때문이다! MINIST 이미지는 28*28 크기의 이미지다. 또한 흑백이미지이므로, 채널은 하나다. (rgb 이미지는 r, g, b 세개의 채널) 2. MNIST 사용을 위한 Module 본격적으로 코딩을 하기 전에 먼저 module을 import하자. 대략 넘파이(numpy), matplotlib, 토치(to..
[python/AI] 텐서(tensor)란? 텐서(tensor) 개념 / 파이토치(pytorch)에서의 활용/ 인공지능(AI) 기본 개념
·
ML
1. 텐서(tensor)란? 아래의 그림을 통해 텐서(tensor)에 대해 직관적으로 이해할 수 있다. x = 5, y = 7과 같은 값 1은 스칼라이다. 스칼라 모이면 벡터, 벡터의 차원이 높아질수록 행렬 -> 3차원 텐서 -> 4차원 텐서 ->...n차원 텐서라고 명칭한다. 즉 텐서(tensor)는 3차원 이상의 행렬으로, 데이터의 배열이다. 이때 차원은 rank로 표현한다. 텐서(tensor)는 GPU나 하드웨어 가속기에서 실행할 수 있다는 점을 제외하면 Numpy의 ndarray와 매우 유사하다. 그렇다면 왜 numpy를 사용하지 않고 굳이 Pytorch에서 tensor 메소드를 사용하는 걸까? 2. Pytorch를 사용하는 이유_ Tensor와 Pytorch 앞에서 텐서(tensor)는 n차원 ..
[python/AI] matplotlib 개념/사용/데이터시각화
·
ML
jupyter notebook에서 matplot을 사용하는 법을 다루어 보겠다. jupyter 사용을 위해 anaconda를 설치했다면, matplotlib은 자동으로 설치되어있을 것이다. 다음과 같이 import 해서 사용할 수 있다. import matplotlib.pyplot as plt 1. matplotlib이란? 데이터를 그래프로 다양한 방법을 통해 시각화해주는 파이썬 라이브러리로, 말 그대로 데이터시각화 도구이다. plot() 임의의 개수의 인자를 받아 그래프로 나타내는 matplotlib의 함수 x = [1, 2, 3] y = [1, 2, 3] plt.plot(x,y) plt.title("My plot") plt.xlabel("X") # x축 이름 설정 plt.ylabel("Y") # y축..
[OS] Linker(링커)와 Linking(링킹)
·
CS/OS
1. Linker(링커)링커는 프로그래머가 작성한 여러 소스 파일을 하나로 연결해주는 역할을 한다. 이러한 링커의 역할에 의해 응용 프로그램을 하나의 큰 파일이 아니라, 작은 단위의 소스파일로 나누어서 효율적으로 프로그래밍을 할 수 있다. 우리가 평소에 코딩할 때 자주 사용하는 라이브러리들도 링커 덕분에 사용할 수 있는 것이다.링커가 분리된 소스파일을 연결해주는 역할을 하기 때문! 이렇게 모듈 단위(개별 소스 파일)로 코딩을 하면 시간적으로도 공간적으로도 효율성이 높다.프로그래머가 전체 코드를 수정하고 컴파일하는 대신 , 수정이 필요한 소스 파일의 내용만 컴파일 하면 되기 때문에 코드 관리의 효율성이 훨씬 높다. 2. Linking - 링커가 하는 일1) Symbol resolution define과 r..
[python] 리스트에 대해서 알아보자.
·
언어/PYTHON
프로그래밍을 공부하는 사람이라면 한번 쯤은 알고리즘과 자료구조에 대해 들어보았을 것이다.알고리즘은 특정 문제를 해결하기 위한 단계를 뜻하고,자료구조는 컴퓨터 내에서 자료를 구조화하는 특별한 방식이다.우리는 알고리즘과 자료구조를 통해 효율적인 프로그래밍을 할 수 있다! 자료구조의 한 종류인 리스트에 대해 알아보자. 1. 리스트란?리스트는 기본적으로 리스트 상수이며, 어떤 변수에 할당된다. friends = ['Amy', 'Jack', 'Effy']fruits이라는 변수는 3개의 문자열을 가지고 있는 것이다. 리스트는 컬렉션의 한 종류이다.        컬렉션: 하나의 변수에 여러 값을 넣는 것이 가능하도록 하는 것! 2. 리스트 선언리스트의 각 항목들은 '[]'로 둘러싸이게 되며, 항목들에 대한 구분은 ,..
[자료구조] 두 개의 Rectangle 위치 비교(feat. C++)
·
PS/Data Structure
자료구조 수업 첫번째 과제는 1. Rectangle.cpp와 Rectangle.h, main.cpp의 관계를 파악하고 Rectangle 객체 생성 ~ 파괴 관계를 아는 것. 2. 두 개의 Rectangle 객체 위치 비교. 첫과제의 1번을 해결하기 위해서 1. 클래스와 객체 2. 생성자&파괴자 3. 연산자 오버로딩 의 개념에 대한 이해가 필요했다. (이에 대해서는 따로 C++ 카테고리에서 자세히 설명할 것이다.) 코드 해석을 하기 위해 가장 중요한 것은 "생성자와 소멸자가 언제 어떻게 생성되는지 이해하고, 그를 바탕으로 프로그램 결과물을 파악" 하는 것이라고 느꼈다. 다음은 교수님께서 작성하신 main.cpp 내용이다. int main() { Rectangle r1(1, 1, 3, 4); std::cout
sebinChu
Studying IT with cobinding