전체 글

소프트웨어 개발 블로그
· Algorithm
딱히 문제가 있어서가 아니라 단순히 저장 용으로… 알고리즘을 풀거나 기타 코딩을 하다보면 특정 숫자를 입력받아야 하는 경우가 생긴다. 흔히 int형 배열, 예를 들어 int num[10]과 같이 정해진 숫자를 입력받는 것은 1학년 C언어 시간에 아주 많이 해보았을 것인데 정해지지 않은 수 만큼 입력받는 것에 대해서는 생각해 본 적이 없어 복습 차 구현해보았다. 물론 더 쉬운 Toknizer나 stringstream을 사용할 수 있는 방법도 참고한다 #include #include #include using namespace std; int main() { string strInput; // 띄어쓰기 기준으로 N개의 수를 입력받을 String vector vecNum; // 입력받은 N개의 수를 저장할 V..
· Algorithm
문제 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다. 보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 caesar 함수를 완성해 보세요. a B z, 4를 입력받았다면 e F d 를 리턴합니다. 풀이 가끔 코딩 테스트보면 나오는 문제 형태인 것 같은데 아스키 코드 값으로 접근하면 된다. A(65) ~ Z(90), 그리고 a(97) ~ z(122)를 기준으로 생각하고 나머지 값에 대해서는 있는 그대로 출력해주면 된다. 프로그래머스에서는 나머지 값이 공백으로 통일된 것 같고 한 가지 주의할 점이 n의 값이다. 처음에는 Z이후에 다시 A로 돌..
· Algorithm
문제 행렬의 곱셈은, 곱하려는 두 행렬의 어떤 행과 열을 기준으로, 좌측의 행렬은 해당되는 행, 우측의 행렬은 해당되는 열을 순서대로 곱한 값을 더한 값이 들어갑니다. 행렬을 곱하기 위해선 좌측 행렬의 열의 개수와 우측 행렬의 행의 개수가 같아야 합니다. 곱할 수 있는 두 행렬 A,B가 주어질 때, 행렬을 곱한 값을 출력하는 productMatrix 함수를 완성해 보세요. 풀이 행렬의 곱셈에 대한 알고리즘이다. 영상 처리를 자주 하다보니 이미지를 2차원 배열로 생성하여 연산하는 것이 흔한 일상이 되었다.. 그래서 사실 2차원 배열에 대한 컨트롤이 크게 어렵지는 않았다. 구현 상 딱히 설명할 부분은 없다고 생각하는데 문제에서 vector를 사용하여 아래 링크를 통해 이미지, 즉 2차원 배열에 대한 표현을 ..
· Vision
본 문은 C++ 11 기반으로 작성되었습니다. 배열을 활용한 이미지 표현 이미지 처리를 하다보면 배열을 주로 사용한다. 이미지의 경우 2차원 배열이라고 생각하면 쉽고 따라서 1차원 배열보다 2차원 배열을 사용하는 것이 처리의 직관성을 높일 수 있다. 먼저 배열의 경우 동적할당을 통해 사용하는데 사용하는 코드는 다음과 같다. BYTE** image = new BYTE*[ (이미지)세로 ]; image[0] = new BYTE[ 세로 * (이미지)가로 ]; for( int i = 1; i < 세로; i++ ) { image[i] = image[i - 1] + 가로; } memset( image, 0, 가로*세로 ); // 사용이 끝난 후 delete[] image[0]; delete[] image; 코드를 ..
· Algorithm
문제 2016년 1월 1일은 금요일입니다. 2016년 A월 B일은 무슨 요일일까요? 두 수 A,B를 입력받아 A월 B일이 무슨 요일인지 출력하는 getDayName 함수를 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 를 출력해주면 됩니다. 예를 들어 A=5, B=24가 입력된다면 5월 24일은 화요일이므로 TUE를 반환하면 됩니다. 풀이 2016년의 특정 날짜가 몇 요일인지 구하는 알고리즘이다. 고등학교 수학 시간에 많이 본 것 같은데.. 문제 풀이법이 기억나지 않아 직관적으로 구현하였다.. 먼저 날짜와 요일에 대한 정보를 담은 배열을 생성하고 Month(a)까지의 날짜 수를 모두 더한다. 그리고 거기에 Day값(b)을 더하는데 기준 일이 1/1..
· Algorithm
문제 1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. collatz 함수를 만들어 입력된 수가 몇 번 만에 1이 되는지 반환해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요. 풀이 문제 자체는 어렵지 않았다. 이름은 생소하지만 사실 문제에 공식이 다 나와있어 구현만 하면 되는데 한가지 주의할 점은 19라인이다. 이 부분을 빼면 정답이 아니라고 나오는데 입력된 수가 만약 큰 수라면 int의 범위..
· Algorithm
문제 numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다. 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.(1은 소수가 아닙니다.) 10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환 풀이 소수 관련 문제의 가장 직관적인 형태라 생각한다. 단순하게 소수를 구해서 개수를 리턴하면 된다. 소수를 구하는 알고리즘은 다양한데 그 중 가장 많이 쓰이는 에라토스테네스의 체를 사용하였다. 이 것은 간단하다. 1부터 구하고자 하는 수(n)까지 배열을 생성..
· Algorithm
문제 자연수로 이루어진 길이가 같은 수열 A,B가 있습니다. 최솟값 만들기는 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱한 값을 누적하여 더합니다. 이러한 과정을 수열의 길이만큼 반복하여 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. 예를 들어 A = [1, 2] , B = [3, 4] 라면, A에서 1, B에서 4를 뽑아 곱하여 더합니다. A에서 2, B에서 3을 뽑아 곱하여 더합니다. 수열의 길이만큼 반복하여 최솟값 10을 얻을 수 있으며, 이 10이 최솟값이 됩니다. 수열 A,B가 주어질 때, 최솟값을 반환해주는 getMinSum 함수를 완성하세요. 풀이 두 수열에서 각각 값을 뽑아 곱한 후 그것들을 모두 더하여 최소값을 만들어야 한다. 따라서 접근 방법은 한 수열에서 가장 ..
· Algorithm
문제 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 gcdlcm 함수를 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 gcdlcm(3,12) 가 입력되면, [3, 12]를 반환해주면 됩니다. 풀이 단순하게 최대공약수와 최소공배수를 출력하는 문제이다. 최대 공약수와 최소 공배수를 구하는 좋은 알고리즘은 많이 있지만 단순하고 직관적으로 구하도록 코딩하였다(사실 머리를 안쓴....) Level 2에서 GCD와 LCM에 관한 문제가 있는데 거기서는 유클리드 호제법을 사용하였다. 1부터 두 수의 곱까지 반복하며 공통적으로 나뉘는 수를 구한다. 그리고 마지막(a*b)까지 탐색하니까..(당연히 이게 최대공약수..) 최소공배수는 최대공약수와 최대공약..
lasiyan
LA Dev.