JAVA 51

# level-1 카카오 블라인드 - 1차 다트 게임

좀 어렵다고 느껴지는 알고리즘 문제를 풀고나서 다른 사람 풀이를 보고나면, 늘 이런 생각이 든다. 나처럼 생각해서 풀기가 더 어려울거 같다고. 즉, 조금 더 생각하면 충분히 간단하고 효율적인 알고리즘으로 풀 수가 있는 문제인데, 문제 파악이 제대로 안되다보니 내 스스로 꼬고 꼬아서 문제를 푸는 것이다.. [문제] 다트 게임은 총 3번의 기회로 구성된다. 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다. 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제곱 (점수1 , 점수2 , 점수3 )으로 계산된다. 옵션으로 스타상(*) , 아차상(#)이 존재하며 스타상(*) 당첨 시 해당 점수와 바로 전에 얻은 점수를 각 2..

JAVA/Argorithm Test 2020.11.10

# Level1 - 정렬 - K번째 수

[문제] 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. [내 풀이] 내 풀이의 문제점은 Arrays를 활용하지 않았다..

JAVA/Argorithm Test 2020.11.09

# Level 1 - 2020카카오 인턴십 키패드 누르기

[문제] 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 1. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 2. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 3. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다. 4. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가..

JAVA/Argorithm Test 2020.11.06

# Level 1 - 탐욕법-체육복

[문제] 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요. [내 풀이] 총 두번의 반복문으로 처리했고 수업을 들을 수 없는 학생을 제외하는 방식을 사용했다. 첫번째 반복문은 잃어버린 학생들 중 여벌 옷을 가져온 학생이 도난 당한 경우를 제외하였..

JAVA/Argorithm Test 2020.11.05

# Level1 - 문자열 내 P와 Y의 개수

[문제] 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 pPoooyY면 true를 return하고 Pyy라면 false를 return합니다. [내 풀이] 내 풀이의 아쉬운 점은 문제를 조금 더 면밀히 파악하지 못한것이다. 대소문자 구별하지 않는다는 조건이 있으므로 문자열 s를 대문자 or 소문자로 변환했다면 하나만 대소문자를 모두 찾을 필요가 없었을 것이다. 또한 문자열의 단순 카운팅인데 split으로 자르고 확인할 필요가 있..

JAVA/Argorithm Test 2020.11.04

# Level1 - 3진법 뒤집기

[문제] 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. [내 풀이] 나는 N진수 변환하는 코드를 직접 계산했는데, Integer.toString(Value, N); 이라는 코드로 간단히 변환시킬 수 있다. class Solution { public int solution(int n) { int answer = 0; StringBuilder builder = new StringBuilder(); // 3진수 변환 while (n >= 1) { builder.insert(0, n % 3); n /= 3; } // 값 반전 builder.reverse(); // 10진수 변환 int a =..

JAVA/Argorithm Test 2020.11.02

# Level1 - 모의고사 (완전탐색)

[문제] 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성..

JAVA/Argorithm Test 2020.10.30

# Level1 - 예산

[문제] 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. [내 풀이] 이 문제는 시간이 많이 걸렸는데, 이유는 너무 어렵게만 생각을 했었기 때문이다. 문제를 보고서 얼핏 모든 경우의 수를 고려하여 결과 값을 찾아내야 한다고 생각할 수 있지만 그렇지 않다. 정렬한 뒤, 최소 값으로 구할 수 있는 최대의 값(result)만 구하면 그 뒤 더 큰 결과 값이 나올..

JAVA/Argorithm Test 2020.10.30

# Level1 - 두개 뽑아서 더하기

[문제] 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. [내 풀이] 내 풀이의 문제점 하나, 왜 list를 썼지? list를 썼기때문에 중복 검사를 하는 과정을 거쳐야 했다. 문제점 둘, 왜 list의 stream 을 활용하지 않았나? stream의 mapToInt()라는 함수를 생각도 못했다... mapToInt()를 사용하면 Integer를 int로 형 변환하거나 list의 값을 Array로 옮기기 위해 또 for문을 돌리는 작업을 하지 않아도 된다. import java.util.*; class Solution { public in..

JAVA/Argorithm Test 2020.10.29

# Level1 - [1차] 비밀지도

[문제] 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ) 또는벽(#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도 1과 지도 2라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. 지도 1과 지도 2는 각각 정수 배열로 암호화되어 있다. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백..

JAVA/Argorithm Test 2020.10.28