본문 바로가기

전체 글

(96)
독일 취업 성공기 2016년 독일에서 한 번 살아보겠다는 일념으로 무작정 잘 다니던 회사를 그만두고 베를린으로 이사를 왔다. 30대 중반에 다가가는 나이에 직장이 정해지지도 않은 상태였기에 나에게는 큰 도전이였다. 유럽 중에서도 독일로 정한 이유는 예전과 달리 현재 독일은 적극적으로 외국인들들 받아들이려고 노력하는 국가여서 비자 및 여러 행정 절차가 쉽기 때문에 결정하게 되었다. 또한 소프트웨어 엔지니어로서의 기회가 많을 것이라고 생각을 했었다. 하지만 비영어권 국가이고 독일어에 대한 독일인들의 자부심이 상당하기에 독일어를 배우지 않고 살아가는 것이 어렵기에 난 독일어를 배워야만 했었다. 물론, 베를린와서 느낀 점은 베를린은 독일이 아니구란나는 점을 느꼈었다. 사실 베를린은 독일어를 못하는 외국인 비중이 높은 편이고 영어..
빅데이터란? Big Data란? 요즘 빅 데이터라는 단어가 우리 주변에서 많이 들리고 있다. 이 단어는 뉴스에서도 많이 나오고 요즘 참 많이 접하게 되는 단어이다. 정확히 빅 데이터란 무엇인지, 그리고 왜 이리 주목되고 있는지 알아보자. 프로그램에서 데이터랑 상당히 중요한 요소이다. 이 데이터들을 사용자가 원하는 형태로 가공하여 보여주는 것이 일반적인 프로그램이다. 이러한 데이터들을 잘 관리하기 위해 데이터 베이스에 저장하고 읽어들여 원하는 형태로 가공을 한다. 하지만 대량의 데이터를 처리하거나 고정된 형태의 데이터가 아닌 정해지지 않은 포맷의 데이터들을 분석해서 원하는 정보를 추출하는 기술들이 요구 되었다. 그래서 나온 기술이 빅 데이터이다. IBM에서는 데이터의 양(Volumn), 데이터 입출력 속도(Veloci..
[Easy] 삽입 위치 구하기 문제: 정렬된 정수형 배열과 삽입하려는 정수 값이 인수로 입력되면 해당 값이 삽입 될 배열의 인덱스를 리턴하는 함수를 구현하라.단, 배열 내에 중복이 존재할 수 없다. 따라서 이미 배열에 값이 존재한다면 해당하는 값의 인덱스를 리턴한다. 예제 1:Input : [1,3,5,6], 5 Output : 2 예제 2:Input : [1,3,4,5], 2Output : 1 예제 3:Input : [1,3,5,6], 7Output: 4 풀이:바이너리 탐색 알고리즘을 활용하여 값을 찾아간다.바이너리 탐색 알고리즘은 중간 값을 구해서 중간 값이 타겟이 되는 값보다 크다면 왼쪽 편을 탐색하고 작다면 오른 쪽을 탐색하는 알고리즘이다.배열에서 중간이 되는 인덱스를 구하는 것은 작은 쪽 인덱스와 큰 쪽 인덱스를 합쳐서 2로..
[Easy] 정렬된 배열에서 중복 삭제하기 문제: 정렬된 정수형 배열을 입력받아 중복이 존재하는 숫자를 삭제하는 함수를 작성하라. 반환 값은 새로 구성되는 배열의 길이이다. 또한 추가 메모리를 사용하지 않고 중복을 제거해야 한다. 예제입력 값 : [1, 1, 2] 리턴되는 값은 2이어야 하고 이 배열의 첫 번째 항목과 두 번째 항목은 1과 2로 되어야 한다. 새로 구성되는 배열의 길이 이후의 값은 어떤 값이 와도 상관없다. 풀이: 이미 정렬된 배열에서 중복 값을 찾는 것은 어렵지 않다. 배열의 길이가 2 이상인 경우 i를 1부터 시작해서 array[i] 과 array[i-1]을 비교해서 서로 같으면 중복되는 값이다. 이러한 것을 이용해서 우리는 배열을 수정해야 한다. 중복되는 숫자일 경우 다로 다음 인덱스로 넘어가고 만약 다른 숫자라면 변경될 배..
[Easy] 정렬된 두 링크드 리스트 합치기 문제: 정렬된 두 링크드 리스트를 합쳐서 하나의 정렬된 링크드 리스트로 반환해라. 예제:입력: 1->3->4, 1->5->6출력: 1->1->3->4->5->6 링크드 리스트 클래스 구조는 다음과 같다. public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }구현되어야 할 함수의 선언은 다음과 같다.ListNode mergeTwoLists(ListNode l1, ListNode l2); 풀이:재귀함수를 이용하면 간단히 풀 수 있는 문제이다.첫 번째 노드의 값을 비교해서 더 큰 값이 작은 값의 next가 되면 된다.그리고 작은 값의 next와 큰 값과 다시 비교해서 merge하는 과정을 계속 반복하여 null이 나올 때 까..
[Easy] 유효한 괄호 문자열 찾기 문제: 주어진 문자열이 유효한 괄호인지 검사하는 함수를 작성하라. 괄호의 종류는 다음 세 가지가 있다. "( )", "{ }", "[ ]" 각 괄호의 우선순위는 존재하지 않지만 다른 괄호가 열려있는 중간에 닫는 괄호가 온다면 유효하지 않는 문자열이 된다. 예를 들어 "( [ ] )" 이 문자열은 유효한 것이다. 하지만 "( [ ) ]" 이 것은 유효하지 않은 문자열이다. 풀이:이번 문제는 스택을 이용하면 간단히 해결 가능한 문제이다. 괄호 문자 중 여는 괄호가 나오면 스택에 push를 하고 닫힌 괄호가 나올 때 스택에서 pop을 해서 두 쌍이 유효한 것 인지 비교한다. 두 쌍이 제대로 이뤄져 있다면 true두 쌍이 서로 다른 괄호의 종류이거나 스택에 더이상 괄호가 없는데 pop을 시도한 경우는 false..
[Easy] 공통 접두사 찾기 문제: 주어진 문자열 배열에서 가장 긴 공통 접두사를 찾아라. 예)입력 값 : {"abc", "abcd", "ab"}결과 : "ab" 풀이:각 배열에 들어있는 문자열을 첫 글자부터 하나씩 비교해 나간다. 만약 다른 글자를 포함한 것이 있거나 더이상 글자가 없다면 중단해서 그 이전 까지의 문자열이 common prefix이다. Java code: class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 0) return ""; StringBuilder result = new StringBuilder(); boolean same = true; for(int i = 0; i < strs[0].length(); i+..
[Easy] 로마숫자를 정수형으로 변환하기 문제:입력받은 로마 숫자를 정수형 값으로 변환하여 반환해라. 입력 값의 타입은 문자열이고 출력 타입은 integer형이다.입력받는 로마 숫자의 제한은 (3999)까지 이다. 로마 숫자 표I 1 V 5 X 10 L 50 C 100 D 500 M 1000 풀이이 문제는 로마 숫자의 구성만 알면 쉽게 풀 수 있다. 각각의 알파벳은 고유의 숫자 값을 가지고 있고 주의해야할 점은 8은 VIII로 표현되지만 9는 IV로 표현 된다는 점이다. 예를 하나 더들면 40은 XL이다. 이 점을 활용하여 우선 모든 문자의 값을 별도의 배열에 저장한다.예를 들어 DCXXI 를 숫자로 바꿔보자.D는 500, C는 100, X는 10, I는 1이다. 각 글자별로 배열에 저장하면 다음과 같다. 문자D C X X I 값500 100 ..

반응형