본문 바로가기

분류 전체보기

(61)
[프로그래머스] GPS (2017 카카오코드 본선) 문제 링크 : programmers.co.kr/learn/courses/30/lessons/1837 DP문제이다. 1. 시간을 1씩 증가시키며 1~n까지의 노드가 오는 경우를 생각하며 d[시간][현재 노드]배열에 저장을 한다. (즉 d[시간][현재 노드]는 현재 시간에 현재 노드가 위치할 수 있는 경우 중 최소의 수정 횟수가 저장되어 있다. 2. t를 끝까지 증가시키며 목적지의 값을 구한다. 점화식 : D[i][j] = min(D[i - 1][인접 노드], D[i - 1][j]) + (현재노드와 log의 노드가 다르면 +1 아니면 +0) #include #include #include using namespace std; // 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요. int s..
[프로그래머스] 리틀 프렌즈 사천성 (2017 카카오코드 본선) 문제 링크 : programmers.co.kr/learn/courses/30/lessons/1836# 1. 존재하는 알파벳과 알파벳의 위치를 map에 저장한다. 2. map은 자동 오름차순 정렬이 되니 차례대로 탐색하며 제거가능한 알파벳이 있나 확인 - 알파벳 제거하는 알고리즘은 백트래킹이나 bfs쓰면 된다. (자세한 알고리즘은 코드의 주석 참고) 3. 전부 제거하거나 더이상 제거 못할때 까지 2를 반복 #include #include #include #include #include #include using namespace std; int m; int n; vector board; bool check[102][102]; int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; ma..
[프로그래머스] 보석 쇼핑 (2020 카카오 인턴십) 문제 링크 : programmers.co.kr/learn/courses/30/lessons/67258 이번 문제는 투포인터 문제다. 그냥 단순하게 모든 경우의 수 확인한다면 O(n^2)이 나올것이다. 하지만 투포인터를 이용하면 O(n)으로 해결할 수 있다. 1. 보석을 set에 넣어서 보석 종류의 개수를 확인한다. 2. 투포인터(start , end)를 이용하여 증가시키며 확인한다. 2-1 투포인터 범위안에 보석종류가 포함안된게 있거나 start==end라면 end증가시켜 범위 늘리기 2-2 투포인터 범위안에 보석종류가 전부 포함되면 start 증가시키며 범위 축소해보기 3. 확인한 범위 중 최소의 범위 반환 #include #include #include #include #include using na..
행동 패턴(Behavioral patterns) Strategy(스트레티지) 패턴 Strategy(스트레티지) : ex - interface를 상속받은 클래스들에서 각각 다르게 overriding하여, 같은 interface의 메소드를 호출해도 객체마다 다르게 동작 State (스테이트) 패턴 State (스테이트): Strategy와 비슷하지만 아래와 같이 다름 -Strategy 패턴이 지정된 특정 메소드가 모듈화된 모드에 따라 다르게 실행되도록 하는 거라면 State 패턴은 그 메소드가 실행될 때 모드도 전환되는 것 -TV가 꺼져 있을 대 누르면 켜지고, 켜져있을 때 누르면 꺼지는 방식 Command 패턴 command 패턴 : Strategy와 역시 비슷하지만 아래와 같이 다름 - Strategy는 같은 일을 하되 그 알고리즘이나 방식이 갈아끼워..
[프로그래머스] 방문 길이 (Summer/Winter Coding(~2018)) 문제 링크 : programmers.co.kr/learn/courses/30/lessons/49994?language=cpp 1. 입력으로 들어온 방향으로 움직인다. 2. 움직일 때 지나간 길을 체크해 둔다. - 나는 해당 좌표에서 4방향의 길로 분류하여 체크를 하였다. (현재 좌표에서 지나가야하는 방향 체크, 다음 좌표에서 지나온 방향 체크) 3. 처음 지나가는 길만 answer++해준다. #include #include using namespace std; bool check[15][15][4]; int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; int x = 5; int y=5; int answer = 0; void moving(char c) { int d = 0;..
백준 17822번: 원판 돌리기 (C++) 문제 링크 : www.acmicpc.net/problem/17822 시뮬레이션, 구현 문제라서 딱히 특별한 알고리즘은 없다. 1. 원판의 층과 원판마다의 수를 이차원배열로 저장하면 편하다. (x축 - 원판 층, y축- 원판의 숫자들) 2. x의 배수들의 원판들을 조건만큼 회전 시켜준다. (ex - 배열의 앞의 숫자를 떼어서 맨 뒤에 붙이면 반시계방향 ) 3. 원판들의 수를 탐색하면서 인접한 같은 수들을 제거해준다 (dfs를 이용) 4. 인접한 같은 수가 하나도 없다면 평균 값을 구해서 조건에 따라 증가 또는 감소를 시켜준다. 5. 2,3,4를 끝날 때 까지 수행 1.원판인것을 잊으면 안된다. 탐색할 때 배열의 끝을 넘어가면 배열의 시작점으로, 배열의 시작점을 벗어나면 배열의 끝으로 이동하여야 한다. 2...
백준 17837번: 새로운 게임 2 (C++) 문제 링크 : www.acmicpc.net/problem/17837 구현 , 시뮬레이션 문제다. 문제에서 설명되어있는 그대로 구현을 하면 된다. 설명할 것이 딱히 없어서 코드에 주석처리만 해놓았다. #include #include using namespace std; class ins { public: int x, y, d; ins(int x, int y, int d) { this->x = x; this->y = y; this->d = d; } }; int n, k; int map[14][14]; vector map2[14][14]; //이차원 배열을 vector로 선언 (숫자들 쌓으려고) vector chess_piece; //체스말 정보 저장 int dir[5][2] = { {0,0}, {0,1},{..
데이터 베이스 2(Database) 관계 대수 (Relational Algebra) -> 절차적 (Selection, Projection, Union, Intersection 등) 기본 연산 Selection : row들을 골라냄 Projection : column들을 골라냄 Cartesian product : 두 집합 곱셈 (ex - SQL에서 -> FROM S1, S2 ) Rename : relation 이름이나 속성 이름을 변경 ( SQL에서는 빈칸이나 as) 복합 연산 Join : Cartesian product 한 후 Selection 한 결과 Division : A/B -> B를 모두 만족하는 A의 값 (ex - a에서 b튜플을 모두 가지고 있는 튜플들) 부가 연산 Assignment Aggregate Functions -> a..
데이터 베이스 1(Database) Database System : DB , DBMS 등을 포함하는 전체적인 system DBMS(DataBase management Systems) : DataBase를 관리해주는 시스템 소프트웨어 (ex - MySQL , Oracle...) (DBMS밑에 운영체제) 필수 기능 : 1. 정의 기능 -> DDL(Data Definition Language) : (CREATE , DROP , ALTER) 2. 조작 기능 -> DML(Data Manipulation Language) : (SELECT, INSERT, DELETE, UPDATE) 3. 제어 기능 -> DCL (Data Control Language) : (GRANT-권한 부여, REVOKE-권한 회수) TCL(Transaction //) -> C..
백준 17779번: 게리맨더링 2 (C++) 문제 링크 : www.acmicpc.net/problem/17779 1. 이차원 배열을 순차 탐색하며 기준점과 d1,d2를 정해준다. 2. 기준점부터 왼쪽으로 내려가는 좌표와 오른쪽으로 내려가는 좌표를 나누어서 탐색한다. 3. 행마다,,, 1~lefty 는 왼쪽 영역, lefty ~ righty 는 가운데 영역, righty ~ n 까지는 오른쪽 영역 으로 구분해서 채운다. (아랫부분일때는 증가방식을 반대로 한다.) 4. 5영역의 경계선이 없는 행들도 다 채워준다. 5. 1,2,3,4를 반복한다. #include #include using namespace std; int map[22][22]; int n; int go_left[2] = { 1,-1 }; int go_right[2] = { 1,1 }; ..