-
troubleshooting
gpt api 대화 내용 저장
GPT 이전 대화 기억gpt api를 사용하면서 가장 문제점은 지속적인 대화가 불가능하다는 것이다.이를 해결하기 위해서는 매번 api를 호출할 때 마다 이전 대화를 함께 보내야한다.단순 저장 방식구현 방법첫 번째 방법은 단순히 지금까지의 대화내용을 계속 저장하여 api를 호출할때 같이 보내는 것이다.(첫 번째 방법 알고리즘)user_message = { "role": "user", "content": user_input}messages.append(user_message) # 사용자 메시지 추가# 메시지 리스트 전송하고 결과 받기chat_completion = client.chat.completions.create( messages=messages, model="gpt-3.5-tu..
-
백준
[백준] 10828번 스택 C++
https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 스택 자료구조에 대한 문제다. 스택은 LIFO(Last In First Out) 구조이다. 스택 기본 함수 push stack.push(123); // 123을 맨 끝에 넣음 pop stack.pop(); // 맨 끝에 있는 값을 뺴냄 size stack.size(); // 스택 크기 반환 empty stack.empty(); // 스택이 비어있는지 확인한다. 비어있으면 1, 아..
-
dart
[dart] 1. 문법
dynamicvoid main() { dynamic name = "Jkelly"; name = 1;}기존 var 타입을 사용하여 선언하는 경우 타입을 유추하고 추론된 타입이 고정되지만, dynamic 키워드를 사용하면 변수의 타입이 고정되지 않음 final/constvoid main() { final DateTime now = DateTime.now(); print(now); // 에러 const DateTime now = DateTime.now(); print(now);}final은 런타임 상수이므로 DateTime.now()와 같이 함수가 실행되는 순간 현재 시간을 반환하는 경우 문제없이 실행됨const는 빌드타임 상수이므로 컴파일 오류코드를 실행하지 않은 상태에서 값이 확정되면 co..
-
카테고리 없음
[codility] Time Complexity 3: TapeEquilibrium C++
https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/ TapeEquilibrium coding task - Learn to Code - Codility Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|. app.codility.com A non-empty array A consisting of N integers is given. Array A represents numbers on a tape. Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0],..
-
백준
[백준] 10845번 큐 C++
https://www.acmicpc.net/status?user_id=ymalk0503&problem_id=10845&from_mine=1 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 자료구조 queue(큐)에 관한 문제다. queue는 FIFO(First In First Out) 구조이다. 문제에서 쓰이는 함수는 다음과 같다. 큐 기본 함수 push queue.push(123); // 123을 끝에 넣음 pop queue.pop(); // 맨 앞에 있는 값을 삭제 size queue.siz..
-
c++
[C++] Greedy Algorithm - Fractional Knapsack algorithm
Fractional Knapsack algorithm가방에 물건을 최대로 넣는 알고리즘이다. 단, 가치를 최대로 해야한다.구현 과정1. 클래스 및 데이터 구조 정의1.1 Goods 클래스// 물품 클래스 정의class Goods {public: int w; // 무게 int v; // 가치 double vw; // 무게 대비 가치 비율 // 생성자 Goods(int w, int v) { this->w = w; // 무게 초기화 this->v = v; // 가치 초기화 vw = (double)v / (double) w; // 무게 대비 가치 비율 계산 if (isnan(vw)) vw = 0; // 비율이 NaN일 경우 0으로 설정..
-
python
[Python] Greedy Algorithm - CoinChange
CoinChange가장 큰 동전 단위부터 계산하여 잔돈 수를 계산하는 알고리즘이다.구현 과정1. 변수 초기화필요한 변수들을 정의한다.money = 2780# 동전 단위 정의coins = [500, 100, 50, 10]# 동전 수 계산을 위한 변수sum = [0, 0, 0, 0]2. 출력 내용 초기화출력할 문자열 선언 및 초기화# 출력 내용 생성output = f"{money} Won - "3. 동전 수 계산동전 단위가 큰 동전부터 계산한다.# 동전 수를 계산하는 변수 접근을 위한 인덱스 정의index = 0for coin in coins: # 거스름 돈보다 크기가 작아질 때 까지 반복 while money >= coin: money -= coin sum[index] ..
-
java
[java] 객체지향 - 변수의 초기화
변수의 초기화 맴버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 초기화하지 않고 사용해도 되지만, 지역변수는 사용하기 전에 반드시 초기화 해야한다.class InitTest { int x; // 멤버변수, 0으로 초기화됨 int y = x; // x는 자동으로 0으로 초기화됐으므로 y도 0이 된다. void method() { int i; // 지역번수 int j = i; // i는 지역변수이므로 초기화되지 않았다. 따라서 컴파일 에러 }}위 코드를 실행하면 int j = i;에서 컴파일 에러가 나는 것을 알 수 있다. C언어에서는 변수를 초기화하지 않은 채로 출력하면 컴파일 에러가 나지 않고 정상적으로 ..
-
git
[Git] 3. 빔 편집기에서 텍스트 문서 만들기
빔에서 문서 작성하고 저장하기 $ vim test.txt test.txt 파일을 생성한다. 위 사진처럼 처음 텍스트를 열거나 생성했을 땐 ex 모드로 열린다. ex 모드에서는 파일을 저장하거나 종료할 수 있다. i 키를 누르면 INSERT로 바뀌며 입력 모드가 된다. 텍스트를 입력하거나 수정할 수 있다. esc 키를 누르면 다시 ex 모드로 돌아간다. 텍스트를 입력한 후 esc > :wq > enter 순서로 저장할 수 있다. 빔의 ex 모드 명령 명령 설명 :w or :write 편집하던 문서를 저장 :q or :quit 편집기를 종료 :wq 편집하던 문서를 저장하고 종료 :q! 편집하던 문서를 저장하지 않고 종료, .swp인 임시 파일 생성 :wq 파일명 편집하던 문서를 지정한 파일 이름으로 저장 c..
-
git
[Git] 2. 리눅스 명령
현재 디렉터리 살펴보기 $ pwd pwd: print working directory pwd 명령은 현재 위치의 경로가 나타난다. $ ls ls: list 현재 디렉터리에 어떤 파일이나 디렉터리가 있는지 확인하는 명령 다음 옵션을 ls -[옵션]와 같이 사용하면 추가 정보를 얻을 수 있다. 또한, 두 개이상의 옵션을 동시에 사용할 수 있다. 예) ls -l, ls -al 옵션 설명 a 숨긴 파일이나 디렉터리도 함께 표시한다. l 파일이나 디렉터리의 상세 정보를 함께 표시한다. r 파일의 정렬 순서를 거꾸로 표시한다. t 파일 작성 시간순(내림차순)으로 표시한다. 터미널 창 지우기 $ clear 터미널 화면을 비울 수 있다. 터미널 창에서 디텍터리 이동하기 cd: change directory 기본적으로 ..
-
dart
[dart] 4. 객체지향 프로그래밍2
믹스인 class Idol { final String name; final int membersCount; Idol(this.name, this.membersCount); void sayName() { print('저는 ${this.name}입니다'); } void sayMembersCount() { print('${this.name} 멤버는 ${this.membersCount}명 입니다.'); } } // 믹스인으로 원하는 기능 넣기 mixin IdolSing on Idol { void sing() { print('${this.name}가 노래를 부릅니다.'); } } // 믹스인은 with으로 상속하는 클래스에서도 사용가능 class BoyGroup extends Idol with IdolSing {..
-
백준
[백준] 1406번 에디터 C++
https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 문자열을 입력받고 커서의 위치를 옮기며 커서의 위치 앞에 문자를 추가하거나 삭제하는 문제이다. 눈여겨보아야 할 부분은 원하는 위치에 문자를 추가하고 삭제할 수 있어야 한다. 나는 이를 해결하기 위해 List라는 자료구조를 사용하였다. List 자료구조는 노드기반 컨테이너이기 함수를 통해 양끝 쪽에 원소를 추가하거나 삭제하는 것은 물론, 원하는 위치에 문자를 추가하고 삭제할 수 있다. 하지만 중간에 ..
-
백준
[백준] 9093번 단어 뒤집기 C++
https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 입력받은 문장을 단어별로(공백으로 구분) 나누어, 그 단어를 뒤집어 출력하는 문제이다. 단, 단어 배열의 순서는 동일하게 한다. 테스트 케이스 개수 입력받기 int n = 0; cin >> n; cin.ignore(); // 버퍼 비우기 후에 string으로 한 문장을 공백 포함하여 입력받기 위해 버퍼를 비워준다. 처음에 테스트케이스의 수 T를 입력받는 과정에서 개행 문자가 버퍼에 남아있다..
-
dart
[dart] 2. 문법2
null 관련 연산자 void main() { double? num1 = 1; // num1은 null값을 가질 수 있음 double num2 = null; // ?를 명시하지 않아 null값을 가질 수 없음, 에러 double? num; // 자동으로 null값 지정 num ??= 3; // num이 null값일 경우 3으로 저장됨 num ??= 4; // num은 null값이 아니므로 3 유지 print(num); } 타입 뒤에 '?'를 추가해 줘야 null값을 가질 수 있음 >> '?'를 추가하지 않으면 null값을 가질 수 없음, 에러 ??= 연산자는 null값일 경우 지정한 값을 저장하는 연산자 타입 비교 연산자 void main() { int num = 1; print(num is int); ..
-
SSAFY
[SSAFY 13th] Welcome Kit
SSAFY 13th Welcome Kit Unboxing싸피에서 웰컴킷을 받았다.구성품은 스탠리 보온컵, 마우스 패드, 보조배터리, 노트, 펜, 싸피 후드집업(검정), 싸피 티셔츠(흰색)이 있다.옷은 바로 세탁기로 향해서 사진에는 없다...열어보자!생각보다 알찼다.특히 마우스패드는 기대를 안했는데 퀄이 좋아서 만족했다!노트에는 싸피에 관한 정보들이 적혀있는데, 완전 싸피스럽다...펜은 아직 안 써봤는데 좋아 보이긴 한다.노트에 펜을 꼽을 수 있게 되어있어서 바로 꼽았다.보조배터리 보라색인데, 잘 안 쓸 것 같지만 있어서 나쁠 건 없다. (8핀도 지원한다.) 다음은 메인 구성품인 무려 '스탠리 보온컵'을 열어보겠다!내 건 초록색이다... 실버색을 원하긴 했지만, 나름 유니크한 느낌이라 적당히 만족한다.스탠..
-
백준
[백준] 1010번 다리 놓기
https://www.acmicpc.net/problem/1010 해당 문제는 쉽게 말해서, N개의 점와 M개의 점을 중복없이 연결하는 경우의 수를 구하는 문제이다. (N 결론은 조합순열(combination)을 계산하면 된다.공식: C(n, r) = P(n, r) / r!하지만 단순히 공식을 이용하여 계산하게 되면, n과 m의 최댓값은 30이므로 정수 범위를 벗어나게 된다.따라서 DP를 이용하여 문제를 풀어보도록 하겠다. 먼저, 조합 테이블을 만들어보자.행은 n을 나타내고, 열은 r을 나타낸다. 다음은 DP로 해결하기 위해 다음 수식을 활용한다.C(n, r) = C(n - 1, r - 1) + C(n - 1, r)위 수식을 시각화 하면 다음과 같이 나타낼 수 있다.해당 규칙이 계속 반복되는 것을 ..
-
백준
[백준] 14916번 거스름돈
https://www.acmicpc.net/problem/14916 해당 문제는 그리디 알고리즘으로 해결하였다. 잔돈으로는 5와 2만 존재한다.동전의 개수가 최소가 되도록 하여야 하는데, 기존 그리디 알고리즘인, 가장 단위가 큰 동전부터 해당 동전보다 가격이 낮을 때까지 계산하는 방식을 사용하면아래와 같은 문제점이 발생한다.16원일 경우, 기존 그리디 알고리즘은 5원 3개, 나머지 1원이 남게 된다.따라서 거슬러 줄 수 없으니 -1을 출력하게 된다. 하지만 사실은 그렇지 않다.16원일 경우 5원 2개, 2원 3개로 잔돈을 나누어 줄 수 있다. 따라서 간단한 조건문을 추가하여 그리디 알고리즘을 적용해야한다.이는 5원과 2원에서 힌트를 얻을 수 있었다. 일단, 5는 홀수이다.따라서 거스름돈을 구하기 위한 액..
-
백준
[백준] 5347번 LCM
https://www.acmicpc.net/problem/5347 LCM은 최소 공배수를 구하는 문제이다. 최소 공배수는 소인수분해를 통해서 값을 찾을 수 있는데,중복되는 소인수는 차수가 큰 횟수만큼, 그리고 나머지 소인수를 모두 곱해주면 그 값이 최소공배수이다. 예시로 12와 16을 소인수분해하여 최소 공배수를 구해보면, 12 = 2^2 * 316 = 2^4 여기서 중복되는 소인수의 차수가 큰 수(2^4)와 나머지 소인수(3)을 곱해주면, 48(2^4 * 3)이 최소공배수가 된다. 해당 개념을 활용하여 최대공약수(GCD)를 이용해 문제를 해결할 수 있다.똑같이 12와 16을 예시로 들면, 12 = 2^2 * 316 = 2^4 에서 최대공약수는 2^2임을 알 수 있다. 여기서 모든 소인수를 곱하고, ..
-
c
[C] DP - Floyd Warshall Algorithm
Floyd Warshall최단 거리를 계산하는 알고리즘으로, Dijkstra 알고리즘과 결과 값은 동일하지만 시간복잡도에서 더 효율적이다.구현 과정1. 상수 및 함수 정의1.1 상수 정의const int N = 10; // 지역 수N은 그래프의 정점(지역)의 수를 정의한다. 여기서는 10개 지역을 의미한다.1.2 최소값을 반환하는 함수int min(int a, int b) { return a min: 두 정수 중 최소값을 반환하는 함수2. Floyd-Warshall 알고리즘 구현2.1 Floyd_Warshall 함수void Floyd_Warshall(int D[N][N]) { // 각 중간 정점 k에 대해 거리 갱신 for (int k = 0; k Floyd_Warshall: 주어진 인접..
-
c
[C] Greedy Algorithm - Huffman Compression Algorithm
Huffman Compression Algorithm허프만 압축을 직접 C언어로 구현하였다.구현 과정1. 구조체 정의1.1 Node 구조체// 노드 구조체 정의typedef struct Node { int count; // 빈도수 char mun; // 문자 struct Node *left; // 왼쪽 자식 노드 struct Node *right; // 오른쪽 자식 노드} Node;Node 구조체는 허프만 트리의 각 노드를 나타낸다.count: 해당 문자의 빈도수mun: 문자를 저장left: 왼쪽 자식 노드right: 오른쪽 자식 노드1.2 priorityQueue 구조체// 우선순위 큐 구조체 정의typedef struct priorityQueue { Node *pq; // ..
-
python
[Python] Greedy Algorithm - Job Scheduling algorithm
Job Scheduling algorithmCPU 스케줄링 알고리즘이다. 빠른 시작 시간 기준으로 처리하는 알고리즘을 구현하였다.구현 과정1. 기기 확인 함수# 기기에서 주어진 시간 내에 작업을 수행할 수 있는 기기의 인덱스를 찾는 함수def checkMachine(machine, time): for i in range(len(machine)): if len(machine[i]) checkMachine 함수는 주어진 time 내에 작업을 수행할 수 있는 기기의 index를 찾는 함수다.모든 기기를 순회하며, 각 기기의 작업 수가 주어진 시간 이하인 경우 해당 기기의 index를 반환한다.모든 기기가 주어진 시간 내에 작업을 수행할 수 없으면 –1을 반환한다.2. 작업 추가 함수# m: ..
-
java
[Java] Greedy Algorithm - Set Cover algorithm
Set Cover algorithmn개의 원소를 가진 집합 U가 있고, U의 부분집합들을 원소로 하는 집합 F가 주어질 때, F의 원소들인 집합들 중에서 어떤 집합들을 선택하여 합집합하면 U와 같게 될지, 또한 집합들의 수를 어떻게 최소화할 수 있을지 구하는 문제이다. 집합을 최소화하기 위해 Optimal Solution 알고리즘을 사용하면 되지만 시간 복잡도가 O(2^n)이다.따라서 시간복잡도를 해결하기 위해 Greedy Algorithm인 Set Cover Algorithm을 통해 근사해를 구한다.최적해와 근사해의 시간을 비교해보겠다.구현 과정1. Set Cover 알고리즘1.1 Pair 클래스 // 집합과 인덱스를 저장하는 Pair 클래스 정의 static class Pair { ..
-
c
[C] Greedy Algorithm - Dijkstra Algorithm
Dijkstra AlgorithmPrim Algorithm을 적용하여 각 지역 별 최소 거리를 구하는 알고리즘이다.구현 과정1. 전역 변수 정의const int n = 10;그래프의 정점 수를 정의한다.이 경우 10개의 도시를 나타낸다.2. Dijkstra 알고리즘 함수// 다익스트라 알고리즘을 구현하는 함수int *Dijkstra(int s, int vertex[n][n]) { static int D[n]; // 최단 거리 배열 // 거리 배열 초기화 (무한대) for (int i = 0; i Dijkstra 함수는 시작 정점 s와 인접 행렬 vertex를 입력받아 최단 거리 배열을 반환한다.최단 거리 배열 D를 초기화 하고 시작 정점의 거리를 0으로 설정한다.방문 여부를 체크하기 위한..
-
java
[Java] Greedy Algorithm - Prim Algorithm
Prim Algorithm최소 신장 트리를 구하는 알고리즘이다.구현 과정1. 클래스 및 데이터 구조 정의1.1 pair 클래스 // 정점과 가중치를 나타내는 Pair 클래스 static class Pair { private int v, size; public Pair(int v, int size) { this.v = v; this.size = size; } public void set(int v, int size) { this.v = v; this.size = size; } public int getV() { return ..
-
c++
[C++] Greedy Algorithm - Kruskal Algorithm
Kruskal Algorithm최소 신장 트리를 구하는 알고리즘이다.구현 과정1. 전역 변수 정의정점 수를 저장하기 위한 변수 n을 선언한다.// 정점 수int n = 6;2. 간선 구조체 및 정렬 기준 정의// 간선struct Edge { // 정점 1, 2 int v1; int v2; // 가중치 int size;};// size 오름차순 정렬을 위한 정렬 함수struct cmp { bool operator()(Edge a, Edge b) { return a.size > b.size; }};Edge 구조체는 간선을 나타내며, 두 정점(v1, v2)와 가중치(size)를 포함한다.cmp 구조체는 간선을 가중치 기준으로 오름차순 정렬하기 위한 함수 객체다..
-
python
[Python] 분할 정복 알고리즘 - Closest Pair(최근접 점의 쌍)
분할 정복엄청나게 크고 방대한 문제를 조금씩 조금씩 나눠가면서 용이하게 풀 수 있는 문제 단위로 나눈 다음 그것들을 다시 합쳐서 해결하자는 개념Closest Pair - 최근접 점의 쌍시간복잡도가 O(nlogn)으로, 입력된 점 중, 가장 근접한 점 쌍을 구하는 알고리즘이다.분할 정복을 통해 쌍을 찾을 수 있다.탐색 과정기본적인 탐색 방법은 아래와 같다.사진처럼, 두 부분(PL, PR)로 나누고 각 부분에서 가장 근접한 점 쌍(dl, dr)을 찾는다.그리고 dl과 dr 중에 더 짧은 것(d)을 고르고, 분할 기준에서 아래와 같이 두엇을때(S), S에 속하는 점들의 거리를 구한다.위 방식으로 구하는 이유는, S에 속하지 않은 점들은 모두 d 값보다 작을 수 없기 때문이다.점들의 집합을 더 이상 분할할 수 ..
-
java
[Java] 분할 정복 알고리즘 - Quick Sort
#분할 정복엄청나게 크고 방대한 문제를 조금씩 조금씩 나눠가면서 용이하게 풀 수 있는 문제 단위로 나눈 다음 그것들을 다시 합쳐서 해결하자는 개념Quick Sort시간복잡도가 O(nlogn)으로, Merge Sort와 다르게 분할한 배열의 크기가 일정하지 않은 형태이다.또한, 메모리 낭비가 낮다는 장점이 있다.정렬 과정아래와 같은 배열이 있다 가정하자.arr = [3, 8, 9, 7, 5, 2, 6, 1, 4]위 배열에서 랜덤으로 피봇을 선정한다.먼저, 6번 인덱스를 피봇으로 선정한 뒤, left는 맨 왼쪽 인덱스, right는 맨 오른쪽 인덱스라 정의하고 분할 정복을 해보자.1: 피봇과 left의 값을 바꾼다.2: left + 1과 rigth의 값을 피봇과 비교하여 피봇보다 작은 값은 left로 오게하..
-
c++
[C++] 분할 정복 알고리즘 - Merge Sort(합병 정렬)
분할 정복엄청나게 크고 방대한 문제를 조금씩 조금씩 나눠가면서 용이하게 풀 수 있는 문제 단위로 나눈 다음 그것들을 다시 합쳐서 해결하자는 개념Merge Sort - 합병 정렬분할 정복 알고리즘 중 하나로, 시간복잡도가 O(nlogn)인 정렬 알고리즘이다정렬할 배열을 1개 단위로 쪼갠 뒤, 다시 합치면서 정렬을 하게 되는 알고리즘이다.정렬 과정아래와 같은 배열이 있다고 가정해보자.arr = [5, 2, 6, 8, 10, 9, 1, 3]이는 다음과 같이 분할 될 수 있다.# 1[[5, 2, 6, 8], [10, 9, 1, 3]]# 2[[[5, 2], [6, 8]], [[10, 9], [1, 3]]]# 3[[[[5], [2]], [[6], [8]]], [[[10], [9]], [[1], [3]]]]위와 같이..
-
c++
[c++] 코테 정리(1)
내림차순 정렬하기vector자료구조에서 정렬을 할때에는 sort 함수로 정렬하나, bool형식의 함수를 선언하여 정렬방식을 정의한다.내림차순인 경우 return a > b 로 정의할 시, 앞의 수가 더 클 때 true를 반환하여 내림차순 정렬 가능bool compare(int a, int b) { return a > b;}vector solution(vector arr) { sort(arr.begin(), arr.end(), compare); return arr;}중복제거포인터주소를 반환하는 unique 함수를 사용한다.unique 함수는 중복되는 값들을 뒤로 밀어낸다. 모든 검사가 끝났을 때, 뒤로 밀려진 중복된 숫자의 시작부분의 주소를 반환한다.참고로 이미 정렬된 배열에 사용해야한다.그렇게 반환..
-
java
[java] 객체지향 - 멤버변수의 초기화
초기화 순서클래스 변수(cv) 초기화 > 인스턴스 변수(iv) 초기화자동 초기화 > 명시적 초기화 > 초기화 블럭, 생성자명시적 초기화변수를 선언과 동시에 초기화하는 것가장 기본적이면서도 간단한 초기화 방법 초기화 블럭iv 초기화: 클래스 내에 블럭({}) 만들고 그 안에 코드 작성cv 초기화: 블럭 앞에 static 덧붙이기
-
java
[java] 객체지향 - 클래스 변수
클래스 변수 인스턴스 변수(iv) 앞에 static을 붙여 선언공통적인 값을 유지해야 하는 속성의 경우, 클래스 변수로 선언인스턴스를 생성하지 않고 언제라도 바로 사용할 수 있음import java.io.*;import java.util.*;class num { int a; static int b = 10;}class Main { public static void main(String[] args) throws IOException { num[] n = {new num(), new num()}; // 객체 생성 num.b = 100; // 클래스 변수 값 변경 -> 모든 객체의 b 값이 변경됨 n[0].a = 0; n[1].a = 1; ..
-
codility
[codility] Time Complexity 2: PermMissingElem C++
https://app.codility.com/programmers/lessons/3-time_complexity/perm_missing_elem/ PermMissingElem coding task - Learn to Code - Codility Find the missing element in a given permutation. app.codility.com An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing. Your goal is to find that missing e..
-
codility
[codility] Time Complexity 1: FrogJmp C++
https://app.codility.com/programmers/lessons/3-time_complexity/frog_jmp/ FrogJmp coding task - Learn to Code - Codility Count minimal number of jumps from position X to Y. app.codility.com A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D. ..
-
codility
[codility] Arrays 2: OddOccurrencesInArray C++
https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/ OddOccurrencesInArray coding task - Learn to Code - Codility Find value that occurs in odd number of elements. app.codility.com A non-empty array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value,..
-
codility
[codility] Arrays 1: CyclicRotation C++
https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/ CyclicRotation coding task - Learn to Code - Codility Rotate an array to the right by a given number of steps. app.codility.com An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, ..
-
codility
[codility] Iterations 1: BinaryGap C++
https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ BinaryGap coding task - Learn to Code - Codility Find longest sequence of zeros in binary representation of an integer. app.codility.com A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has bina..
-
git
[Git] 1. 시작하기
깃을 사용하는 이유 버전 관리하기 깃은 문서의 수정, 변경 등을 구체적으로 기록하는 버전 관리 시스템 백업하기 협업하기 원격 저장소에 저장된 문서 등을 팀원들과 협업할 때 유용하다. 문서의 어떤 부분을 어떻게 수정했는지 기록으로 남기 때문에 오류가 생겼을 때도 파악하기 쉽다. 깃 프로그램의 종류 깃허브 데스크톱 깃허브에서 제공하는 프로그램으로, 사용자 인터페이스로 구현한 것 사용하기 쉽지만 기본적인 기능 위주 토터스깃 윈도우 전용 프로그램 소스트리 사용법은 복잡하지만 고급기능까지 사용할 수 있음 커멘드 라인 인터페이스(command line interface, CLI) 터미널 창에 직접 명령을 입력해서 깃을 사용하는 방식 사용자 인터페이스로 만든 프로그램보다 사용하는 것이 어려움 리눅스의 기본 명령을 알..
-
백준
[백준] 10866번 덱 C++
https://www.acmicpc.net/problem/10866 10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 자료구조 deque(덱)에 관한 문제다. deque는 FIFO(First In First Out) 구조이다. queue(큐)와 달리 앞 뒤 추가, 앞 뒤 삭제가 가능하다. 문제에서 쓰이는 함수는 다음과 같다. 덱 기본 함수 push_front deque.push_front(123); // 123을 앞에 넣음 push_back deque.push_back(123); // 123을 끝..
-
백준
[백준] 1158번 요세푸스 문제 C++
https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 원형 구조를 구현하여 푸는 문제다. 이는 큐의 성질인 FIFO(First In First Out)를 활용하여 풀 수 있다. 원형 구현 for (int i = 1; i < k; i++) { circle.push(circle.front()); circle.pop(); } 이와 같이 맨 앞 값을 맨 뒤에 추가하고 맨 앞 값을 삭제하면서 원처럼 구현할 수 있다. 위 코드를 활용하여 문제를 푼다. #include #include using namespace std; int main() { int ..
-
dart
[dart] 5. 비동기 프로그래밍
동기 vs. 비동기 지금까지 작성한 코드는 모두 동기 방식이다. 이는 함수를 실행하면 다음 코드가 실행되기 전에 해당 함수의 결괏값이 먼저 반환된다. 하지만 비동기 프로그래밍은 요청한 결과를 기다리지 않으며 응답 순서 또한 요청한 순서와 다를 수 있다. 따라서 컴퓨터 자원을 낭비하지 않고 더욱 효율적으로 코드를 실행할 수 있다. Future void main() { addNumbers(1, 1); } void addNumbers(int number1, int number2) { // 1 print('$number1 + $number2 계산 시작'); // 2 Future.delayed(Duration(seconds: 3), () { print('$number1 + $number2 = ${number1 +..
-
dart
[dart] 3. 객체지향 프로그래밍
네임드 생성자 class Idol { final String name; final int membersCount; // 생성자 Idol(String name, int membersCount) : this.name = name, this.membersCount = membersCount; // 네임드 생성자 // Map 형식으로 지정 Idol.fromMap(Map map) : this.name = map['name'], this.membersCount = map['membersCount']; void sayName() { print('저는 ${this.name}입니다. ${this.name} 멤버는 ${this.membersCount}명 입니다.'); } } void main() { // 생성자 사용 Id..
-
백준
[백준] 1874번 스택 수열 C++
https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 입력받은 숫자를 뽑아내기 위한 과정을 기록하여 출력하는 스택 관련 문제다. 4를 입력받으면 입력받은 숫자를 뽑아내기 위해, 1 push, 2 push, 3 push, 4 push, 4 pop 위 과정에 이어서 3을 입력받으면, 3 pop 6을 입력받으면, 5 push, 6 push, 6 pop 이런 식으로 1부터 차..
-
백준
[백준] 9012번 괄호 C++
https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 입력받은 문자열이 VPS(Valid Parenthesis String)인지 확인하는 문제이다. 알고리즘 내가 접근한 방식은 다음과 같다. 문자열을 string 타입으로 입력받는다. 입력받은 문자열을 for문을 통해 문자 단위로 하나하나씩 확인한다. 확인한 문자가 '('일 경우 vector 타입 변수에 저장한다. 확인한 문자가 ')'일 경우 vector 타입 변수 맨 ..