본문 바로가기
728x90

분류 전체보기230

[GCP] Bigtable 과 BigQuery 💡Bigtable 대규모 분석 및 운영 워크로드를 위한 확장 가능한 완전 관리형 NoSQL 데이터베이스 서비스 Bigtable은 테라바이트, 수페타바이트의 데이터까지 저장할 수 있고 데이터 밀도가 낮은 테이블이다. 각 행의 단일 값마다 index가 생성되는데 이 값을 row key라고 한다. Bigtable은 지연시간이 낮아서 많은 양의 단일 key 입력 데이터를 저장하는데 적합하다. 따라서 읽기 및 쓰기 처리량이 많을 경우에 사용하기 적합하다. -> 매우 높은 쳐리량과 확장성이 필요한 애플리케이션에 적합 ->일괄 MR작업, 스트림 처리/분석, ML 애플리케이션을 위한 스토리지 엔진으로 적합 -장점 뛰어난 확장성 : 클러스터를 확장하여 더 많은 read & write 처리 가능 간단한 관리 : 테이블 스.. 2021. 3. 23.
[프로그래머스] 타겟넘버 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 🍒풀이 재귀함수를 사용해서 -numbers[idx] 또는 +numbers[idx]을 해주어총 합계를 구하였다. idx가 numbers 리스트의 범위를 벗어나면 target 과 total 합계가 동일한지 확인한 후 동일하면 answer을 증가한다. 이때 solution 함수 내에다가 함수 선언 후 answer 변수를 .. 2021. 3. 23.
[프로그래머스] 가장 큰 정사각형 찾기 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/12905?language=python3 코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 🍒풀이 전형적인 DP문제. 처음에 이 문제를 for문을 돌려 풀었더니 O(N^3)의 시간복잡도가 나와 효율성에서 시간초과가 났다. 따라서 시간복잡도를 줄이기 위해서 DP를 적용해서 풀어야한다. 이 문제에서는 메모이제이션(memoization) 기법을 사용하는데, 왼쪽 위에서부터 index를 업데이트를 해준다. 해당 칸 (board[y][x])의 값이 1이면 왼쪽, 위, 대각선왼쪽 위 3부분을 확인해서 가장 작은 값 + 1 로 업데.. 2021. 3. 23.
[프로그래머스] 문자열 압축 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 🍒풀이 1. 문자열의 절반만큼의 길이만 확인해도 된다. 2. 길이 1 ~ 문자열의 길이/2 길이만큼 반복문으로 검사 3. 이중 반복문으로 pivot이 되는 문자열을 비교 후 3-1. 동일하면 cnt 증가 3-2. 다르면 result 문자열 업데이트 , 새로운 pivot 문자열 업데이트 4. 마지막 문자열의 경우 반복문 마지막에 다시 한 번 검사 5. 최종적으로 .. 2021. 3. 22.
[기타] 시간 복잡도 / 예외처리 알고리즘 문제를 풀다가 효율성을 보는 문제(프로그래머스 등)에서는 시간 복잡도를 정확도를 보는 문제(Codility, 삼성SW 등)에서는 예외처리를 꼼꼼하게 해야하는 경우가 있다. 이러한 경우를 생각해서 시간 복잡도와 예외처리 관련하여 내용을 정리해보았다. 1. 예외처리 1) NULL 값 처리 2) 엄청 큰 값 처리 3) 원소가 1개만 존재하는 경우 (배열, 리스트의 경우) 4) 음수 값 5) 오버플로우 값 2. 시간 복잡도 ■ 배열의 크기에 따른 시간 복잡도 1) 배열의 크기 O(N^3) 으로 해결 가능 2) 배열의 크기 O(N^2) 으로 해결 가능 3) 배열의 크기 O(N) 또는 O(NlogN)으로 해결 가능 ■ Sorting 기법에 따른 시간 복잡도 2021. 3. 20.
[프로그래머스] 이진 변환 반복하기 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 🍒풀이 1. after : 0을 제거한 문자열 2. c = len(after) 3. res : c를 2진법으로 변환한 수 4. s = res 로 갱신 위 1~3번 과정 반복 (s="1" 이 될 때 까지) 🍒코드 def solution(s): answer = [] cnt = 0 cnt_zero = 0 while(True): if(s == "1"): break # 0 제거 after = '' for i in s: if i == '0': cnt_zero += 1 continue else: after += i #x의 길이 = c c = len(af.. 2021. 3. 18.
[프로그래머스] 메뉴 리뉴얼 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/72411?language=python3 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 🍒풀이 1. 먼저 orders 의 문자열을 정렬한다. !!! 2. combination 조합으로 course 수 만큼 조합을 생성한다. 3. 조합의 개수를 dictionary 로 센 다음 2개 이상 주문한 것들 중에서 가장 큰 value를 가진 key(order)를 answer에 추가한다. *** order 안의 스트링도 정렬을 해주어야 한.. 2021. 3. 18.
[프로그래머스] 큰 수 만들기 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 🍒풀이 1. 큰 수 만들 리스트 collected 선언 2. number 순회 2-1. collected에 원소가 존재하고 2-2. collected의 마지막 원소가 비교하는 원소보다 작고 2-3. k가 0보다 크면 3. collected의 마지막 원소 pop 4. k = k - 1 5. k = 0 이라면 number의 남은 숫자들 collected 에 붙여 넣음 (반복문 종료) 6. 비교 숫자 num을 collected에 넣음 7. 마지막 collected의 문자열을 concat 🍒코드 - 1 (시간초과) import itertools def .. 2021. 3. 18.
[프로그래머스] 조이스틱 (Python) 🍒문제 programmers.co.kr/learn/courses/30/lessons/42860?language=python3 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 🍒풀이 1. 위/아래 이동 중 짧은 거리 구하기 (A ~ Z) 2. 왼/오른쪽 이동 중 짧은 거리 구하기 2-1. answer 값 갱신 2-2. index 값 갱신 3. 초기값 'AAA'와 동일해지면 종료 🍒코드 def solution(name): answer = 0 name = list(name) start = ['A.. 2021. 3. 18.
[프로그래머스] 삼각 달팽이 (C++) 🍒문제 삼각달팽이 : programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 🍒풀이 1. 아래로 이동 2. 오른쪽 이동 3. 왼쪽 위 대각선 이동 위 3가지 이동방향에따라 2차원 배열로 처리를 해준다. 이후 2차원 배열에 있는 값을 1차원 answer 벡터에 차례로 담아주면 끝! 간단하게 생각하는 습관 기르기 !! 🍒코드 #include #include using namespace std; vector solution(int n) { v.. 2021. 3. 17.
[네트워크] DNS와 IP 💡DNS란? DNS (Domain Name System) 은 사람이 읽을 수 있는 도메인 이름 (ex : www.naver.com) 을 머신이 읽을 수 있는 IP주소 (ex: 10.123.23.09)로 변화해 준다. 💡IP란? IP(Internet Protocol)은 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다. 💡DNS와 IP의 관계 Client가 도메인 주소인 URL(Uniform Resource Locator)을 (www.naver.com 처럼) 웹 브라우저에 입력하면 웹 브라우저는 입력된 URL에 해당하는 서버에게 사용자에게 보여줄 데이터(웹페이지)를 요청해야 하지만 URL만 가지고는 요청해야 할 서버를 알 수 .. 2021. 3. 16.
[네트워크] HTTP 개념 HTTP (Hyper Text Transfer Protocol) 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 정해둔 규약으로 모든 프로그램이 서러 정보를 교환할 수 있게 된다 1. 동작 클라이언트(사용자)가 웹 브라우저를 통해 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)를 하면 서버에서는 해당 요청사항에 맞는 결과를 사용자에게 응답(response)한다. HTML만이 http통신을 위한 정보 문서는 아니다. json 및 xml 형태로도 주고 받을 수 있으며 보통 클라이언트가 어떤 정보를 어떤 형태로 받고싶은지 명시해 준다. 2.Request Request Method 종류 GET : 자료를 요청할 때 사용 POST : 자료의 생성을 요청할 .. 2021. 3. 16.
[네트워크] HTTP와 HTTPS 💡HTTP란 HTTP (Hyper Text Transfer Protocol) HTTP는 인터넷에서 웹서버와 사용자 컴퓨터의 웹 브라우저 사이에서 문서를 전송하기 위한 통신 규약 (Protocol)이다. 즉, http 는 hyper text를 전송(transfer) 하기 위해 사용되는 통신 규약(protocol)이다. http 서버는 기본 포트 80번 port에서 서비스 대기하고, 클라이언트 (웹 브라우저)가 tcp 80번 port를 사용해 연결하면 서버는 요청에 응답하면서 자료(정보)를 전송한다. http는 단순히 텍스트를 주고받기 때문에 네트워크에서 전송 신호를 인터셉트 하는 경우 데이터 유출이 발생할 수 있다. 따라서 이러한 HTTP의 보안 취약점을 해결하기 위해 HTTPS 를 사용한다. 💡HTTPS.. 2021. 3. 16.
[자료구조] Queue (큐) 📌큐 개념 먼저 들어온 자료가 먼자 나가는 FIFO (First in First Out), 선입선출 구조의 자료구조이다. 📌큐 주요 함수 front (): 맨 앞의 요소 출력 rear() : 맨 뒤의 요소 출력 enqueue() : 큐 뒤에 요소 추가하는 함수 dequeue() : 큐 맨 앞 요소를 빼는 함수 isFull() : 큐가 가득 찼는지 확인하는 함수 isEmpty() : 큐가 비었는지 확인하는 함수 📌큐 사용 사례 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용한다. 우선순위가 같은 작업 예약 (프린터의 인쇄 대기열) 은행 업무 콜센터 고객 대기시간 프로세스 관리 너비 우선 탐색(BFS, Breadth-First Search) 구현 캐시(Cache) 구현 📌구현 코드 #in.. 2021. 3. 8.
[자료구조] Stack (스택) 📌스택이란 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO (Last In First Out) 구조의 자료 구조 📌스택 주요 함수 스택은 LIFO 구조로 가장 최근에 추가한 항목이 가장 먼저 제거된다. push() : 스택에 자료를 넣는 함수 pop() : 가장 최근에 추가한 자료를 빼는 함수 isFull() : 스택이 가득 찼는지 확인하는 함수 isEmpty() : 스택이 비었는지 확인하는 함수 📌스택 사용 사례 웹 브라우저 방문 기록 (뒤로가기) 역수 문자열 만들기 수식의 괄호 검사 (ex: 올바른 괄호 문자열 판단 등) 📌구현 코드 class Stack { private: int top, MaxSize; int *stack; public: Stack(int size); bool isFull(), .. 2021. 3. 8.
[Codility] Lesson8. Dominator 🔮문제 An array A consisting of N integers is given. The dominator of array A is the value that occurs in more than half of the elements of A. For example, consider array A such that A[0] = 3 A[1] = 4 A[2] = 3 A[3] = 2 A[4] = 3 A[5] = -1 A[6] = 3 A[7] = 3 The dominator of A is 3 because it occurs in 5 out of 8 elements of A (namely in those with indices 0, 2, 4, 6 and 7) and 5 is more than a half o.. 2021. 3. 3.
[Codility] Lesson4. Brackets 🔮문제 A string S consisting of N characters is considered to be properly nested if any of the following conditions is true: S is empty; S has the form "(U)" or "[U]" or "{U}" where U is a properly nested string; S has the form "VW" where V and W are properly nested strings. For example, the string "{[()()]}" is properly nested but "([)()]" is not. Write a function: int solution(string &S); that, g.. 2021. 3. 3.
[Algorithm] Binary Search (이분 탐색) 개념 📌이분 탐색(바이너리 서치)이란? 각 노드에 값이 있다. 노드의 왼쪽 서브트리에는 그 노드의 값보다 작은 값들을 지닌 노드들로 이루어져 있다. 노드의 오른쪽 서브트리에는 그 노드의 값보다 큰 값들을 지닌 노드들로 이루어져 있다. 좌우 하위 트리는 각각이 다시 이진 탐색 트리여야 한다. 📌이분 탐색의 검색 (Search) **조건 : 미리 정렬되어 있어야 한다. 이진탐색트리에서 키 x를 가진 노드를 검색하고자 할때, 트리에 해당 노드가 존재하면 해당 노드를 리턴하고, 존재하지 않으면 NULL을 리턴한다. 검색하고자 하는 값을 루트노드와 먼저 비교하고, 일치할 경우 루트노드를 리턴한다. 불일치하고 검색하고자 하는 값이 루트노드의 값보다 작을 경우 왼쪽 서브트리에서 재귀적으로 검색한다. 불일치하고 검색하고자 .. 2021. 3. 2.
[프로그래머스] 괄호변환 (C++) 🔮문제 programmers.co.kr/learn/courses/30/lessons/60058 코딩테스트 연습 - 괄호 변환 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 programmers.co.kr 🔮풀이 1. P가 빈 문자열인 경우, 빈 문자열 "" 반환 2. 올바른 문자열인 경우, 입력 문자열 반환 3. 균형잡힌 문자열인 경우 3-1. u + v로 분리 (u : 균형, 분리x , v : 빈 문자열 ok) 3-2. u가 올바른 문자열인 경우, u + v(1번부터 재귀) 반환 3-3. u가 올바른 문자열이 아닌 경우, 문제의 4번 과정 수행 (recursive 함수.. 2021. 3. 2.
[Algorithm] Binary Search (이분 탐색) 코딩 테스트 공부를 하다가 Binary Search와 관련하여 문제풀이 방법이 다른 방법이 있어 정리를 한다. 📌기존에 자주 쓰던 Binary Search 코드 #include int BinarySearch(vector &A, int target) { int N = A.size(); if(N == 0) { return -1; } int l = 0; int r = N-1; while(l target){ r = m - 1; } else{ l = m + 1; } } return -1; } 이 코드에서 문제점이 있다. 바로 int m 을 구하는 과정에서 값이 커질 경우 overflow 문제가 발생한다. int 형의 경우 –2,147,483,648 ~ 2,147,483,647 사이의 값을 가지기 때문에 ( l +.. 2021. 2. 26.
728x90