Coding/Basic

    [How to code] Coupling and Cohesion

    이 글을 간단하게 번역한 글입니다. Coupling: Software module 끼리 interdependence한 정도 (결합도). High coupling: closely connected and changes in one module may affect other modules. Low coupling: 각자의 모듈이 독립적이고 하나의 모듈에서의 수정이 다른 모듈에 영향을 미치지 않는다. A good software design will have low coupling Cohesion: 모듈에서의 element들이 연관된 정도 (응집도). A good software design will have high cohesion. For example, 단일 책임을 가진 클래스, 다른 클래스에 바로 적용..

    [Pytorch] permute/transpose/view/reshape/flatten/squeeze

    참고자료1 참고자료2 참고자료3 참고자료4 텐서의 차원 변경 view contiguous하지 않는 함수에서도 작동한다. reshape() ==contiguous().view() reshape 텐서의 차원 교환 transpose contiguous tensor에서 사용할 수 있음 swap only two dimension view 함수를 이용해서 반환된 값은 원본과 data(memory)를 공유하기 때문에 하나만 수정해도 반환 이전의 변수와 이후 변수 모두 수정된다. permute: transpose의 일반화 버전 sway all the dimensions 텐서를 결합 stack cat 텐서의 차원 늘리기 unsqueeze dimension을 늘려주고 그 값은 1로 만듭니다 텐서의 차원 줄이기 squeez..

    [백준] 1463번: 1로 만들기(JAVA)

    https://www.acmicpc.net/problem/11726 | keyword: 동적 계획법, 반례에 휘둘리지 말기 ‼️이 문제의 정답 코드는 맨 마지막(Github Gist)에 있습니다. 중간중간의 코드들은 제 생각을 담은 일대기를 작성하였습니다. 백준 시리즈 글은 필자가 생각보다 많은 시간이 걸린 문제들의 생각을 정리해보고자 작성되었습니다. 문제의 링크는 여기를 이용해주세요! 첫번째 생각 이 문제를 딱 보고 음... 쉽겠군 하였다. 하지만 이 문제를 작성하게 된 이유이자, 시간이 많이 걸린 이유인 10의 사례를 보고 그 때부터 이 사례에 집착(?)하게 되었던 것 같다. 10은 10 -> 5 -> 4 -> 2 -> 1의 예시로 4번 들어오는데, 10 -> 9 -> 3 -> 1 의 경우로 3번 만..

    [백준] 1541번: 잃어버린 괄호 (JAVA)

    이 문제 포스팅을 작성한 이유 키워드: Integer Parse / 약간의 동적 계획법 ‼️이 문제의 정답 코드는 맨 마지막(Github Gist)에 있습니다. 중간중간의 코드들은 제 생각을 담은 일대기를 작성하였습니다. 첫번째 생각 맨 처음에 이 문제를 보고 든 생각은, 어떻게 빼는 수를 크게 할까? 였다. 괄호를 넣어서 '-' 부분을 극대화→식을 java 라이브러리로 계산하는 방법 을 생각하여 다음과 같이 코드를 작성하게 되었다. import java.util.*; import java.io.*; import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; public class Main { public static void m..

    [운영체제] 전체 기본 개념 정리

    이 글은 필자가 학교 수업(반효경 교수님의 '운영체제')을 듣고 수업 복습차 전체 정리한 글입니다. 추가하여, 박상수 교수님의 '임베디드 시스템' 과 연계되어 코드를 추가를 몇개 추가합니다. Chapter 1. Introduction to Operating Systems 1. 운영체제(Operating System, OS)란? - 커널: 운영체제의 핵심 부분으로 메모리에 상주하는 부분 - 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 2. 분류 - 동시작업가능여부: single tasking / Multi-tasking - 사용자의 수: single user / multi user - 처리 방식: batch processing(일괄 처리, 일정량..

    [Algorithms] Sorting정렬 한꺼번에 살펴보기

    이 글은 필자가 학교 강의(이상호 교수님의 "자료구조")를 듣고 복습차 정리한 글입니다. 참고해주세요! 정렬: 물건을 크기 순으로 오름차순/내림차순으로 나열하는 것 ※ 정렬 알고리즘을 통해 파악해야 할 사실은 알고리즘의 특성도 중요하지만 각 알고리즘의 진행 방식에 따른 복잡도, 어떤 상황에서 사용하면 가장 효과적인지를 면밀하게 생각해보는 것이 가장 중요하다고 판단됩니다. 정렬 알고리즘은 6가지 이상이 있지만, 대표적인 6가지로 추려서 보면, 단순하지만 비효율적인 방법(삽입 정렬, 선택 정렬, 버블 정렬)과 복잡하지만 효율적인 방법(퀵정렬, 힙 정렬, 병합 정렬)로 나뉩니다. (배열을 이용한 정렬 구현으로)하나씩 살펴보도록 하겠습니다. 삽입 정렬Insertion Sort 코드확인 앞부터 정렬을 순서대로 하..

    [백준] 10773번: 제로

    백준 10773번: 제로(문제링크) **사실 이 문제를 넣은 이유는 오늘이 포인터를 이용하여 문제를 푼 첫 날이기에 기록하고자 글을 만들게 되었다. ** 문제에서 파악해야 할 핵심요소 및 마인드맵 100,000개의 정수를 어떻게 받아낼 수 있는가? 처음에는 배열을 생각하였지만, 배열은 많은 수를 감당할 수 있는 능력이 되지 않는다. 다른 방법을 찾게 되었다. 쓴수 지우고 넣고 하는 형식은 무엇이 있을까? 주의사항 100,000개의 정수를 감당할 수 있는 메모리가 할당된 배열을 이용한다. int* list = (int*) malloc(sizeof(int)*num); 최근에 쓴 수에 대한 지우고 넣고 하는 방식은 stack스택을 이용하면 가능하다. 준비물: 데이터를 담을 배열(메모리가 할당된), 넣은 위치를..

    [DataStructures] 정적/동적 메모리 할당 간단 개념

    이 글은 학교 강의(이상호 교수님의 '자료구조')를 듣고 공부 목적차원에서 정리한 글입니다. 메모리 할당은 프로그램 자체가 컴퓨터에서 메모리를 할당 받는 것이기에 선언을 하지 않으면 메로리가 할당되지 않아 에러가 뜨는 경우가 발생하여 필수적인 방법입니다. 메모리를 할당받는 방법은 두가지가 있습니다. 1. 정적 메모리 할당 2. 동적 메모리 할당 1. 정적 메모리 할당 이는 메모리의 크기가 프로그램이 시작하기 전에 결정되는 것으로 프로그램의수행 도중에 크기가 변경될 수 없습니다. 가장 대표적인 예시는 변수나 배열의 선언을 들 수 있습니다. 먼저 선언을 하기에 뒤에서 malloc와 같은 함수를 불러서 할당할 필요가 없습니다. ex. int buffer[100]; 아니면 char name[] = "data s..

    [DataStructures] Stack스택

    이 글은 학교 강의(이상호 교수님의 '자료구조')를 듣고 복습과 정리차 작성한 글입니다. 스택(stack ADT스택 추상자료형)이란? 후입선출(LIFO: Last-In-First-Out) - 가장 최근에 들어온 데이터가 가장 먼저 제거되는 형태 나는 '책이 쌓여진 형태'를 바탕으로 암기하였을 때 받아들이기 쉬웠다. 이걸 굳이 왜 쓰는가? 교수님의 말에 따르면, 가장 최근에 들어온 데이터는 가장 따끈따끈한 정보를 가지는 데이터로 많이 쓰이기에 스택의 형태를 가지는 경우가 필요하다고 하셨다. 이러한 용도 외에도 스택의 형태 덕분에 괄호검사, 수식 계산, 미로 탐색할 때 알고리즘으로도 자주 사용된다. 스택에 쓰이는 함수 create(s) ::= 스택 s를 생성한다. is_empty(s) ::= 스택 s가 비어..

    [Basic] 숫자 길이 및 배열 전환 함수 살펴보기 c언어

    자료형 숫자 길이에 따른 범위 정리표 여기서 중요한 int, char 형에 집중하면 char 은 대략 127까지 int형은 5자리 수, long int형으로 가면 10째 자리까지 long long int형으로 가면 19째 자리 수까지 커버가 가능하다. int형 > 배열 to_string(숫자) sprintf(문자열, "%d", 숫자) 배열 > int형 stoi(배열)

    [백준] 2577번: 숫자의 개수

    백준 2755번: 숫자의 개수(문제링크) 문제에서 파악해야 할 핵심요소 및 마인드맵 긴 숫자의 숫자하나하나를 어떻게 받을 것인가? 0~9까지의 숫자를 어떻게 적립시킬 수 있는가? 주의사항 숫자를 char형 배열로 만들어주는 stdio.h의 sprintf 함수를 이용한다. string의 길이를 알려주는 strlen 함수는 string.h를 이용한다. #include #include //strlen을 위한 import int main(void){ int a, b, c; int cnt[10] = { 0 };//0~9 개수를 적립할 리스트 int sum; char temp[100];//긴 숫자를 담을 배열 준비 int i; scanf("%d %d %d", &a, &b, &c); sum = a*b*c; sprin..

    [백준] 8958번: OX퀴즈

    백준 8958번 문제 링크 문제에서 파악해야 할 핵심요소 및 마인드맵 긴 문제를 어떻게 받아올/글자 하나하나 읽어올 것인가? 연속되는 정보는 어떻게 받아올 것인가? 주의사항 string형이 더라도 char[]형식으로 받아온다. char[]길이는 strlen 형식으로 받아온다.(lenof 형식 아님!) + 이럴 때 string.h 포함하기 연속적인 조건 확인하기 : score =1로 세팅후에 조건이 나오면 적립하는 방식 / 원상태로 돌려놓는 방식도 포함한다. #include #include char s[80]; int main(){ int num, score, sum; scanf("%d", &num); for (int i = 0; i < num; i++){ sum = 0; score = 1; scanf("..

    [Basic] 출력 계속 받는 방법 정리

    while문을 이용하여 계속 받게 해도 출력 무한대로 받고 이후에 출력이 없어도 유지된다. 밑 예시로 확인해보자. 1. python import sys for line in sys.stdin: #여기부터 코드 작성 2. C언어 #include int main(void){ while(1){ scanf(~~~); #여기서 부터 코드 작성 } return 0; } 3. JAVA import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void mai..

    [백준]2920번: 음계 c언어

    백준 2920번 음계 문제링크 문제에서 파악해야 할 핵심요소 및 마인드맵 어떻게 오름차순, 내림차순, 아무것도 아닌 것으로 파악할 것인가? 주의사항 여러개 for문을 쓰는 것이 답만 맞으면 가능한 일이다. a,b,c의 경우로 나뉜다면 c는 a도 아닌, b도 아닌 경우로 파악하고 문제를 풀면 쉽다.(c는 mixed와 같은 나머지 경우로) 여부를 파악하는 경우에 a=0,1이나 True, false와 같은 이진법 개념을 가져와서 적용하는 것이 유리하다 #include int input[10]; int main(void) { int a = 1, b = 1; for (int i = 0; i < 8; i++) {//입력받기 scanf("%d", &input[i]); } for (int i = 0; i < 8; i+..

    [백준] 3052번: 나머지 c++

    백준 3052 나머지 문제 링크 이 문제를 위해 파악해야 할 핵심요소 및 마인드맵 배열을 어떻게 활용할 것인가? 배열 안에 서로 다른 값과 같은 값을 구분할 수 있는 방법을 알고 있는가? 주의해야할 점/여러 풀이 방법 및 아이디어 배열에 들어갈 수 있는 숫자 자체가 한정적인 경우 정해진 크기의 배열을 생성, 그 안에 숫자에 맞게 넣는 알고리즘 배열을 빈 상태 시작, 거기에 하나씩 넣고 중복을 확인하는 것 t; remain[t % 42] = 1; } int count = 0; for (int i = 0; i < 42; ++i) { count += remain[i]; } cout

    [백준] 1110번: 더하기 사이클 c언어

    백준 1110번 더하기 사이클 문제 링크 문제에서 파악해야 할 핵심요소 및 마인드맵 int 자료형의 십, 일의 자리 숫자는 어떻게 구할 수 있는가? String형으로 변환 후 [0],[1]의 자리로 구하고, int형으로 변환 (채택) /10, %10로 각각 구해내기 조건이 이루어질 때까지 이루어지는 사이클 do~while문 + while문에 조건 적기 while문 + while문에 조건 적기 while문(1) + while문 내부에 조건 + break 적기

    [DataStructures]Tree트리에 대해서 알아보자

    트리 순서 트리Ordered Tree 무순서 트리Unordered Tree 검색 알고리즘 너비 우선 탐색 : 낮은 레벨에서 시작해 왼쪽에서 오른쪽 방향으로 검색하고 그 다음 레벨에서 검색 깊이 우선 탐색 : 리프까지 내려가면서 검색하는 것을 우선순위로 하는 탐색 방법 전위 순회Preorder 중위 순회Inorder 후위 순회Postorder

    [백준] 2908 상수 C언어

    백준 2908 문제 (링크 여기서 확인하세요!) 풀이 1) 숫자로 받기 - 백/십/일의 자리를 각각 받아서 숫자 완성 - 크기 비교 #include int main() { int x, y, x2, y2; int f[2], m[2], l[2], i; scanf("%d %d", &x, &y); for (i = 0; i < 2; i++) { f[0] = x / 100; m[0] = (x % 100) / 10; l[0] = (x % 100) % 10; x2 = ((l[0] * 100) + (m[0] * 10) + f[0]); f[1] = y / 100; m[1] = (y % 100) / 10; l[1] = (y % 100) % 10; y2 = ((l[1] * 100) + (m[1] * 10) + f[1]); }..

    [DataStructure]Array배열/List리스트(ArrayList배열리스트, LinkedList연결리스트)

    Array배열 ex) int array[6], String Array[12] 좋은 ) Index가 존재하여 값 조회에 용이 나쁘 ) 개설시 크기를 지정해주어야 하며 변동도 불가능, 하나의 원소를 제거하면 그 제거된 공간은 빈 공간으로 유지되어, 후에 그 공간을 제거하기 위해 뒤에 있는 하나의 원소를 배열 중간에 추가해도 뒤에 내용들을 뒤로 옮기기 위한 까다로운 절차가 필요하다. List리스트 : 데이터를 일렬로 늘어놓은 자료구조 리스트는 인터페이스이고, 밑으로 ArrayList, LinkedList를 포함하고 있다. ArrayList배열리스트 내부에 있는 배열에 데이터를 저장하는 구조 Index로 데이터 항목을 찾는 일이 많을 경우 유용 크기가 고정된 Array와 달리 크기가 유동적인 측면에 유용 Arr..

    [DataStructure/Algorithm] DataStructure자료구조/Algorithm알고리즘 정리

    목차를 정리했습니다! 누르시면 해당 글로 들어갈 수 있습니다. Data Structure자료구조 기본적인 분류 Array배열 | ArrayList배열리스트 Hash Table해시 테이블 Stack스택 List리스트 Linear List선형 리스트 Linked List연결 리스트 Doubly Linked List이중 연결 리스트 Tree트리 | DFS, BFS Binary Tree이진 트리 Graph그래프 | 최단거리 Algorithm알고리즘: Sort/Search/etc. 기본으로 배우는 알고리즘들 Factorial | 팩토리얼 Fibonacci | 피보나치 수 Hanoi Tower | 하노이 탑 Sorting Algorithm정렬 알고리즘 | 동영상 정리본 Bubble-sort | 버블 정렬 Selec..

    [Python Library] NumPy 함수 정리/NumPy function cleanup

    Numpy 라이브러리를 사용하는 가장 큰 이유는 Array의 사용입니다. Python의 Array 와 비교되는 Numpy의 차이점은 바로 차원의 다양성이라고 말할 수 있습니다. Python Array는 현재 일차원 만을 지원하는 것에 비해, Numpy는 일차원 외에도 2차원을 지원하여 딥러닝이나 머신러닝을 사용할 때, 행렬을 이용한 계산이 필요한 시점에서 항상 쓰이게 됩니다. *이 글은 Kaggle:NumpyTutorialForBeginner를 참조하였고 그 외에도 제 나름대로 공부한 내용(Deep Learning Specialization by Andrew Ng, 데이터 과학을 위한 통계, An introduction to Statistical Learning 등등)을 덧붙여 만들어졌습니다. 그럼 시작..

    [Java] 클래스 정리

    클래스 이용하는 방법 #예시로 biginteger 이용 #클래스 import하기 import java.math.*; import java.util.Scanner; class IsItprime{ public void main(String args[]){ Scanner scan = new Scanner(System.in); int n = scan.nextInt(); #메서드를 이용하기 위해서는 그 객체안으로 넣어놔야하므로 클래스에 해당하는 객체 선언 BigInteger n = new BigInteger(n); scan.close(); #이용하고 싶은 메서드를 골라 객체와 함께 묶어서 물어보기 System.out.println(n.IsProbablePrime? "prime" : "not prime" ); } ..