본문 바로가기

Problem Solving/SWEA147

[SWEA] 6692. 다솔이의 월급 상자 문제 다솔이가 다니는 회사는 이번 달부터 월급을 상자에 담아 주기로 했다. 상자는 Pi의 확률로 Xi만원이 들어있다. 이 때, 다솔이가 받을 수 있는 월급의 평균을 구하는 문제. 풀이방법 소스코드 package samsung; import java.util.*; public class s_6692 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); for(int t = 1; t 2020. 2. 23.
[SWEA] 5789. 현주의 상자 바꾸기 문제 1부터 N까지 0이 적혀진 상자가 있을 때, 일정한 규칙에 따라 상자의 번호를 바꾸는 문제 i번째 L과 R이 주어지면 L번째 상자부터 R번째 상자까지 i로 번호를 바꾼다. 다섯 개의 상자 0 0 0 0 0이 주어졌을 때, 첫번째 L과 R이 1, 3이라면 상자의 번호는 1 1 1 0 0 으로 바뀌고 두번째 L과 R이 2, 4라면 상자의 번호는 1 2 2 2 0 으로 바뀌게 된다. 풀이방법 주어진 N의 크기 만큼 배열을 만들고 i번째 명령어의 L과 R이 입력되었을 때, 배열의 L-1 부터 R-1의 원소를 i로 바꾸어 준다. 소스코드 package samsung; import java.util.*; public class s_5789 { public static void main(String[] args.. 2020. 2. 23.
[SWEA] 3260. 두 수의 덧셈 문제 1 ~ 10^100의 두 수 A, B가 입력될 때 두 수의 합을 구하는 문제 풀이방법 최대 100자리 까지 입력으로 들어오기 때문에 int나 long으로 계산할 수 없다. 따라서 배열로 각 자리 수를 입력받고 한 자리씩 계산해준다. 이 때, 각 자리수를 계산할 때 발생하는 올림수를 처리해 준다. 소스코드 package samsung; import java.util.*; public class s_3260 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); for(int t = 1; t b.length()) ? a.length() : b.length(); int[] .. 2020. 2. 23.
[SWEA] 5603. [Professional] 건초더미 문제 크기가 다른 n개의 건초더미가 있을 때, 이 건초더미들을 모두 같은 크기로 만드려고 한다. 최소 몇번을 움직여야 모두 같은 크기로 만들 수 있는 지 구하는 문제 풀이방법 1) 모든 건초더미의 합으로 평균을 구한다. n개의 건초 더미들은 평균과 같은 크기가 되어야한다. 2) 평균과 각 건초더미들의 차를 구한다. 3) 평균과 각 건초더미의 차의 합 / 2는 건초더미가 움직여져야할 최소한의 숫자이다. 한 번 옮길 때마다 두 개의 건초더미가 평균에 가까워지기 때문이다. 소스코드 package samsung; import java.util.*; public class s_5603 { public static void main(String[] args) { Scanner sc = new Scanner(Syst.. 2020. 2. 22.
[SWEA] 5601. [Professional] 쥬스 나누기 문제 N명의 사람이 1리터의 쥬스를 나누어 각자 잔에 따라서 마시고자 한다. 공평하게 쥬스를 나누기 위해 다음과 같은 방법으로 쥬스를 나눈다. 첫번째 사람이 원하는 만큼 한잔 따르고, 두번째 사람이 원하는 만큼 한잔 따르고, ..., N번째 사람이 남은만큼 한잔 따른다. 그 후 N번째 사람이 N개의 잔 중에 하나를 가져가고, N-1번째 사람이 남은 잔 중에 하나를 가져가고, 최종적으로 첫번째 사람이 마지막으로 남은 잔을 가져간다. 모든 사람은 목이 마른 상태이기 때문에, 최대한의 쥬스를 마시고자 최선의 전략을 쓴다고 가정하자. 이때 첫번째 사람부터 N번째 사람까지 각각 쥬스를 얼마씩 마시게 되는지 구하는 문제. 풀이방법 문제가 길어서 착각할 수 있지만 결국 최선의 전략은 1/n로 쥬스를 나누는 것. 소스.. 2020. 2. 22.
[SWEA] 5549. 홀수일까 짝수일까 문제 100자리 이하의 수가 주어질 때, 이 수가 짝수인지 홀수인지 구하는 문제 풀이방법 주어진 수는 100자리 이하이기 때문에 데이터 타입을 int나 long으로 정의하지 말고 문자열로 받는다. 그런 다음 맨 끝자리가 2의 배수인지 판별한다. 소스코드 package samsung; import java.util.*; public class s_5549 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); for(int t = 1; t 2020. 2. 22.
[SWEA] 5515. 2016년 요일 맞추기 문제 2016년의 월과 일이 주어질 때 요일을 맞추는 문제. 2016년 1월 1일은 금요일이고, 윤년이기 때문에 2월은 29일까지 있다. 풀이방법 1월 1일부터 입력된 월과 일까지의 총 일 수를 구하고, 7로 나누어 요일을 구한다. 소스코드 package samsung; import java.util.*; public class s_5515 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); int[] day = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int[] a = {4, 5, 6, 0, 1, 2, 3}; for.. 2020. 2. 22.
[SWEA] 5431. 민석이의 과제 체크하기 문제 전체 학생 수, 과제를 제출한 학생 수, 과제를 제출한 학생의 번호가 주어질 때, 과제를 제출하지 않은 학생의 번호를 오름차순으로 출력하는 문제 풀이방법 학생 수 + 1만큼의 배열을 생성하고 0으로 초기화한다. 그런 다음, 과제를 제출한 학생의 번호와 같은 배열인덱스에 1을 대입한다. 최종적으로 과제를 제출하지 않은 학생 번호와 같은 인덱스의 값은 0이 됨으로, 1부터 시작해 배열의 원소 값이 0인 인덱스를 출력한다. 소스코드 package samsung; import java.util.*; public class s_5431 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nex.. 2020. 2. 22.
[SWEA] 3809. 화섭이의 정수 나열 문제 화섭이는 324901239040와 같은 정수열이 주어졌을 때, 연속된 수들을 끊어 내어 차례로 새로운 수들을 만들어 낸다. 예를 들어 301이라는 수가 주어지면 3, 0, 1, 30, 01, 301와 같이 끊어내어 새로운 만들 수 있으며, 0부터 시작해서 차례로 수를 만들면 0, 1 까지만 만들 수 있다. 연속된 정수열이 주어졌을 때 끊어 내어 만들 수 있는 수를 차례로 정렬할 때, 만들 지 못하는 가장 작은 수를 구하는 문제 풀이방법 연속된 숫자열을 자리 수를 높여가며 뽑아 새로운 수를 만들되, 최대 자리 수가 1000자리까지 가능하므로 데이터 타입을 double로 정의한다. 뽑아낸 수를 sorting하고 차례로 카운트하여 연속된 정수가 아닐 때 값을 출력한다. 소스코드 package samsun.. 2020. 2. 22.
[SWEA] 1873. 상호의 배틀필드 문제 맵 정보 문자 의미 . 평지(전차가 들어갈 수 있다.) * 벽돌로 만들어진 벽 # 강철로 만들어진 벽 - 물(전차는 들어갈 수 없다.) ^ 위쪽을 바라보는 전차(아래는 평지이다.) v 아래쪽을 바라보는 전차(아래는 평지이다.) 오른쪽을 바라보는 전차(아래는 평지이다.) 사용자의 명령어 문자 동작 U Up : 전차가 바라보는 방향을 위쪽으로 바꾸고, 한 칸 위의 칸이 평지라면 위 그 칸으로 이동한다. D Down : 전차가 바라보는 방향을 아래쪽으로 바꾸고, 한 칸 아래의 칸이 평지라면 그 칸으로 이동한다. L Left : 전차가 바라보는 방향을 왼쪽으로 바꾸고, 한 칸 왼쪽의 칸이 평지라면 그 칸으로 이동한다. R Right : 전차가 바라보는 방향을 오른쪽으로 바꾸고, 한 칸 오른쪽의 칸이 평지라.. 2020. 2. 22.
[SWEA] 5356. 의석이의 세로로 말해요 문제 5개의 서로다른 길이의 문자열이 주어졌을 때, 이 문자열을 세로로 읽은 결과를 구하는 문제 예를 들어, A A B C D D a f z z 0 9 1 2 1 a 8 E W g 6 P 5 h 3 k x 라는 5개의 문자열이 주어지면, Aa0aPAf985Bz1EhCz2W3D1gkD6x 처럼 읽게 된다. 풀이방법 5개의 문자열을 입력받아 각 문자열의 i번 째 인덱스에 접근해가면서 출력한다. 이 때, i번 째 인덱스가 문자열의 길이보다 클 경우 다음 단어로 넘어간다. 소스코드 package samsung; import java.util.*; public class s_5356 { public static void main(String[] args) { Scanner sc = new Scanner(Syste.. 2020. 2. 21.
[SWEA] 5162. 두가지 빵의 딜레마 문제 두가지 종류의 빵의 가격과 은비가 가지고 있는 돈이 주어졌을 때, 은비가 최대한 살 수 있는 빵의 갯수를 구하는 문제 풀이방법 입력된 두 빵의 가격중 낮은 빵으로 최대한으로 산다 소스코드 package samsung; import java.util.*; public class s_5162 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); for(int t = 1; t 2020. 2. 21.