목록분류 전체보기 (71)
작심 365
문제 : https://www.acmicpc.net/problem/19941📌 문제 탐색하기 이 문제에서 구해야 하는 햄버거를 먹을 수 있는 최대 사람의 수 는 어떻게 구할 수 있을까이 문제의 작은 단계에서 최적의 해는 가장 왼쪽에 존재하는 햄버거를 먹는 것이다. 앞에 사람이 가능한 왼쪽 햄버거를 먹어야 뒤에 사람의 선택지가 늘어나기 때문이다.따라서 한 사람씩 차례로 왼쪽에 있는 햄버거를 먹고 왼쪽에 햄버거가 없는 경우 오른쪽에 있는 햄버거를 먹는다. 📌 코드 설계하기배열을 순차적으로 돌면서 사람을 발견할 경우 그 왼쪽 위치에 있는 햄버거를 탐색하고 햄버거를 발견한 경우 햄버거를 먹은 사람을 +1 증가시키고 해당 햄버거를 먹은 햄버거 처리한다. 왼쪽에서 먹을 햄버거가 없는 경우 오른쪽을 탐색한다. 1..
문제 : https://www.acmicpc.net/problem/13901📌 문제 탐색하기 이 문제의 경우 문제에서 시키는대로 구현만 하면 되는 구현 유형인것을 바로 알 수 있다. 방문한 지역도 다시 갈 수 없다고 했기때문에 방문여부를 체크할 변수가 필요하다. 하지만 굳이 배열을 하나 더 만들필요없이 한번 방문한 곳을 장애물과 같은 취급해주면 된다.처음 격자 판에 대한 정보를 2차원 배열로 초기화 시켜주고 0 을 방문하지 않은 곳이라고 하고 1을 방문 or 장애물이 있는 곳이라고 가정하고 문제를 푼다. 그리고 고민했던 부분이 더이상 이동할 수 없는 경우를 체크하는 부분이였는데, 이부분은 변수 하나를 둬서 모든 방향을 다 바꿨는데도 이동이 불가능할 경우 더이상의 이동을 종료하는 것으로 풀었다. 📌 코..
문제 : https://www.acmicpc.net/problem/2659📌 문제 탐색하기 먼저 주어진 카드에서 시계수를 어떻게 구하는지를 생각해보고, 그 카드로 만든 시계수가 1111 ~ 9999 까지의 숫자들 중에 시계수 중에서 몇번째로 작은 시계수인지를 구하면 된다.시계수를 구하는 방법은 입력받은 숫자를 오른쪽 방향으로 돌면서 모든 가능한 만들 수 있는 수를 확인하면 된다. 항상 4자리 이므로 4번만 반복하면 된다. 시간 소요 x 다음은 해당 우리가 만든 시계수가 나올 수 있는 모든 수 중에서 몇번째로 작은지를 구하면 되는데 숫자의 범위가 1111 ~ 9999 로 그렇게 많지 않기때문에 수를 하나씩 확인해봐도 된다. 단 여기서 숫자 0은 없기때문에 0이 들어갔을 때만 카운트에서 제외시키면 된다. ..
문제 : https://www.acmicpc.net/problem/2012 📌 문제 탐색하기 각 등수는 무조건 한사람한테만 부여되야 하기 때문에 예상 등수와 실제 등수의 차이가 가장 가까운 등수를 진짜 등수로 지정하면 된다. 등수는 1 ~ N 번까지 주어지기 때문에 예상 등수도 오름차순 정렬을 해서 순차적으로 등수를 가져가도록 하면 결국 불만도의 합이 최소가 나오게 된다. 📌 코드 설계하기1. Scanner 함수를 통해서 사용자에게 정수 n 값과 예상 등수들을 입력받는다.2. 예상 등수가 저장된 배열을 오름차순 정렬한다.3. 배열의 인덱스 번호를 활용해서 반복문을 통해 예상 등수와 실제 등수의 차이를 저장한다. 📌 코드import java.util.Arrays;import java.util.Scan..
문제 : https://www.acmicpc.net/problem/18230 📌 문제 탐색하기 2x1 타일을 사용하면 90도로 회전을 하든 안하든 2x1 을 반드시 2개 사용해야 한다. 따라서 N이 짝수일때는 2x1 타일 2개와 2x2 타일 1개 중에서 더 값이 큰것을 선택하면 되고, N이 홀수일때는 2x1 타일이 반드시 하나 들어가야 한다.무조건 가장 큰 값부터 선택을 하는게 좋기때문에 2x1과 2x2 타일을 정렬해서 가장 큰 값부터 사용한다.📌 코드 설계하기두개의 배열을 선언하고 각각 2x1 크기 타일과 2x2 크기 타일을 넣고 정렬한다.홀수일때는 무조건 먼저 2x1 타일중 값이 가장 큰 타일을 하나 선택한다.가로 길이 N을 다 채울때 까지 남아있는 2x1 타일중 가장 값이 큰 타일 2개와 2x2..
문제 : https://www.acmicpc.net/problem/14247 📌 문제 탐색하기 가장 성장률이 높은 나무를 가장 마지막에 잘라야 나무의 길이를 가장 많이 얻어 갈 수 있다.따라서 가장 성장률이 낮은 나무부터 먼저 자르면 된다. 📌 코드 설계하기성장률을 기준으로 정렬을 한 뒤, 매일 하나씩 잘라주면 된다. 생각해보니 모든 나무를 자르기 때문에 나무 초기 길이는 따로 저장할 필요가 없어서 바로 answer 변수에 더해주었다.성장률의 경우 배열에 저장을 한 뒤에 오름차순 정렬을 하고 날짜마다 곱해준 값을 answer에 더해주면 된다. 📌 코드Javaimport java.util.Arrays;import java.util.Scanner;public class Main { public stat..
문제 : https://www.acmicpc.net/problem/2529 📌 문제 탐색하기선택한 숫자가 모두 달라야 하기 때문에 순열을 이용할 수 있다. 부동호에 들어갈 숫자를 선택하는게 아니라 숫자를 선택한뒤 그 숫자를 부등호 기호에 맞게 나열해도 된다.따라서 K+1 개의 숫자를 선택해서 순열을 이용해 숫자들을 나열할 수 있고 부등호 기호에 맞게 나열된 순열중에 가장 큰 값과 가장 작은 값을 찾으면 된다. 이때 만들수 있는 최솟값은 가장 작은 값들을 선택했을때 나오고 최댓값은 가장 큰 값들을 선택했을때 나온다.따라서 최솟값은 숫자 0,1,2,3,... 을 선택했을때, 최댓값은 9,8,7,... 을 선택했을때 만들 수 있다. 📌 코드 설계하기1. k의 수와 부등호 문자열을 입력받고 최댓값과 최솟값을..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59037 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 : 젊은 동물들의 아이디와 이름만 출력하는 것이므로 where 절 조건으로 Aged가 아닌 모든동물들을 출력할 수 있게 한다.SELECT ANIMAL_ID, NAME FROM ANIMAL_INSWHERE INTAKE_CONDITION != 'Aged'ORDER BY ANIMAL_ID