전체 글

    [프로그래머스 C++] - 가장 큰 수

    문제 : 가장 큰 수 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 분석 기본적인 대수 비교로는 풀..

    [파이썬 openCV] - 트랙바로 임계값 조정하기

    이진화 [Binarization] 이진화는 그레이 스케일의 이미지를 바이너리(binary) 이미지로 변환하는 방법이다. 임계값(thershold) 기준으로 그레이 스케일의 이미지를 흰, 검 영역에 표현하게 된다. openCV로 윈도위에 트랙바를 추가해서 원하는 영역의 임계값을 쉽게 추출할 수 있다. 구현 import numpy as np import cv2 as cv def on_trackbar(x): """ callback func for trackbar """ pass img_color = cv.imread('sample.png', cv.IMREAD_COLOR) # gray scale img_gray = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY) cv.imshow('G..

    [프로그래머스 C++] - 소수 찾기

    문제 : 소수 찾기 문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 분석 숫자가 소수인지 판단하는 것과 숫자를 조합하는 하는 것이 이 문제의 포인트이다. 소수인지 판단하는 건 에라토스테네스의 체를 이용하면 된다. 숫자를 조합하는 과정은 일단 조합으로 처리한 ..

    알고스팟 - 너드인가, 너드가 아닌가? 2

    문제 : 너드인가, 너드가 아닌가? 2 (난이도 : 中) 분석 너드인가를 판단하는 매게 변수가 두 가지로 주어졌다. 너드가 아닌 경우는 두 가지 매게 변수 모두 다른 포인트보다 작을 경우이다. 이런 유형을 다룰 땐 주어진 데이터를 좌표평면 위에 그리면 쉽게 해결할 수 있다. 이렇게 좌표 평면위에 두면 할 일이 간단해진다. 지배하는 점들의 규칙을 살펴보면 x좌표가 커질수록 y좌표가 작아짐을 알 수 있다. 따라서 새로운 데이터를 추가할 때 기존 지배하는 점의 가장 오른쪽 x좌표보다 큰 지, 아니라면 y 값이 큰 지를 판단하면 된다. STL의 map을 이용하기 좋은 문제 상황이다. 구현 map coords; // 새로운 점 (x, y)가 기존의 다른 점들에 지배당하는지 확인 bool isDominated(in..

    [파이썬 openCV] - 픽셀, 컬러와 흑백 이미지

    픽셀 기본적으로 디지털 사진은 픽셀이라 부르는 2차원 좌표 평면에 분포된다. 이미지 너비 X 이미지 높이가 이미지에 포함된 픽셀 개수이며, 이를 이미지 크기라 부른다. (0, 0) (0, 1) (0, 2) (0, 3) (1, 0) (1, 1) (1, 2) (1, 3) (2, 0) (2, 1) (2, 2) (2, 3) (3, 0) (3, 1) (3, 2) (3, 3) (openCV 좌표) 픽셀의 데이터는 데이터의 타입이 뭐냐에 따라 다르다. 컬러인 경우 삼원색에 해당하는 b,g,r인 3개의 channel이 열린다. 흑백인 경우 1개 channel만 열린다. (0, 0, 0) (255, 0, 0) (0, 255, 0) (0, 0, 255) (0, 0, 0) (255, 0, 0) (0, 255, 0) (0, ..

    [프로그래머스 C++] - 문자열 압축

    문제 : 문자열 압축 문제 설명 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 aabbaccc의 경우 2a2ba3c(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, abcabcdede와 같은 문자열은 전혀 압축되지 않습니다. 어피치는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로..

    [파이썬 openCV] - 이미지 데이터 공유 & 복사

    이미지 값 복사 파이썬은 기본적으로 얕은 복사(shallow copy)이다. 얕은 복사라 함은 새로운 변수에 기존 변수를 대입하면 값이 복사가 되는 것이 아니라 메모리 주소가 복사되는 것을 말한다. 따라서 openCV로 이미지를 다룰 때 일반적인 경우에는 이미지를 공유해서 다루게 된다. import cv2 as cv img_gray = cv.imread('sample.png', cv.IMREAD_GRAYSCALE) img_copyed = img_gray print(id(img_copyed), id(img_gray)) # 아직은 똑같은 넘파이 배열 # img_gray 에 선을 그으면 img_copyed에도 동일하게 적용 cv.line(img_gray, (0, 0), (100, 100), 0, 10) cv...

    [프로그래머스 C++] - 카카오 프렌즈 컬러링북

    문제 : 카카오 프렌즈 컬러링북 출판사의 편집자인 어피치는 네오에게 컬러링북에 들어갈 원화를 그려달라고 부탁하여 여러 장의 그림을 받았다. 여러 장의 그림을 난이도 순으로 컬러링북에 넣고 싶었던 어피치는 영역이 많으면 색칠하기가 까다로워 어려워진다는 사실을 발견하고 그림의 난이도를 영역의 수로 정의하였다. (영역이란 상하좌우로 연결된 같은 색상의 공간을 의미한다.) 그림에 몇 개의 영역이 있는지와 가장 큰 영역의 넓이는 얼마인지 계산하는 프로그램을 작성해보자. 위의 그림은 총 12개 영역으로 이루어져 있으며, 가장 넓은 영역은 어피치의 얼굴면으로 넓이는 120이다. 분석 상하좌우를 재귀로 판단하면 해결할 수 있다. 구현 vector pic; int global_m, global_n; int check_s..