2563번: 색종이 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 문제 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오. 예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다. 입력 첫째 줄에 색..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 테스트 케이스는 10개 * 2. 첫 줄에 정점의 총 수 N * 3. 연산이 가능하면 1, 불가능하면 0 * 4. 출력: "#" + tc + " " + result * * >> 서브 트리가 없는데 숫자가 아니면 무조건 불가능 * >> 서브 트리가 있는데 사칙연산이 아니면 무조건 불가능 * >> st 길이 잰 뒤 2번째 문자 보기 >> 유효하지 않은 트리라면 0을 출력한 뒤 남은 식들은 건너뛴다. */ 코드 package com.ssafy.im; import java.io.BufferedReader; import java.io.File; im..
1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 ..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 10개의 테스트 케이스 * 2. 첫 줄에 테스트 케이스의 길이 N * 3. 테스트케이스 * 4. 후위 표기식으로 바꿔야 함 >> 스택 사용 * 5. +, *가 나오면 계산하고 아니면 숫자 저장하기 >> switch?? >> if * 6. 괄호가 있으면 ( 스택에 저장한 뒤 )가 뜨면 (가 나올 때까지 pop * 7. 출력: "#" + tc + " " + result; */ 계산기 2에서 괄호만 추가하면 된다 중요한 점은 (는 마지막에 pop으로 없애줘야 하고, 후위식을 계산할 때 N이 아닌 후위식의 length로 for문을 돌려야 한다 코..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 10개의 테스트 케이스 * 2. 첫 줄에 테스트 케이스의 길이 N * 3. 테스트케이스 * 4. 후위 표기식으로 바꿔야 함 >> 스택 사용 * 5. +, *가 나오면 계산하고 아니면 숫자 저장하기 >> switch?? >> if * 6. 출력: "#" + tc + " " + result; */ *가 +보다 우선순위가 높기 때문에 (s1.peek() == '*' || s1.peek() == '+')를 써 줬지만 이 문제는 *랑 +밖에 없기 때문에 굳이 쓰지 않아도 답은 맞게 나온다 코드 package com.ssafy.im; import j..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 테스트케이스 T * 2. 정수 N => N*N방을 만듦 * 3. N*N 방에 있는 수 나옴 * 4. +1만큼 이동하는데 * 5. 결과값이 같으면 처음 시작한 수가 작은 것으로 출력 >> * 6. 출력: "#" + tc + " " + 처음출발하는방번호 + " " + 최대몇개의방(자신포함) * * >> 함수 재귀 써서 풀기(dfs랑 비슷하게) */ 어려웠다... 대강 재귀로 풀기는 했는데 다음에 다시 풀어봐야 할 듯 코드 package com.ssafy.im; import java.io.BufferedReader; import java.io...
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 테스트 케이스 10개 * 2. 테스트 케이스 번호 * 3. 테스트 케이스 * 4. 2부터 시작해서 거꾸로 올라가기 * 5. 2방 탐색(왼, 오) 하면서 올라가다가 1 발견하면 감 * 6. 끝나면 다시 위로 올라감 * 7. 더 올라갈 곳이 없으면 y값 반환 * 8. 출력: "#" + T + " " + y */ 위에서 아래로 내려오는 게 아니라 2부터 시작해서 위로 올라왔다 재귀를 사용해서 풀었다 코드 package com.ssafy.im; import java.io.BufferedReader; import java.io.File; impor..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 /* * 1. 테스트 케이스 T * 2. 카드 개수 N * 3. 카드 이름이 공백으로 구분 * 4. 홀수일 경우 앞에 있는 부분에 +1 * 5. 출력 "#" + tc + result * * >> N 크기 반의 큐 두개에 넣고 하나씩 번갈아 출력 * >> 원본을 변경할 건지 유지할 건지? * >> 카드의 개수가 홀수일 때는 어떻게 할 건지? */ 큐를 두개 정의해서 앞의 카드, 뒤의 카드로 나누어 저장했다 홀수일 경우에는 2로 나누면 정수가 나오기 때문에 +1을 한 뒤 2로 나누었다 arr 하나를 사용해서 풀어보려고 했는데 런타임에러... 코드 packa..
2605번: 줄 세우기 점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 www.acmicpc.net 문제 점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 먹게 된다. 어떻게 하면 이러한 상황을 바꾸어 볼 수 있을까 고민하던 중 선생님이 한 가지 방법을 내 놓았다. 그 방법은 다음과 같다. 학생들이 한 줄로 줄을 선 후, 첫 번째 학생부터 차례로 번호를 뽑는다. 첫 번째로 줄을 선 학생은 무조건 0번 번호를 받아 제일 앞에 ..
2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면..