💡Problem Solving 182

[BOJ 1655] 가운데를 말해요 (Java)

문제 https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 백준이는 동생에게 "가운데를 말해요" 게임을 가르쳐주고 있다. 백준이가 정수를 하나씩 외칠때마다 동생은 지금까지 백준이가 말한 수 중에서 중간값을 말해야 한다. 만약, 그동안 백준이가 외친 수의 개수가 짝수개라면 중간에 있는 두 수 중에서 작은 수를 말해야 한다. 예를 들어 백준이가 동생에게 1, 5, 2, 10, -99, 7, 5를 순서대로 외쳤다고 하면, 동생은 1, 1,..

[BOJ 11286] 절댓값 힙 (Java)

문제 https://www.acmicpc.net/problem/11286 11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 PriorityQueue를 사용하면 된다. Comparator로 정렬 조건을 명시해주었다. 소스코드 package heap; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; impo..

[BOJ 1927] 최소 힙 (Java)

문제 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 PriorityQueue로 풀면 된다. PriorityQueue는 정수형의 경우 기본정렬이 오름차순이므로 따로 Comparator를 만들어줄 필요는 없다. 소스코드 package heap; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; impo..

[프로그래머스] 구명보트 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/42885# 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 풀이 프로그래머스는 문제를 꼼꼼히 읽어야 한다! 구명 보트의 최대 인원이 2명인 것을 간과하고 구현하는 바람에 시간 낭비를 한참 했다. 예시 1) limit: 100 [50, 30, 70, 50] people을 오름차순으로 deque에 넣는다. 30, 50, 50, 70 가장 큰 값과 가장 작은 값을 더한다. 70 + 30 더한..

[프로그래머스] 숫자 게임 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/12987 코딩테스트 연습 - 숫자 게임 xx 회사의 2xN명의 사원들은 N명씩 두 팀으로 나눠 숫자 게임을 하려고 합니다. 두 개의 팀을 각각 A팀과 B팀이라고 하겠습니다. 숫자 게임의 규칙은 다음과 같습니다. 먼저 모든 사원이 무작위로 programmers.co.kr 풀이 설명은 복잡하게 해놨는데, 문제는 굉장히 쉽다. A와 B를 오름차순으로 정렬하고 B를 기준으로 순회하면서 현재 B값이 A보다 같거나 작을 경우 B의 다음 index 체크 현재 B값이 A보다 큰 경우를 A의 index를 증가 A: 1, 3, 5, 7 B: 2, 2, 6, 8 2 -> 6 -> 8 2는 3보다 작으므로 skip 순회가 끝난 ..

[BOJ 9375] 패션왕 신해빈 (Java)

문제 https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 풀이 예시 1) hat headgear sunglasses eyewear turban headgear headgear의 경우의 수: 3 (hat을 쓴다, turban을 쓴다, 안 쓴다) eyewear의 경우의 수: 2 (sunglasses를 쓴다, 안 쓴다) 3*2 = 6 모두 안쓸 경우 알몸이므로 ..

[BOJ 3036] 링 (Java)

문제 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 풀이 큰 링의 반지름과 나머지 링 반지름의 최대 공약수를 각각 구하여 나눈다. 유클리드 호제법을 사용한다. 소스코드 package math; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.StringTokeni..

[BOJ 1037] 약수 (Java)

문제 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 풀이 ex) 24의 약수 2 3 4 6 8 12 2*12 = 3* 8 = 4*6 = 24 어떤 수의 모든 약수가 주어졌 때는 약수의 최소값과, 최대값을 곱하면 해당 수를 구할 수 있다. 소스코드 package math; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringToken..

[BOJ 13305] 주유소 (Java)

문제 https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 풀이 Greedy알고리즘을 사용해 풀 수 있는 문제이다. 무조건 싼 기름을 채워넣으면 해결할 수있다. 1번 도시 -> 2번도시 1번 도시의 1리터 당 주유비용은 5원이며 1번과 2번도시 간 거리는 2이다. 1번 도시에서는 무조건 주유를 해야 한다. 총비용 = 5*2 = 10 2번 도시 -> 3번 도시 2번 도시에서 3번 도시로 가기 위해 기름을 주유해야 하는데 1번 도시에서 미..

[BOJ1541] 잃어버린 괄호 (Java)

문제 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 마이너스 기호가 한 번이라도 나온다면 그 뒤에 나오는 숫자는 모두 음수로 더해질 수 있다. 5+10-(20+30+50)-(20+30) 단 초항은 양수이므로, -가 처음 나오기 전까지의 숫자는 양수로 더해져야 함 5+10-(20+30+50)-(20+30) 5+10 은 양수로 더하고 나머지 숫자는 음수로 더하여 합계를 내면 된다. 만약 - 기호가 없다면 모두 양수이므로 모든 숫자를 더..