[백준,BOJ 10992] 별 찍기-17( JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 이번 문제는 별 찍기-16 문제와 아주 유사한 문제였다. 예제 출력에서 규칙성을 찾아보면, 먼저 마지막 줄은 항상 모든 별을 출력하고, 마지막 행 이전의 행들은 찍었다 안 찍었다를 반복하는 것이 아닌, 특정 범위의 양 끝 부분만 별을 찍는 것이다. 예제 출력 4를 보면, 별 찍기-16과 마찬가지로 n번 째 열에 별을 한 개 찍고 행이 증가할 수록 n을 기준으로 양방향으로 +j씩 별의 범위가 증가하게 된다. 그렇다면 이 범위에서 양 끝에 속하는 열에만 별을 찍어주면 된다. for(int i=0;i
[백준,BOJ 10991] 별 찍기-16( JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 일반적인 별 찍기 문제와는 다른 문제였다. 우선 처음 봤을 때, 주어진 n에 따라 행의 개수가 정해진다는 사실은 알 수 있었는데, 열의 개수를 알 수가 없어서 알아내는 과정이 필요했다. 우선 n이 1인 경우는 1개만 출력하는 것을 정해놓고, 2일 때 열의 개수가 3개, 3일 때 열의 개수가 5개, 4일 때 열의 개수가 7개.... 식으로 간다는 것을 보면, 열의 개수 변화는 1 -> 3 -> 5 -> 7...로 변화하는데, 단순히 2개씩 증가한다는 것을 알 수도 있지만 n의 값에 따라 열의 개수가 정해져야 하므로 n과 함께 고려해보면 2*n -1개의 열이 생성되는 것이다. 이제 열의 개수를 알았으니 규칙을 찾아야 하는데, 예제 출력을 노트에 그려보면, 각 n번 째 자리에 하나를 찍고 출발을 하..
[백준,BOJ 2446] 별 찍기-9( JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-해법 별 찍기 문제-9이다. 솔직히 별 찍기 문제는 무언가 특별한 기술이 필요한 것이 아니라, 예제 출력의 모양을 본 후 규칙성을 찾아 구현해야 하는 것 같다. 이번 문제의 경우에는 눈에 딱 봐도 앞 뒤로 한 개씩 빈칸이 증가하는 것을 알 수 있다. 1번째 줄에서 앞 뒤로 0개의 빈칸, 2번째 줄에서 앞 뒤로 1개의 빈칸.... 식으로 가는 규칙성을 찾았으면 이제 이를 토대로 구현해보면 된다. 필자는 보통 중앙을 포함해 윗부분을 구현하고 아랫부분을 별도로 구현한다. //윗부분 구현 for(int i=0;i
[백준,BOJ 2522] 별 찍기-12 (JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-해법 앞선 문제였던 별 찍기-8 문제와 동일한 풀이로 해결할 수 있다. 윗부분에 중간까지 포함해 출력하고, 아랫부분은 별도로 출력하는 것이다. //윗 부분 반복 for(int i=1;i
[백준,BOJ 2445] 별 찍기-8(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-해법 이번 별 찍기에서의 규칙성은 1번째 줄은 첫 번째 열과 마지막 열에 1개, 두 번째 줄은 2개,.... 이런 식으로 가게 된다. 필자의 경우에는 윗부분과 아랫부분으로 나누어서 생각하였고, 윗부분에 중앙 부분까지 포함이 되어있다. // 윗 부분 반복문 for(int i=0;i
[백준,BOJ 2442] 별 찍기-5(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-해법 이 문제의 경우 최하단이 2*n-1개의 별을 찍는다는 것을 알 수 있다. 즉, 각 열의 중앙부터 첫 줄은 중앙 +- 0에 , 두 번째 줄은 중앙+-1에, 세 번째는 중앙+-2에.... 식으로 별을 찍어주면 되는데 주의사항은 문제에서는 언급이 되어있지 않지만, 각 별을 찍을 때 별이 마지막이 되어야 한다. 무슨 이야기냐면, [ *] [ ***] [ *****] [ *******] [*********] 식으로 앞자리는 공백으로 채워줘야 하고 별 이후로는 공백을 찍으면 안 된다. 이것 때문에 많은 분들이 출력 형식 오류처리를 받는 것 같다. 이 부분만 주의해주면 된다. import java.util.*; public class Main { public static void main(String[] ar..
[백준,BOJ 2441] 별 찍기-4(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-해법 2차원 배열을 사용하여도 되고, 그냥 출력만 해주어도 된다. 그러나 2차원 배열을 사용하면 메모리의 낭비와 2번 탐색하는 문제점이 있기 때문에 단순히 2중 for문만을 이용해서 해결할 수 있다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); for(int i=n;i>0;i--) { for(int j=0;j
[백준,BOJ 2440] 별 찍기-3(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 정보처리기사를 준비하면서 많이 봤던 별 찍기 문제였다. 2차원 배열을 구현해도 되지만, 메모리 낭비이므로 그냥 출력하는 방식으로 구현하려 했다. 문제의 특징으로는 예제 출력에서 볼 수 있듯이, 각 행마다 N-행의 값의 개수만큼 별을 찍는다. 예를들어 N이 5일 경우, 첫 번째 행은 0번 부터 시작하여, 5-0번 열을 반복한다. 행이 1일 경우는 5-1인 열을 4번만큼 반복한다... 이런식으로 구현해도 되고 반대로 행을 5부터 시작하여 행은 감소시키고 열은 행까지 반복하는 등 여러가지 구현 방법이 가능하다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(..
[백준,BOJ 1924] 2007년(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 특정 일수가 주어지고 해당 일자의 요일을 구하는 문제이다. 이런 유형의 문제는 처음 풀어봐서 어떻게 풀어야 할지 감을 잡지 못했는데, 잘 생각해보면 1주일이 지날 때마다 7씩 증가하므로, 1/1이 월요이라면, 8일도 월요일, 15일도 월요일.... 식으로 가게 된다. 그러므로 특정 일자 % 7로 어느 요일에 속하는지 알 수 있게 된다. 그렇다면 특정 월과 일이 총 며칠인지 어떻게 구해야 할지 고민해보았는데, 생각해보면 간단하다. 예를 들어 3월 6일이라고 가정한다면 1월과 2월의 총일수를 6일과 더해주면 된다. 각 월의 총일수는 문제에서 주어지므로 구현이 가능해진다. -해법 import java.util.*; public class Main { static int month_Day[] = {0..
[백준,BOJ 11729] 하노이 탑 이동 순서(JAVA 구현)
·
CodingTest/백준 온라인 저지(BOJ)
-내 생각 하노이 탑의 경우 개념은 알겠는데, 재귀 호출의 늪에 빠져버려서 도저히 머릿속으로 상상이 어렵다.. 그래서 그냥 공식처럼 외우기로 했다.. -해법 하노이 탑을 해결하기 위해서 1번 타워에서 3번 타워로 옮기는 것이 기본으로 수행 알고리즘은, n-1개의 원판을 1->3->2 순으로 타워 롤 옮기고, 2->1->3 순으로 3번에 다시 쌓으면 된다고 한다. 그렇기 때문에 재귀 호출을 통해 인자만 변경하면서 전달해주면 된다. import java.util.*; public class Main { static int n,cnt=0; static StringBuilder sb = new StringBuilder(); static void hanoi(int n,int from,int by,int to) {..