분류 전체보기 116

[프로그래머스] 위장

programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 문제 풀이 : 옷의 종류를 key로 종류의 갯수를 value로 해시테이블을 구성합니다. 해시테이블에 옷의 종류가 없다면 갯수를 1로 넣어주고, 옷의 종류가 있다면 갯수를 1씩 늘려줍니다. ex) headgear : yellow_het , green_turban eyewear : blue_sunglasses 만약 yellow_het 을 골랐을 때 eyewear를 안 입는 경우도 있습니다. 그렇기 때문에 headgear를 안 입는 경우, eyewear를 안 입는 경우 각 각 +1 을 해주어서 경우의 수를 구해줍니다. 이 때 둘 다 안 쓰는 경우는 제외시켜주어야 하기..

[SWEA] 1954. 달팽이 숫자

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 : 방법 1) 달팽이 행렬의 패턴은 시계방향으로 90도 만큼 계속 꺾인다. ( ㄱ,ㄴ,ㄱ,ㄴ,... ) 그렇기 때문에 변수 turn을 1이거나 -1 일 때로 설정하여 좌표 x와 y가 방향 전환이 되도록 한다. ex) turn = 1, n=4 일 때 (0,0)(0,1)(0,2)(0,3) turn = 1, n=3 일 때 (1,3)(2,3)(3,3) turn = -1, n=3 일 때 (3,2)(3,1)(3,..

[프로그래머스] 완주하지 못한 선수

programmers.co.kr/learn/courses/30/lessons/42576?language=java 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr import java.util.Arrays; class Solution { public String solution(String[] participant, String[] completion) { Arrays.sort(participant); Arrays.sort(completion); int i; for (i = 0; i < co..

[백준] 1931 회의실 배정

www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 처음에는 시작 시간을 기준으로 정렬하여 맨 처음부터 끝까지 반복해서 돌면서 회의 종료시간보다 크거나 같은 회의 갯수를 세주어 가장 갯수가 많은 것이 답이 되도록 생각했지만 그렇게 하면 시간초과가 나기 때문에 잘못 생각한 방법이었습니다. 문제 풀이 : 그리디 알고리즘으로 이전 종료시간과 이후 시작 시간이 겹치지 않으면서 가장 종료시간이 빠른 것을 선택해 세주면 됩니다. 1. 먼저 종료 시간을 기준으로 정렬합니다. 2. 다음 시작 시간이 종료 시간보다 크거나 같으면 종료 시간을 갱신해주고 count 변수로 세줍니다. import ..

[백준] 11047 동전0

www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 문제 설명 : 동전은 총 N종류이고 K 가치의 합으로 만들기 위한 동전 개수의 최솟값을 구하라 문제 풀이 : 그리디 알고리즘 최소한의 개수로 만들기 위해서는 가장 큰 동전부터 선택하는 것이 최적의 해가 된다. 동전 K원을 만들기 위해서 오름차순이 되어있는 동전을 맨 뒤에서 부터 확인한다. 만약 동전 K원보다 클 경우 그냥 넘어가고 K원보다 같거나 ..

Bubble Sort. 버블정렬

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 두 수를 비교하면서 크기가 클 수록 뒤로 이동하여 결국에는 가장 큰 숫자가 맨 뒤로 이동하게 된다. 정렬된 숫자를 제외하고 계속해서 비교해주면 된다. 예시) 5 6 3 1 8 // 5 6 비교 5 6 3 1 8 // 6 3 비교 , swap 5 3 6 1 8 // 6 1 비교, swap 5 3 1 6 8 // 6 8 비교 5 3 1 6 8 // 1회전 결과 5 3 1 6 8 // 5 3 비교, swap 3 5 1 6 8 // 5 1 비교, swap 3 1 5 6 8 // 5 6 비교 3 1 5 6 8 // 2회전 결과 3 1 5 6 8 // 3 1 비교, swap 1 3 5 6 8 // 3 5 비교 1 3 5 6 8 // 3회전 결과 1 3 5 6..

ALGORITHM/이론 2021.01.05

[백준] 11399번 ATM

www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 풀이 : 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구할 떄 중요한 점은 대기 시간의 합입니다. 최소로 하기 위해 먼저 걸리는 시간을 정렬해줍니다. 정렬한 후 대기시간을 더해주면 됩니다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scan..

Insertion sort. 삽입정렬

주어진 숫자에서 두번째 자료(key)부터 앞의 자료들과 비교하며 삽입하여 정렬한다. 예시 ) 빨간색 : i 파란색 : j-1 8 5 6 2 4 key 5와 그 앞 8 비교 , swap 5 8 6 2 4 key 6과 그 앞 8 비교 , swap 5 6 8 2 4 key 6과 그 앞 5 비교 5 6 8 2 4 key 2와 그 앞 8 비교, swap 5 6 2 8 4 key 2와 그 앞 6 비교, swap 5 2 6 8 4 key 2와 그 앞 5 비교, swap 2 5 6 8 4 key 4와 그 앞 8 비교, swap 2 5 6 4 8 key 4와 그 앞 6 비교, swap 2 5 4 6 8 key 4와 그 앞 5 비교, swap 2 4 5 6 8 key 4와 그 앞 2 비교 2 4 5 6 8 import j..

ALGORITHM/이론 2021.01.04

Selection sort. 선택정렬

1. 주어진 숫자 중에 최솟값을 선택한다. 2. 최솟값과 맨 앞의 위치(정렬된 것을 제외한)를 변경한다. 3. 정렬된 것은 제외하고 1, 2 를 반복한다. 예시 ) 5 1 8 2 6 에서 최솟값을 찾는다. : 1 , 맨 앞의 5와 바꾼다. // 1회전 1 5 8 2 6 에서 맨 앞의 1을 제외한 최솟값을 찾는다 : 2 , 정렬된 것을 제외한 맨 앞의 5와 바꾼다. // 2회전 1 2 8 5 6 에서 정렬된 1,2 를 제외한 최솟값을 찾는다. : 5 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 3회전 1 2 5 8 6 에서 정렬된 1,2,5를 제외한 최솟값을 찾는다. : 6 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 4회전 1 2 5 6 8 마지막 원소는 자동으로 정렬된다. import j..

ALGORITHM/이론 2021.01.04

[프로그래머스] 모의고사

programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 문제 설명 : 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers 에서 1번, 2번, 3번 중에 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담으시오. 문제 풀이 : 완전 탐색으로 먼저 1번, 2번, 3번 수포자들의 배열을 만들어줍니다. check 배열은 수포자들의 정답을 각각 세주기 위한 배열입니다. 이후 answers 배열을 처음부터 끝까지 반복해서..