전체 글 101

[Algorithm] 그리디 알고리즘(탐욕법)에 대해 쉽게 알아보자

💡 그리디 알고리즘 그리디 알고리즘은 한국어로 탐욕 알고리즘 이라고도 하며 결정해야 하는 순간 가장 좋다고 생각하는 것을 선택하면서 답을 찾아가는 알고리즘을 말합니다. 이 방식의 한계점은 그 순간에는 최적일지도 모르지만, 최종적으로는 답이 아닐 수 있는 경우가 많기 때문에 그리디 알고리즘을 사용한 경우, 최적이라는 걸 입증하는게 쉽지 않습니다. 그래도 입증만 한다면 구현하는건 다른 알고리즘에 비해 쉬운 편입니다. 아래 문제를 보면서 이해해보도록 하겠습니다. ** 그래서 그리디 알고리즘으로 문제를 어떻게 푸는건가요? 그리디 알고리즘은 무조건 큰 수부터 채워서 최소값을 구하는 것입니다. 예를 들어 동전 문제가 있습니다. 만약, 177원을 만든다면 100원 1개 10원 2개 5원 1개 1원 2개의 동전을 주면..

기술면접대비 2020.04.09

[Algorithm] 완전탐색(Exhaustive Search)에 대해 쉽게 알아보자

💡 완전탐색 알고리즘 문제를 해결하는 데 가장 간단하고 쉬운 방법이 무엇일까? 답은 가능한 경우를 다 해보는 것이다. 이게 무슨 알고리즘이야? 할 수 있겠지만, 이것도 알고리즘에 일종이다. 전산학에서는 이를 무식하게 푼다라는 뜻의 Brute-force라 하고, 전체를 확인한다고 해서 완전 탐색 알고리즘(exhaustive search algorithm)이라고 한다. ** ☝🏻 그렇다면 완전탐색은 대체 언제 쓰이는건가요? 사실, 알고리즘 대부분의 문제들은 시간 초과등의 이유로 완전 탐색으로 풀리지 않습니다. 하지만 어려운 알고리즘을 생각할 필요 없이 완전 탐색으로 풀리는 문제도 있으며, 가끔 어려운 완전 탐색 문제도 존재합니다. 따라서, 완전 탐색 알고리즘을 문제 풀이 도구로 항상 염두해두고 있어야합니다...

기술면접대비 2020.04.09

[DO IT MYSELF] 기술면접대비 - (1)

1. ArrayList와 LinkedList의 차이가 무엇인지 설명하시오. 👉🏻 ArrayList는 길이가 동적으로 변하는 가변배열입니다. 데이터를 삽입하거나 삭제할 때 내부에 임시배열을 작성 후 데이터를 복사하는 방법을 사용합니다. 반면, LinkedList는 주소형식으로 리스트를 묶은 것이기 때문에 중간에 데이터가 삽입이 되면 이전 데이터의 주소만 변경해주면 되기 때문에 데이터의 삽입 및 삭제가 용이합니다. 즉, ArrayList에 비해 공간적 제약을 받지 않는다는 장점이 있습니다. 2. 자바의 접근 제한자는 어떤 것이 있는지 설명하시오. 👉🏻 자바의 접근제한자에는 public, private, protected, default 총 4가지가 있습니다. 1. public은 같은 패키지뿐만 아니라 다른 ..

기술면접대비 2020.04.05

[프로그래머스] 문자열 내림차순으로 배치하기

💡 문제 💡 나의 풀이( 점수 : 100/100 ) import java.util.*; class Solution { public String solution(String s) { String answer = ""; char[] array = s.toCharArray(); Arrays.sort(array); StringBuilder sb = new StringBuilder(new String(array)); // StringBuilder 역순배치 sb.reverse(); return sb.toString(); } } 처음에 버블정렬로 구현할 수 있겠다는 생각을 했지만, 코드가 길어지다보니 여러 함수를 알아보게 되었고 덕분에 비교적 짧은 코드로 구현할 수 있었습니다. 우선, S에 저장된 "Zbcdefg" ..

코딩테스트 2020.04.01

[프로그래머스] 하샤드 수

💡 문제 💡 나의 풀이( 점수 : 70.6 / 100 ) class Solution { public boolean solution(int x) { boolean answer = true; int num1 = x / 10; int num2 = x % 10; if((x%(num1+num2)) == 0) { return answer; } else { answer = false; } return answer; } } 먼저, 저는 10의 자릿수와 1의 자릿수를 각각 담을 변수 두 개를 만들었습니다. 그 후, 변수 X에 저장된 두 자리의 숫자가 각각의 연산을 진행한 후 미리 만들어둔 num1, num2 변수에 각각 저장됩니다. 그다음 입력받은 변수 X를 num1, num2를 더한 값으로 나누었을 때의 나머지가 0이..

코딩테스트 2020.03.31

[Algorithm] 재귀(Recursion)에 대해 쉽게 알아보자

💡 재귀 컴퓨터 과학에 있어서 재귀는 자신을 정의할 때 자기 자신을 재 참조하는 방법을 뜻하며, 이를 프로그래밍에 적용한 재귀 호출의 형태로 많이 사용된다. 위의 이미지와 재귀는 무슨 상관관계가 있을까? 처음에는 하나의 큰 화면으로 시작해서 다른 화면을 담지 못할 때까지 점점 화면이 작아지는 것이 반복된다. 이처럼 문제를 해결하기 위해 알고리즘을 설계할 때 동일한 문제의 조금 더 작은 문제를 해결함으로써 그 문제를 해결하는 것 즉, 문제가 간단해져서 바로 풀 수 있는 문제로 작아질 때(base case)까지 해결해보는 방식이 바로 재귀이다. 💡 재귀함수 함수 안에서 다시 자신의 함수를 호출(재귀 호출)하면서 로직을 처리하는 경우를 말한다. ** ☝🏻 여기서 잠깐, 재귀 호출을 이해하기 위해서는 스택을 먼..

기술면접대비 2020.02.20

[Database] 트랜잭션(transaction)에 대해 쉽게 알아보자

💡 트랜잭션 트랜잭션이란, 간단히 말해 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위를 말한다. 만약 작업이 중단됐을 경우 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 Commit을 수행하는 논리적인 단위이다. ** ☝🏻 여기서 잠깐, 데이터베이스의 상태를 바꾼다는 것이 무엇을 의미할까요? Ⅰ. SELECT : 선택 Ⅱ. INSERT : 삽입 Ⅲ. UPDATE : 수정 Ⅳ. DELETE : 삭제 총 4개의 SQL 질의어를 사용하여 데이터베이스에 접근하는 것 ** ☝🏻 그렇다면 작업의 단위는 무엇을 의미할까요? 작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다. 게시판을 예로 들어보자 게시판 사용자는 게시글을 작성하고, 올리기 버튼을 ..

기술면접대비 2020.02.18