문제 풀이/Java
[백준] 17425번 - "약수의 합" (Java)
[백준] 17425번 - "약수의 합" (Java)
2021.02.25www.acmicpc.net/problem/17425 17425번: 약수의 합 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net - 난이도 : 골5 약수 개념이 가미된 전형적인 테스트 케이스 문제입니다. 몇 가지 사항만 주의해준다면 충분히 풀 수 있습니다. 시간 복잡도는 해당 자연수의 약수의 합을 저장(fx)하는 코드 NlgN, 이전 약수의 합들을 저장(dp)하는 코드 N, 테스트 케이스(while) 갯수만큼 코드를 진행하는 T, 즉, NlgN + N + T에서 N은 NlgN보다 작..
[백준] 15661번 - "링크와 스타트" (Java)
[백준] 15661번 - "링크와 스타트" (Java)
2021.02.22www.acmicpc.net/problem/15661 15661번: 링크와 스타트 첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100 www.acmicpc.net 난이도 : 실버1 백준의 스타트와 링크 문제와 많이 유사합니다. 차이점은 두 팀의 인원수가 딱 절반으로 나눠떨어지는 것이 아닌, 최소 1명 이상만 있으면 팀으로 간주하고 두 팀의 능력치 차이를 구하는 것입니다. 해당 문제의 시간 제한은 2초입니다. 약 2억개의 데이터 안에서 풀 수 있습니다. 문제의 조건에 따른 최악의 시간복잡도는 (4 ≤ N ≤ 20, N은 짝수)에..
[백준] 14889번 - "스타트와 링크" (Java)
[백준] 14889번 - "스타트와 링크" (Java)
2021.02.21www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 난이도 : 실버3 브루트 포스 문제입니다. 주어진 문제의 시간 제한은 2초입니다. 즉 약 2억개의 데이터 안에서 풀 수 있습니다. 문제의 조건에 따른 최악의 시간복잡도는 (4 ≤ N ≤ 20, N은 짝수)에서 한 데이터를 선택할 수있는 경우와 없는 경우 2가지로 N개를 원소를 가진 배열을 탐색하는 것이므로, 2^20 = 1,048,576. 충분히 모든 경우를 탐색해도 풀 수 있는 문제입니다. 문제의 대표적인 조건은 각 팀은 N/2의..
[백준] 1759번 - "암호 만들기" (Java)
[백준] 1759번 - "암호 만들기" (Java)
2021.02.20www.acmicpc.net/problem/1541www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 난이도 : 골드5 조합과 브루트포스 연습용으로 좋은 문제인 것 같습니다. 문제에 주어진 대표적인 조건에 맞춰서 문제를 해결해 나가면 풀 수 있습니다. 1. 알파벳이 암호에서 증가하는 순서. 2. 최소 한 개의 모음, 최소 두 개의 자음. 첫 번째 조건은 Arrays.sort()로 해결하였습니다. 두 번째 조건은 주어진 입력 L길이의 맞게 암호가 구성되어지면 전역 변수..
[백준] 1514번 - "잃어버린 괄호" (Java)
[백준] 1514번 - "잃어버린 괄호" (Java)
2020.09.04www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 백준에서 측정한 난이도는 실버2입니다. 규칙만 찾는 것이 중요한 문제입니다. '-'를 기준으로 문자열을 파싱을 하고 그 안의 있는 수들은 모두 더해주기만 하면 됩니다. 첫 번째 배열인 arr[0]은 무조건 양수 혹은 '+'기호가 포함된 수식이 됩니다. 그 이후에 배열의 값들은 cal() 메서드를 통해서 더해주기만 하면 되지만 '-'를 기준으로 파싱해주었기 때문에 arr[0]의 값에서 전부 빼주어야 합니다...
[프로그래머스] "최대공약수와 최소공배수" (Java)
[프로그래머스] "최대공약수와 최소공배수" (Java)
2020.07.17https://programmers.co.kr/learn/courses/30/lessons/12940 코딩테스트 연습 - 최대공약수와 최소공배수 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 programmers.co.kr 유클리드 호제법을 알면 쉽게 풀 수 있는 문제입니다. 알고리즘이 정해져 있는 문제는 특정 알고리즘을 아예 외우는 것도 방법이라고 생각합니다. http://lonpeach.com/2017/11/12/Euclidean-algorithm/ - void solution(int n, int m) 파라미터는 입력 받고, 입력 받은 두 수를 ..