20151020
*이문제는 + 연산자와 - 연사자를 알고 있어야 합니다.
*이문제는 dovelet 에 있는 알고리즘 문제입니다.
블럭 색칠하기/paintblock
프로그램 명: paintblock
크기가 1*1*1 인 정육면체를 가지고 가로 A 세로 B 높이 C 인 직육면체를 만든 후 A×B×C (2≤A,B,C≤120)의 블록 겉면에 페인트를 칠하였다.
아래의 그림은 3x3x3 인 경우의 보기이다.
이 때 2 개의 면만 페인트가 칠해진 블록의 개수를 구하는게 문제이다. (블록은 직육면체이다)
입력
A , B , C 가 차례대로 입력된다. A 는 가로, B 는 세로, C 는 높이이다.
출력
2개의 면만 페인트가 칠해진 블록의 개수를 첫째 줄에 출력한다.
입출력 예
입력 3 3 3 출력 12
출처:tncks0121(박수찬)
문제 풀이
1) 풀이
import java.io.PrintStream; import java.util.Scanner; public class Main { Scanner sc = new Scanner(System.in); PrintStream p = System.out; int a, b, c; public static void main(String[] args) { Main ma = new Main(); ma.input(); ma.result(); } void input(){ a = sc.nextInt(); //가로 b = sc.nextInt(); //세료 c= sc.nextInt(); //높이 } void result(){ a = a-2; b = b-2; c = c-2; p.println((a+b+c)*4); } }
*짧게 코딩하는것도 좋지만 저는 함수와 객체 지향개념을 쓰고 싶어서 이렇게 코딩 했습니다.
2개의 면만 페인트가 칠해진 블록을 먼저 이해하셔야 합니다.
그림을 그려보면 쉽게 이해가 되는데요.
빨간색 부분중에서 큐브의 각 꼭지점은 3면에 페인트가 칠해지기 때문에 총 8개의 꼭지점은 제외 됩니다. 그리고 각각의 면을 보면 블록 테두리 가운데 정사각형 부분을 보면 이 면은 1개의 면만 칠해지기 때문에 제외됩니다.
결국 2개의 면에 페인트가 칠해지는건 그림에서 가장자리 부분인 흰색 블록이죠.
그럼 흰색 블록을 구하려면 각각의 x축 y축 z축 에서 양끝에 있는 블록 1개씩 총 2개를 제외하면 블록의 개수를 알 수 있습니다.
그리고 각 축 마다 4개의 흰색 부분 블록이 있습니다. 가로 x축, 세로 y축, 높이 z축이 있으니깐 각각 4배수를 구해줘야 하죠
그럼 이제 코딩을 해보면
우선 3개의 정수 값을 입력 받기 위해서 a, b, c 변수 3개를 선언을 하고 그 변수에 입력값을 받습니다.
그 다음 result()함수에서
각 축의 개수에서 양끝 블록 총 2개를 빼줍니다. 그리고 각 축마다 4개의 같은 형식의 블록이 있기 때문에 4배수를 해주면 됩니다.
'알고리즘(dovelet 문제풀이) > 1층' 카테고리의 다른 글
논문인용/coci_faktor(논문인용 알고리즘) (0) | 2015.10.21 |
---|---|
r2/r2(r2/r2 알고리즘) (0) | 2015.10.21 |
퓨즈/fuse(퓨즈 알고리즘) (0) | 2015.10.20 |
손해 본 금액/business(손해 본 금액 알고리즘) (0) | 2015.10.20 |
인공지능 시계/koi_watch(인공지능 시계 알고리즘) (0) | 2015.10.19 |