본문 바로가기

전체 글

SWEA 10726. 이진수 표현 자연수 N과 10진수 숫자가 주어질 때, 10진수 숫자를 2진수로 표현했을 때 끝의 N비트가 모두 1인지 아닌지를 판별하는 문제이다. 끝의 N이 모두 1이려면 2로 N번 나누면서 모두 나머지가 1이어야 한다.outer: for (int tc = 1; tc 결과 코드는 다음과 같다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = n.. 더보기
SWEA 10761. 신뢰 오렌지, 블루 두 로봇이 다른 복도에서 1번 위치부터 시작해서 정해진 순서대로 버튼을 누르기 위해 이동, 버튼 누르기, 가만히 있기를 수행할 때 소요되는 최소 시간을 구하는 문제이다. 버튼은 O x, B x와 같은 형태로 주어지는데, O x는 오렌지가 해당 버튼을 눌러야 함을 뜻하고, B x는 블루가 해당 버튼을 눌러야 함을 뜻한다. 서로 다른 복도에서 오렌지 혹은 블루가 버튼을 누르는 동안에도 이동할 수 있으므로 각각의 로봇에 명령을 저장하고 명령의 순서대로 이동하면서 다른 로봇도 최대한 이동시킨다. 이를 위해 로봇별로 List로 명령의 순서와 위치를 저장하여 더 빠른 명령을 수행하게 한다. 오렌지 혹은 블루의 남은 명령이 없다면 남은 명령을 가진 로봇만 수행하면 된다. 둘 다 있다면 둘 중 명령 번호.. 더보기
SWEA 10762. 사탕 나누기 사탕이 담긴 각각의 사탕 봉지들을 두명이서 나누어 사탕을 최대한 공평하게 나눌 때, 같은 기준이 XOR 합일 때 한쪽이 가질 수 있는 실제 합의 최댓값을 구하는 문제이다. 같을 수 없는 경우, NO를 출력한다. 나누었을 때 XOR합이 같은 경우는 모든 사탕 봉지 안에 들어있는 사탕의 수를 XOR 했을 때 0이어야 한다. 즉 XOR 합이 0이 아니면 같을 수 없으며, 한쪽이 가질 수 있는 실제 합의 최댓값은 모든 사탕의 수 - 가장 장은 사탕 봉지의 사탕 수 이다.long totalSum = 0;int xorSum = 0;int minCandy = Integer.MAX_VALUE; for (int i = 0; i 결과 코드는 다음과 같다.import java.io.Buffered.. 더보기
SWEA 10804. 문자열의 거울상 b, d, p, q로 이루어진 문자열을 거울에 비치면 어떻게 변하는지 출력하는 문제이다. b는 d로, d는 b로, p는 q로, q는 p로 바뀌며 위치또한 반사될 경우 뒤집히게 된다. 맨 처음부터 끝까지 문자열을 순회하면서 뒤집은 위치에 뒤집은 문자로 변경해주면된다. 이를 위해 StringBuilder의 setChatAt을 사용하였다.String line = br.readLine();StringBuilder mirror = new StringBuilder(line);for(int i=0; i 결과 코드는 다음과 같다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Sol.. 더보기
SWEA 10912. 외로운 문자 알파벳 소문자 만으로 이루어진 문자열이 주어질 때, 이 문자열에서 같은 두 문자들을 짝짓고 남는 문자가 무엇인지 구하는 문제이다. 각각의 문자의 갯수가 짝수이기만 하면 되므로 배열에 a~z의 갯수를 저장한 후 순회하면서 짝수인지 확인하고 아니라면 해당 문자를 추가하고 모두 짝지어진다면 Good을 출력한다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new .. 더보기
SWEA 10908. 짝수인 이항 계수 음이 아닌 정수 N이 주어진다. 이 때, N + 1개의 이항 계수(N 0)~(N N) 중에서 짝수인 것의 개수를 구하는 문제이다. N을 이진수로 할 때 비트의 수를 c라고 하면 어떤 정수 N이 주어졌을 때, (N 0)~(N N)의 총 N+1개의 이항 계수 중 홀수의 개수는 2^c 개 이다. 전체 갯수에 2^c 를 빼주면 된다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new Buffe.. 더보기
SWEA 10965. 제곱수 만들기 어떤 자연수 A가 주어진다. 여기에 자연수 B를 곱한 결과가 거듭제곱수가 되는 최소의 B를 구하는 문제이다. 거듭제곱수는 소수인 약수가 짝수갯수 만큼 곱해진 형태이다. 주어진 수를 소인수분해해야 하므로 먼저 주어진 A의 범위 내의 모든 소수를 찾는다. 이후, 순서대로 순회하면서 나누어떨어질 경우 안 나누어질 때 까지 나누었을 때 나눈 횟수가 짝수가 아니면 해당 수를 한 번 더 곱해주어야 한다. 이를 계속 누적곱해준 수가 최소 B가 된다.boolean[] isPrime = new boolean[maxSqrt + 1];for (int i = 2; i primes = new ArrayList();for (int i = 2; i int A = Integer.parseInt(br.readLine().trim().. 더보기
SWEA 10966. 물놀이를 가자 2차원 격자에서 땅에서 가장 가까운 물까지의 거리의 합을 구하는 문제이다. 물을 기준으로 모든 격자를 방문하면서 거리를 저장 후 이동한다. BFS를 적용하며 거리를 저장하면서 방문한 곳은 다시 방문하지 않게 한다.int sum = 0;int[][] distances = new int[n][m];Deque queue = new ArrayDeque();for(int i=0; i= n || nc = m) continue; if(nr >= 0 && nr = 0 && nc 결과 코드는 다음과 같다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;imp.. 더보기