ALL 56

[JAVA] 백준 알고리즘 2529번 (부등호)

문제 이번에 다뤄볼 문제는 2529번 문제 '부등호'입니다. 문제에서 연습해야 하는 key-point는 백트래킹입니다. 백트래킹(backtracking)이란, 해를 찾는 도중 해가 아니어서 막히면 되돌아가서 다시 해를 찾아가는 기법을 말합니다. 모든 경우의 수를 전부 고려하는 알고리즘으로써 상태 공간을 트리로 나타낼 수 있을 때 적합한 방식입니다. 일종의 트리 탐색 알고리즘이라고 봐도 무방한데요. 방식에 따라서 깊이 우선 탐색(Depth First Search, DFS)과 너비 우선 탐색(Breadth First Search, BFS), 최선 우선 탐색(Best First Search/Heuristic Search)이 있습니다. 이번 문제에서처럼 모든 경우의 수를 고려하되 트리의 깊이가 정해져 있는 경우..

algorithm 2022.01.28

이쯤에서 돌이켜보는 신입 개발자 취업

*주관주의 : 본 콘텐츠에는 지극히 주관적인 견해가 포함되어 있습니다. 예전부터 IT취업을 준비하는 후배나 지인을 만나면 두 가지를 물어보는 편입니다. 첫째, 가고싶은 회사를 정했는지 둘째, 하고싶은 직무를 정했는지 우선 첫째, 가고 싶은 회사의 경우 어느 성향을 갖는 회사냐에 따라 준비과정이 조금은 다를 수 있다 생각합니다. 저는 보통 "네카라쿠배"류 vs "삼성, 현대, LG"류로 나누어 생각하는 편인데요. 아래 표를 통해 확인해보겠습니다. 네카라쿠배 삼성,현대,LG 공통 - 알고리즘 문제풀이 연습 - 기본적 CS(Computer Science) 학습 ┕ 자료구조, 네트워크, 운영체제, 데이터베이스 등 - 면접에서 라이브 코딩시 사용할 주언어 1개 이상 - 사이드 프로젝트 또는 팀프로젝트에 대한 경험..

for Developer 2022.01.18

[JAVA] 백준 알고리즘 14225번 (부분수열의 합)

문제 이번에 다뤄볼 문제는 14225번 문제 '부분수열의 합'입니다. 문제에서 연습해야 하는key-point는 비트마스크입니다. 우선 비트마스크가 무엇인지 알아보겠습니다. 비트마스크는 알고리즘 기법을 뜻하는건 아닙니다. 컴퓨터 과학에서 마스크(mask) 또는 비트마스크(bitmask)로 불리우는 개념은 특히 비트 필드에서 비트 연산에 사용되는 데이터를 뜻합니다. 즉, 2진수 형태의 비트에서 각 포지션별로 true(1), false(0)가 마스킹 된 데이터를 비트마스크라고 생각하면 됩니다. 비트 연산으로는 기본적으로 AND연산(&), OR연산(|), XOR(^)연산, NOT연산(~), 쉬프트연산(>)이 존재하며 우리는 오늘 비트마스크 그리고 AND연산과 쉬프트연산을 활용하여 문제를 해결해보겠습니다. 문제에..

algorithm 2022.01.15

[JAVA] 백준 알고리즘 10815번 (숫자 카드)

문제 이번에 다뤄볼 문제는 10815번 문제 '숫자 카드'입니다. 문제에서 연습해야 하는key-point는 분할정복 입니다. 분할 정복 알고리즘(Divide and conquer algorithm)은 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법이나 알고리즘을 뜻합니다. 빠른 정렬이나 합병 정렬로 대표되는 정렬 알고리즘 문제와 고속 푸리에 변환(FFT) 문제가 대표적인 케이스 입니다. 이 문제는 분할정복 유형의 기초적인 예제 문제이며 다양한 구현 방식 중 이진탐색을 활용하여 해결해보겠습니다. 이진탐색(binary search)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘 입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작..

algorithm 2022.01.08

[JAVA] 백준 알고리즘 2138번 (전구와 스위치)

