본문 바로가기

자바

(73)
백준 20053 최소,최대2 (JAVA) 문제 https://www.acmicpc.net/problem/20053 20053번: 최소, 최대 2 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. www.acmicpc.net 코드 package com.company; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; class Main { public static void main(String[] args) throws IOException { StringBuilder sb = new StringBuilder(); BufferedReader ..
백준 1212 8진수 2진수 (JAVA) 문제 https://www.acmicpc.net/problem/1212 1212번: 8진수 2진수 첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다. www.acmicpc.net 코드 package com.company; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class Main{ public static void main(String[] args) throws IOException { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStre..
[백준] 2580 스도쿠 (JAVA) https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 풀이 문제 자체가 어렵지는 않으나 풀이방법에 대해서 조금 고민을 하여 푼 문제이다. 스도쿠의 룰은 잘 알다시피 가로세로 그리고 3*3이 되어있는 칸에서 중복을 허용하지 않는 선에서 수를 채워넣는 것이다. 그리하여 나는 81칸 전부를 차례대로 순회하며 만약 빈칸이 있다면 해당 칸에 들어갈수 있는 수를 찾은뒤 arr에 집어넣고 재귀적으로 호출해 나가며 풀이를 진행했다. 여기서 살짝 헷갈릴는 점은 적정..
[백준] 18870 좌표 압축 (JAVA) https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 풀이 해당 문제는 가만히 보면 그냥 정렬하였을경우 해당 인덱스의 수보다 작은 수가 몇개가 있냐는 말과 같다. 그렇기 나는 기존 입력값이 들어가있는 origin배열과 정렬되어있는 sort배열 마지막으로 map을 만들어주었다. 우선 처음으로는 입력값을 origin배열과 sort배열에 입력을 받고 Arrays.sort메소드를 이용해 sort를 정렬해준다..
[백준] 11723 집합(java) https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 풀이 해당 문제는 기본적인 set에 대해서 물어보는 문제이다. 문제에서 입력값을 주는대로 구현하는되는 문제라서 크게 어렵지는 않을것이라고 생각된다. 자세한거는 코드를 보면 이해가 갈것이다. 필자는 두가지 방식으로 구현했는데 우선 첫번째 코드는 try catch를 이용해 오류가 날경우 처리를 해 코드의 반복을 줄인것이고 두번째 코드는 값의 할당을 switch문 내부를 타고 들어갔을 경우 할당하는 방식을 이용해 오류를 처리한것이다. 이..
[백준] 2606 바이러스 (JAVA) https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 풀이 이 문제는 그래프를 그리고 DFS혹은 BFS중 원하는것으로 하나를 선택해 탐색해 방문한 노드의 개수를 구하면된다. 나는 여기서 ArrayList속 ArrayList를 넣어 인접연결리스트를 구현하여 그래프를 구성했다. 그리고 만들어지 그래프에서 (1에서 시작하여) 현재위치의 노드에서 인접한 노드들의 번호를 큐에 넣는다. 그리고 큐에서 차례대로 뽑아서 만약 방문하지 않았다면 방문처리를 하고 위의 작업..
[프로그래머스] 로또의 최고순위와 최저순위 (JAVA) https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 풀이 이 문제는 그렇게 어려울것이 없는 문제다 문제를 요약하자면 비어있는수를 통해 당첨될수있는 가장 높은등수와 가장 낮은 등수를 구하면 된다. 즉 가장 높은등수는 0이 전부 당첨된 수라는것이고 가장 낮은 등수는 0이 전부 당첨되지 않은 등수라는 것이다. 그리 어려운 문제가 아니니 코드를 보면 금방 이해가 될것이다. ..
[백준] 1927 최소 힙 (JAVA) https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 이 문제는 힙을 이용해 구현하면 되는 문제로 나는 자바를 이용하기 때문 힙을 이용해 구현하였다. 풀이 방법은 문제에서 시킨대로 맨 처음 입력받느 N만큼 입력을 받고 이 때 만약 입력받은 값이 0이라면 힙에서 우선순위가 가장 높은 수를 뽑아서 출력하면 된다. 만약 힙이 비어있다면 0을 출력한다. 그리고 0이 아닌 임의의 수가 입력된다면 힙에 추가한다. import java...
[백준] 1620 나는야 포켓몬 마스터 이다솜 (JAVA) https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 풀이 이 문제는 자바의 해시맵으로 간단히 구현할수있다. 우선 입력값을 차례대로 해시맵에 넣고 그다음 문제에서 주는 key값과 value값에 알맞게 출력하면된다. 여기서 문제는 key값을 주어졌을 경우는 hashMap의 get을 이용해 꺼내면 되지만 value가 주어졌을경우는 따로 할수있는방법이 없다 물론 key set을 꺼내어 하나씩 맞추어 가면서 출력하면 시간초과로 ..
[백준] 9905 1, 2, 3 더하기 (JAVA) https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 위의 문제는 기본적인 dp문제이다. 우선 접근법은 간단하다. 우리는 어떠한 수 x가 들어온다고 하였을경우 x-1, x-2, x-3을 한다. 그 이후 각각의 수가 만약 이전에 계산하여 구했던 적이 있다면 그대로 dp배열에 있는 값을 반환해준다. 예를 들어 4를 x라고 하였을 경우 우리는 3 + 1, 2 + 2, 1 +3을 하여 경우의 수를 구하게 된다. 이때 각각의 연산값을 자세히 보면 3 + 1의 경우는 1, 2, 3만으로 3을 만들었는 경우에서 1을 각각 더하면 4가 되기에 우리는 dp[..