개요요즘에는 알고리즘 문제풀이 연습에 시간을 많이 할애하고 있습니다. 한동안 연습을 등한시했더니, 완전 기초적인 지식도 헷갈려서 골치 아프네요. 특히나 언어를 Java로 바꾸면서 언어적 특성도 같이 공부하느라 더 머리가 아픕니다. 아무튼, 저는 백준과 프로그래머스 두 플랫폼을 주로 사용하고 있습니다. 개인적으로, 프로그래머스 문제들은 문제 자체를 이해하는 능력과 구현 능력이 필요한 스타일이라면, 백준 문제들은 대부분 알고리즘 자체에 대한 이해를 필요로 하는 스타일이라고 느낍니다. 그래서 둘 다 골고루 많이 연습해 보는 게 좋은 것 같습니다. 두 플랫폼간의 큰 차이점이 한 가지 더 있습니다. 문제에 대한 테스트케이스 데이터 입력 방식이 다르다는 점인데요.프로그래머스 방식은 데이터 입력을 함수의 매개변수로..
문제 1417번: 국회의원 선거첫째 줄에 후보의 수 N이 주어진다. 둘째 줄부터 차례대로 기호 1번을 찍으려고 하는 사람의 수, 기호 2번을 찍으려고 하는 수, 이렇게 총 N개의 줄에 걸쳐 입력이 들어온다. N은 50보다 작거나 같www.acmicpc.net 풀이 단순 구현처음 문제를 이해하고 생각나는 대로 구현을 해봤는데 한 번에 통과했다. [소스 코드]N = int(input())arr = []count = 0for _ in range(0, N): arr.append(int(input()))if N > 1: # 단일 후보일 땐 매수할 필요가 없다. while True: _max = max(arr) if _max > arr[0]: idx..
문제N개의 수로 이루어진 수열 A1, A2, ..., AN이 주어진다. 또, 수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다. 연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다.우리는 수와 수 사이에 연산자를 하나씩 넣어서, 수식을 하나 만들 수 있다. 이때, 주어진 수의 순서를 바꾸면 안 된다.예를 들어, 6개의 수로 이루어진 수열이 1, 2, 3, 4, 5, 6이고, 주어진 연산자가 덧셈(+) 2개, 뺄셈(-) 1개, 곱셈(×) 1개, 나눗셈(÷) 1개인 경우에는 총 60가지의 식을 만들 수 있다. 예를 들어, 아래와 같은 식을 만들 수 있다.1+2+3-4×5÷61÷2+3+4-5×61+2÷3×4-5+61÷2×3-4+5+6식의 계산은 연산자 우선 순위를 무시하..
문제N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.N개의 자연수 중에서 M개를 고른 수열 입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다. 출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다. 풀이def dfs(depth): if depth == M: # 탈출조건 print(' '.join(map(str, visited)))..
문제N개의 정수가 주어진다. 이때, N개의 정수를 오름차순으로 정렬하는 프로그램을 작성하시오.같은 정수는 한 번만 출력한다. 입력첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다.이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 출력첫째 줄에 수를 오름차순으로 정렬한 결과를 출력한다. 이때, 같은 수는 한 번만 출력한다. 풀이import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.Scanner;public class Main { public static void main(String[] args) { //Buff..
문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다.이 수는 10,000보다 작거나 같은 자연수이다. 출력첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { // 카운팅 정렬 => 입력받을 숫자의 최소~최대 범위를 알고 있을 때 사용하면 빠른 성능을 기대할 수..
문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이 1import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = scanner.nextIn..
문제흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다.사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다. 입력 첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0) 출력점 (x, y)의 사분면 번호(1, 2, 3, ..