일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- maven
- 배포
- 카우치코딩
- LEVEL 2
- 그리디 알고리즘
- 와이어 프레임
- 협업프로젝트
- 프로그래머스
- couchcoding
- ERD
- 프로젝트 설계
- Spring
- 테이블 해시 함수
- Spring Framework
- 유사 칸토어 비트열
- 마법의 엘리베이터
- 코딩테스트
- Java
- Qoddi
- DFS
- GitHub
- 트랜잭션
- 빌드 툴
- Fun편log
- 토이 프로젝트
- 6주포트폴리오
- 백준
- 알고리즘
- 토이프로젝트
- pom.xml
- Today
- Total
목록알고리즘 풀이/프로그래머스 (8)
소통 하고싶은 개발자

문제 개요 풀이 아무튼 단순 구현이기 때문에 정답을 도출하는 방법은 되게 간단하게 보인다. 바로 2중 for문을 사용해서 x나 y 중 하나를 기준으로 잡고, (0, 0), (0, k), (0, 2k),,, (k, 0), (k, 2k), (k, 2k) 이런 식으로 첫 for문은 0부터 d까지 k 씩 증가시키고, 두 번째 for문도 동일하게 0부터 d까지 k씩 증가시키면서 거리가 멀어지면 break 하고 카운팅하면서 넘어가도록 구현하면 정답은 구할 수 있을 것이다. 그런데 이렇게 풀면 효율성에서 탈락된다. 역시 Level 2라서 그런지 그냥 풀수는 없나 보다. 2중 for문을 사용해서 효율성에서 떨어졌으니 for문을 1번만 쓰면서 문제를 풀면 된다. 그렇다면 어떻게 한번만 사용해서 풀 수 있느냐가 이게 관건..

문제 개요 풀이 나는 이 문제를 풀 때 아래의 순서로 접근했다. enemy 중 가장 많은 enemy가 등장할 때 무적권을 사용하자. 반례로 가장 큰 값을 제거하더라도 현재 가진 병사의 수가 적어서 무적권을 사용해야 할 라운드까지 막아낼 수 없는 경우가 존재한다. 예를 들어 n = 3, k = 1, enemy = {1, 2, 3}인 경우에 가장 큰 값인 3에서 무적권을 쓰고 싶어도 3에 도전하기 전에 모든 병사가 소모되는 경우가 존재하는 것이다. 많은 enemy가 등장할 때 무적권을 사용해야 하므로, 현재 병사들로 막아낼 수 있는 최대를 구한 뒤, 우선적으로 그 안에서 enemy가 많은 순서대로 무적권을 사용하자. 반례로 막아낼 수 있는 범위에서 무적권을 모두 소모했는데, 무작정 소모권을 사용했기 때문에 ..

문제 개요 수학에서 칸토어 집합은 0과 1 사이의 실수로 이루어진 집합으로, [0, 1]부터 시작하여 각 구간을 3 등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만들어집니다. 남아는 칸토어 집합을 조금 변형하여 유사 칸토어 비트열을 만들었습니다. 유사 칸토어 비트열은 다음과 같이 정의됩니다. 0 번째 유사 칸토어 비트열은 "1" 입니다. n(1 ≤ n) 번째 유사 칸토어 비트열은 n - 1 번째 유사 칸토어 비트열에서의 1을 11011로 치환하고 0을 00000으로 치환하여 만듭니다. 남아는 n 번째 유사 칸토어 비트열에서 특정 구간 내의 1의 개수가 몇 개인지 궁금해졌습니다. n과 1의 개수가 몇 개인지 알고 싶은 구간을 나타내는 l, r이 주어졌을 때 그 구간 내의 1의 개수를 return 하..

문제 개요 완호가 관리하는 어떤 데이터베이스의 한 테이블은 모두 정수 타입인 컬럼들로 이루어져 있습니다. 테이블은 2차원 행렬로 표현할 수 있으며 열은 컬럼을 나타내고, 행은 튜플을 나타냅니다. 첫 번째 컬럼은 기본키로서 모든 튜플에 대해 그 값이 중복되지 않도록 보장됩니다. 완호는 이 테이블에 대한 해시 함수를 다음과 같이 정의하였습니다. 해시 함수는 col, row_begin, row_end을 입력으로 받습니다. 테이블의 튜플을 col번째 컬럼의 값을 기준으로 오름차순 정렬을 하되, 만약 그 값이 동일하면 기본키인 첫 번째 컬럼의 값을 기준으로 내림차순 정렬합니다. 정렬된 데이터에서 S_i를 i 번째 행의 튜플에 대해 각 컬럼의 값을 i로 나눈 나머지들의 합으로 정의합니다. row_begin ≤ i ..

문제 개요 마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다. 탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특별합니다. 마법의 엘리베이터에는 -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼이 있습니다. 마법의 엘리베이터의 버튼을 누르면 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동하게 됩니다. 단, 엘리베이터가 위치해 있는 층과 버튼의 값을 더한 결과가 0보다 작으면 엘리베이터는 움직이지 않습니다. 민수의 세계에서는 0층이 가장 아래층이며 엘리베이터는 현재 민수가 있는 층에 있습니다. 마법의 엘리베이터를 움직이기 위해서 버튼 한 번당 마법의 돌 한 개..

문제 개요 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 달라 어떤 순서로 설지 정하는데 시간이 오래 걸렸다. 네오는 프로도와 나란히 서기를 원했고, 튜브가 뿜은 불을 맞은 적이 있던 라이언은 튜브에게서 적어도 세 칸 이상 떨어져서 서기를 원했다. 사진을 찍고 나서 돌아오는 길에, 무지는 모두가 원하는 조건을 만족하면서도 다르게 서는 방법이 있지 않았을까 생각해보게 되었다. 각 프렌즈가 원하는 조건을 입력으로 받았을 때 모든 조건을 만족할 수 있도록 서는 경우의 수를 계산하는 프로그램을 작성해 보자. 입력 형식 입력은 조건의 개수를 나타내는 정수 n과 n개의 원소로 구성된 문자열 배..

문제 개요 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다. 이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러 개 있는데, 한 유저가 오늘 이 던전..

문제 개요 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 제한 사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다. 예시 : "baabaa" -> "bbaa" -> "aa" -> "" 풀이 단순히 생각했을 때 배열을 사용해서 1회 루프를 돌린다고 하면 중복되는 항목..