문제 이번에 다뤄볼 문제는 2138번 문제 ' 전구와 스위치'입니다. 문제에서 연습해야 하는key-point는 그리디 알고리즘 입니다. 그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법입니다. 예를들어 'A도시에서 B도시까지 이동 할 때, 총 5개의 지점을 꼭 거쳐서 가야하며 이때의 최소 이동거리를 구하시오.' 라는 요구사항이 있다면 그리디 알고리즘을 사용할 경우 현재의 지점에서 가장 가까운 지점으로 이동을 하며 최종 결과를 도출해내는 알고리즘이라 생각하면 됩니다. 단, 여기서 주의해야 할 부분은 그리디 알고리즘을 사용하면 매 선택이 그 순간에 대해서는 최적이지만 ..

algorithm 2022.01.02

[JAVA] 백준 알고리즘 1021번 (회전하는 큐)

문제 이번에 다뤄볼 문제는 1021번 문제 '회전하는 큐'입니다. 문제에서 연습해야 하는key-point는 Deque(덱)입니다. Deque이란 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조의 한 형태입니다. 두 개의 포인터를 사용하여, 양쪽에서 삭제와 삽입을 발생시킬 수 있고 큐와 스택을 합친 형태로 생각할 수 있습니다. 흔히 우리가 카드게임을 할 때 카드덱 이라고 부르는 그 덱과 유사한 개념이라고 생각할 수 있습니다. 우선 문제를 천천히 분석해 보겠습니다. 문제에서 결과로 원하는 값은 주어진 숫자를 순서대로 뽑기 위한 큐(카드덱)의 움직임 최솟값 입니다. 예제 입력 2를 통해 문제에서 원하는 값을 가져오는 과정에 대해 살펴보겠습니다. 주어진 연산과 상황은 아래와 같습니다. [연산 3가지] 1. 맨..

algorithm 2021.12.26

[JAVA] 백준 알고리즘 1654번 (랜선 자르기)

문제 이번에 다뤄볼 문제는 1654번 문제 '랜선 자르기'입니다. 이 문제는 이분탐색을 활용하여 해결 할 수 있습니다. 이분탐색(Binary Search)이란 이미 정렬되어 있는 배열에서 탐색 범위를 반씩 줄여 가며 찾고자 하는 값을 찾는 탐색 방법인데요. 검색 범위를 줄여 나가면서 원하는 데이터를 검색하는 알고리즘입니다. 검색 범위에 해당하는 하한값, 상한값을 기준으로 중간값부터 탐색을 시작하는 방식이고 이에 대하여 1부터 100까지의 범위에서 77이란 숫자를 찾는 과정을 통해 예를 들어보겠습니다. 첫 시작은 하한값(1)과 상한값(100)의 중간값인 50부터 시작을 합니다. 찾고자 하는 77의 경우 중간값보다 큰 값이기 때문에 하한값(1)을 중간값(50)으로 상향 조정하여 재정의 합니다. 이렇게 될 경..

algorithm 2021.12.19

[JAVA] 백준 알고리즘 1759번 (암호 만들기)

문제 이번에 다뤄볼 문제는 1759번 문제 '암호 만들기'입니다. 우선 문제를 분석해보도록 하겠습니다. 문제에서 원하는건 "주어진 문자들을 활용하여 L개의 문자로 구성된 암호문자열을 만들어내라" 입니다. 첫째 줄에서 두 정수를 입력받습니다. L = 암호문자의 글자수, C = 암호를 구성할 문자들의 수 두번째 줄에서는 C개 만큼의 암호구성이 주어지네요. 그리고 여기서 조건이 두가지가 주어졌습니다. 1. 최소 한 개의 모음, 최소 두 개의 자음 으로 구성된 암호여야 한다. 2. 각 알파벳 암호는 오름차순을 갖는다. 두번째 조건의 경우 Arrays.sort() 메서드를 통해 입력받은 C개의 암호문자를 미리 정렬을 시켜놓고 진행하면 쉽게 만족시킬 수 있으니 첫번째 조건에 대해서만 메서드를 하나 만들어 체크하면 ..

algorithm 2021.12.10
반응형