-
백준 2444 별 찍기 - 7 - [알고리즘] [kotlin]알고리즘/백준 2023. 7. 31. 01:50
문제 내용

문제 분석
1. n을 입력받는다.
2. n번째 줄까지는 별이 2개씩 늘어난다.
3. n+1번째부터는 별이 1개가 될때까지 줄어든다.
4. 별들은 가운데 정렬되어야 한다.
5. 별을 그리고 남는 우측 공간에는 공백이 그려지지 않았다.
아이디어
1. 별들이 가운데 정렬되어야 하므로 별이 가장 넓은(가장 많은) 개수를 알아야 한다.
// 1 + 2*n
2. 줄마다 들어가야 할 공백의 개수를 계산 후 별을 그린다.
추가 아이디어
1. 위, 아래 형태가 반복되어 매번 계산하지 않는 방법을 생각해봤다.
2. n-1번째 줄까지 별을 찍는다.
3. n번째 줄에서 n개의 별을 찍기 전 모양을 따로 저장한다.
4. n개의 별을 찍은 후 따로 저장했던 모양을 뒤집어 출력한다.
풀이
fun solve1() { // brute force - 140ms val n = readln().toInt() val maxStar = 1+2*(n-1) // 왼쪽 공간의 크기 val leftSpace = maxStar/2 val sb = StringBuilder() fun getEmptySpaceCount(star: Int): Int { // star개의 별을 그릴 때 먼저 찍어야 하는 공백의 개수 반환 return leftSpace - star/2 } fun drawStar(star: Int) { val space = getEmptySpaceCount(star) repeat(space) { sb.append(' ') } repeat(star) { sb.append('*') } sb.append('\n') } // 별이 증가하는 구간 for(line in 0 until n-1) { // 이번 라인에 그려야 하는 별의 수 val star = 1 + 2*line drawStar(star) } // n번째줄 drawStar(maxStar) // 별이 감소하는 구간 for(line in n-2 downTo 0) { // 이번 라인에 그려야 하는 별의 수 val star = 1 + 2*line drawStar(star) } // 마지막 개행문자 제거 sb.dropLast(1) print(sb.toString()) }fun solve2() { // 절반의 모양 기록 후 이용하기 - 132ms val n = readln().toInt() val maxStar = 1+2*(n-1) // 왼쪽 공간의 크기 val leftSpace = maxStar/2 val starList = mutableListOf<String>() fun getEmptySpaceCount(star: Int): Int { // star개의 별을 그릴 때 먼저 찍어야 하는 공백의 개수 반환 return leftSpace - star/2 } fun recordStar(star: Int) { val space = getEmptySpaceCount(star) val sb = StringBuilder() repeat(space) { sb.append(' ') } repeat(star) { sb.append('*') } sb.append('\n') starList.add(sb.toString()) } // 1~n번째줄까지의 별모양을 기록함 for(line in 0 until n) { // 이번 라인에 그려야 하는 별의 수 val star = 1 + 2*line recordStar(star) } val sb = StringBuilder() // 저장된 별모양을 1 ~ n순서대로 그림 for(i in 0 until n) { sb.append(starList[i]).append('\n') } // 저장된 별모양을 n-1 ~ 0 순서로 그림 for(i in n-2 downTo 0) { sb.append(starList[i]).append('\n') } print(sb.toString()) }'알고리즘 > 백준' 카테고리의 다른 글
백준 2566 최댓값 - [알고리즘] [kotlin] (0) 2023.08.02 백준 2738 행렬 덧셈 - [알고리즘] [kotlin] (0) 2023.08.02 백준 3003 킹, 퀸, 룩, 비숍, 나이트, 폰 - [알고리즘] [kotlin] (0) 2023.07.31 백준 14425 문자열 집합 - [알고리즘] [이분탐색] [hashMap][kotlin] (1) 2023.07.27 백준 1152 단어의 개수 - [알고리즘] [kotlin] (0) 2023.07.26