백준 알고리즘 문제 5

[2447] 별 찍기 - 10 - Java

https://www.acmicpc.net/problem/2447 문제 해석 처음 문제를 봤을 때 이전에 본 적 없던 별 찍기 방식이었다. 입력값 N은 항상 3의 거듭제곱이고 N × N 정사각형에 특정한 패턴을 찍는 문제이다. 특정한 패턴은 크기 3인 정사각형 가운데가 비어있게 별을 찍는 형태로 위와 같은 패턴을 띄고 있다. N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N / 3)×(N / 3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. N이 27인 경우 결과는 다음과 같다. 패턴 문제이기 때문에 27 크기에서 패턴을 찾을 수 있다. N = 3일 때는 가운데 공백을 기준으로 *이 둘러싸여있는 형태라면 N = 27일 때는 N = 9 패턴이 둘러 싸고 있다는 것을 알 수 있다..

[10870] 피보나치 수 5 - Java

https://www.acmicpc.net/problem/10870 문제 해설 재귀 함수 예제에서 팩토리얼과 더불어 많이 나오는 문제이다. 풀이 [8] 캐시 배열 선언. 0은 사용하지 않으므로 1부터 n번까지 쓸 수 있게 n + 1개의 배열 크기로 초기화 [10] n에 0이 입력되면 0 출력 [17 - 29] 피보나치 메서드 [18] n이 1이나 2일 경우 1 반환 [22] 캐시 배열 n번 인덱스의 값이 0이 아니면 n번 인덱스의 값을 출력함 [26] 피보나치 메서드를 호출하고 캐시 배열에 저장 [28] 캐시 배열 n번 인덱스의 값 반환 Memoization 10872번 팩토리얼과 동작 방식이 같다. 그러나 여기서는 조금 다른 방식을 사용했는데 Memoization을 사용했다. 팩토리얼이나 피보나치에서 ..

[10872] 팩토리얼 - Java

https://www.acmicpc.net/problem/10872 문제 해설 재귀 함수 예제의 가장 기본 문제라고 볼 수 있다. 1차 풀이 결과: 틀렸습니다! 분명 올바르게 작성한 것 같은데 틀렸다고 한다. 0! = 1이라는 사실을 간과한 상태로 코딩했다. 최종 풀이 [8] n이 0이면 바로 1을 출력한다. [15 - 20] 팩토리얼 함수 [16] n이 1일 때 1을 리턴한다. [19] 팩토리얼 함수를 다시 호출하는데 이 때 n - 1을 인자로 넘겨준다. 5!을 구한다고 할 때 5! = 5 * 4 * 3 * 2 * 1로 나타낼 수 있다. 여기서 4 * 3 * 2 * 1 = 4!이므로 5! = 5 * 4!로 나타낼 수 있다. 4! = 4 * 3!이 성립하며 3!, 2!, 1! 모두 마찬가지다. 따라서 n..

[2941] 크로아티아 알파벳 - Java

https://www.acmicpc.net/problem/2941 문제 해설 문제에 제시된 크로아티아 알파벳이 포함된 문자열이 몇 개의 알파벳으로 구성되어있는지 출력하는 문제이다. 크로아티아 알파벳은 다음과 같이 변경한다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. dž는 하나의 알파벳으로 쓰이기 때문에 d와 ž를 분리시키지 않는다. 풀이 문자열의 앞 부분부터 하나씩 훑으며 변환하는 방법이 있겠지만 간단하게 정규표현식을 이용했다. (c=|c-|dz=|d-|lj|nj|s=|z=|[a-z]) 부분 처럼 크로아이티아 알파벳과 마지막에 영어 알파..

[11654] 아스키 코드 - Java

문제 해설 알파벳 소문자, 대문자, 숫자 0-9 중 하나를 입력하고 입력받은 글자의 아스키 코드값을 출력하는 프로그램을 작성하는 문제이다. 풀이 int로 받아서 출력하면 된다.