Algorithm 78

[Algorithm] 문자열 압축

프로그래머스 문제 https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr 풀이 import java.util.*; class Solution { public int solution(String s) { int answer = s.length(); // 단위가 1부터 s.length() 까지 for (int len = 1; len < s.length(); len++) { // 단위별 압축된 문자열 저장 Stri..

Algorithm 2021.06.06

[Algorithm] 자물쇠와 열쇠

프로그래머스 문제 https://programmers.co.kr/learn/courses/30/lessons/60059 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 풀이 1. 키를 자물쇠 범위 안에 맞추지 않아도 일부만 맞아서 채워져도 된다. 자물쇠의 범위를 늘린다. 상하좌우를 늘림. (자물쇠만큼 늘려줬다.) 2. 키를 돌려가면서 맞추고자 했다. (하나의 공간에서 4개 경우의 수) 키 돌리는 메서드 작성 turn90 3. 자물쇠 범위에 키를 더하고, 체크해서 안에 합이 1로만 이루어진 경우 통과 true class Solution { public stat..

Algorithm 2021.06.05

[Algorithm] 문자열 재정렬

문제 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬해 이어서 출력한 뒤, 모든 숫자를 더한 값을 이어서 출력한다. 입력 조건 첫째 줄에 문자열 S가 주어진다. 출력 조건 첫째 줄에 요구하는 정답을 출력한다. 풀이 1. 문자열을 입력받는다. 2. 문자열에 문자 하나하나 씩 숫자인지 문자인지 판별한다. 숫자면 sum이라는 정수형에 합으로 저장하고, 문자는 List를 정의해 저장한다. 3. 문자가 담긴 리스트를 정렬한다. 4. 결과를 담을 result에 문자를 하나씩 더한다. 그리고 마지막에 sum을 문자열로 변환해 더한다. import java.util.*; class Main { public static void main(String[] args..

Algorithm 2021.06.04

[Algorithm] 무지의 먹방 라이브

풀이 1) 전제 조건 K 시간이 다 가기 전에 음식을 다 먹으면 -1을 반환한다. food_times에 담긴 합이 K보다 작거나 같으면 -1을 반환한다. 2) 가장 적은 시간이 드는 음식 다 먹는 시간 현재까지 음식을 먹는데 걸린 시간 sum, 이전에 먹은 음식에 걸린 시간 pre 남은 음식 rest로 만들어진 식 sum + (pq.peek().getTime() - pre) * rest 은 이제 먹을 음식 pq.peek()을 먹는데 걸리는 시간에 pre를 빼는 것은 pre가 이미 sum에 합쳐져 있기 때문이다. rest를 곱하는 이유는 pq.peek()을 먹으면 그만큼 다른 음식들도 먹어야 하기 때문이다. 위와 같은 식이 K보다 작을 경우 지금 먹는 음식을 모두 먹을 수 있다. sum = 0; pre =..

Algorithm 2021.06.03

[Algorithm] 럭키 스트레이트

문제 게임의 아웃복서 캐릭터는 필살기인 '럭키 스트레이트' 기술이 있다. 이 기술은 강력한 대신 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다. 특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 자릿수를 기준으로 점수 N을 반으로 나눠 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 123,402점이라면 왼쪽은 1+2+3=6, 오른쪽은 4+0+2=6으로 럭키 스트레이트를 사용할 수 있다. 입력 조건 첫째줄에 점수 N이 주어진다. (N의 자릿수는 항상 짝수의 형태로 주어진다.) 출력 조건 첫째 줄에 럭키 스트레이트가 가능하면 "LUCKY" 불가능하면 "READY"라고 출력한다. 풀이 String 타입으로 점수를 입력받아, 문자열의 길이의 절반..

Algorithm 2021.06.03

[Algorithm] 볼링공 고르기

문제 A, B 두 사람이 볼링을 치고 있다. 두 사람은 서로 무게가 다른 볼링공을 고르려고 한다. 볼링공은 총 N개가 있으며 각 볼링공마다 무게가 적혀 있고, 공의 번호는 1번부터 순서대로 부여된다. 또한 같은 무게의 공이 여러 개 있을 수 있지만, 서로 다른 공으로 간주한다. 볼링공의 무게는 1부터 M까지의 자연수로 존재한다. 예를 들어 N이 5이고 M이 3이며 각각의 무게가 차례대로 1, 3, 2, 3, 2일 때, 각 공의 번호가 차례대로 1번부터 5번까지 부여된다. 이 때, 두 사람이 고를 수 있는 볼링공 번호의 조합을 구하면 다음과 같다. (1번 2번), (1번 3번), (1번 4번) (1번 5번) (2번 3번) (2번 5번) (3번 4번) (4번 5번) 결과적으로 두 사람이 공을 고르는 경우의 ..

Algorithm 2021.06.02

[Algorithm] 문자열 뒤집기

문제 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 이 문자열 S에 있는 모든 숫자를 전부 같게 만드려고 한다. S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로 0을 1로 만드는 것을 의미한다. 예시 0001100의 경우, 전체를 뒤집으면 1110011이 되고, 4번째와 5번째 숫자를 뒤집으면 1111111이 된다. 하지만 처음부터 4번째와 5번째 숫자를 뒤집으면 0000000으로 모두 같은 숫자로 만들 수 있다. 문자열 S가 주어졌을 때, 다솜이가 해야 하는 행동의 최소 횟수를 출력하시오. 입력 조건 0과 1로 이루어진 문자열 S가 주어진다. 출력 조건 행동해야할 최소 횟수를 출력 풀이 먼저, 연속된 숫자를 한번에 뒤집는다고 생각하고, 0을 뒤집는 횟수 ..

Algorithm 2021.06.01

[Algorithm] 곱하기 혹은 더하기

문제 각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 곱하기 혹은 더하기 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. 곱하기가 더하기의 우선권을 갖지 않고 무조건 왼쪽부터 연산이 진행된다. 입력 조건 첫째줄에 여러개의 숫자로 구성된 하나의 문자열 S 출력 조건 만들어질 수 있는 가장 큰 수 풀이 곱하기 연산과 더하기 연산의 결과가 더 큰 것을 가지고 가도록 생각했음. 왼쪽부터 계산하기 때문에 0번째부터 이웃한 숫자와의 더하기 연산과 곱하기 연산을 비교해 더 큰 경우를 저장해가면서 풀이했음. 그리고 배열의 마지막 인덱스에 저장된 값이 최대 값으로 판단함. import java.util.*; cla..

Algorithm 2021.05.31

[Algorithm] 모험가 길드

문제 한 마을에 모험가가 N명 있다. 모험가 길드에서는 N명의 모험가를 대상으로 공포도를 측정했다. 공포도가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어진다. 공포도가 X인 모험가는 반드시 X명 이상으로 구성된 모험가 그룹에 참여해야 여행을 떠날 수 있다. 최대 몇 개의 모험가 그룹을 만들 수 있는지 궁금하다. 입력 조건 첫째 줄에 모험가의 수 N 둘째 줄에 모험가의 공포도 값이 주어진다. 출력 조건 여행을 떠날 수 있는 그룹의 최대값 풀이 N명의 모험가의 공포도를 정렬하고, 그룹 지어진 인원을 빼며 계산한다. import java.util.*; class Main { public static void main(String[] args) { Scanner sc = new Sc..

Algorithm 2021.05.30
반응형