분류 전체보기 228

[BOJ] 1992 - 쿼드트리

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 난이도: 실버 1 사용언어: JAVA 풀이 이 문제는 재귀를 이용하면 어렵지 않게 해결할 수 있습니다. 처음에 전체 영상을 모두 검사하여 만일 하나로 통일된 값이 아니면 4등분을 하여 좌측 상단 부분부터 재귀를 돌리면 됩니다. 또 해당 부분이 통일된 값으로 이루어지지 않았다면, 다시 좌측 상단부터 재귀를 수행합니다. 그리고 통일된 구역이..

[BOJ] 11660 - 구간 합 구하기 5

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 난이도: 실버 1 사용언어: JAVA 풀이 이 문제는 다이나믹 프로그래밍을 이용하여 해결할 수 있습니다. 특정 구간의 합을 dp라는 배열에 따로 저장하여 문제를 해결했습니다. 만일 예시와 같이 다음과 같은 입력이 주어졌다고 가정하겠습니다. 우선 4x4 크기의 표를 배열에 집어넣고 구간합을 구해줍니다. 구간합..

[소프트웨어 설계] XP 기법

스크럼 기법과 더불어 애자일 모형의 대표적인 개발 기법인 XP(eXtreme Programming) 기법은 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상하는 방법입니다. 1. XP 기법이란? XP 기법은 짧고 반복적인 개발 주기, 단순한 설계, 그리고 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것을 목적으로 합니다. XP의 5가지 핵심 가치로는 의사소통(Communication), 단순성(Simplicity), 용기(Courage), 존중(Respect), 피드백(Feedback)이 있습니다. XP 기법에서 몇 개의 요구사항이 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈(Release)라고 합니다. XP 기법에서는 이 릴리즈를 최대한 많이 반복하여, 고객..

[소프트웨어 설계] 스크럼 기법

스크럼 기법은 애자일 모형에 기초를 둔 소프트웨어 개발 모형입니다. 이번 글에서는 이 스크럼 기법에 대해 알아보도록 하겠습니다. 1. 스크럼(Scrum) 기법이란? 스크럼이란 럭비에서 양 팀이 서로 대치해있을 때의 팀의 대형을 뜻하는 단어입니다. 즉 팀의 중요성을 강조하는 단어로, 스크럼 기법 역시 팀이 중심이 되어 개발의 효율성을 높이는데 중점을 두는 기법입니다. 스크럼 기법을 위해서는 하나의 스크럼 팀을 구성하여 개발에 들어갑니다. 스크럼 팀의 구성원으로는 제품 책임자, 스크럼 마스터, 개발팀이 있습니다. 우선 제품 책임자(PO, Product Owner)는 의견을 종합하여 제품에 대한 요구사항을 작성하는 사람입니다. 주로 개발될 결과물에 대한 이해도가 높고, 의사결정에 책임을 질 수 있는 사람이 제..

[소프트웨어 설계] 소프트웨어 생명 주기 모형

소프트웨어 생명 주기(Software Life Cycle)는 소프트웨어를 개발하기 위한 정의, 운용, 유지 보수 등의 과정들을 단계별로 나눈 것입니다. 그리고 그 방식에 따라 여러 가지 모형(model)들이 존재합니다. 개발을 시작할 때 그 특성에 따라 생명 주기의 모형을 선택할 수 있습니다. 이번 글에서는 어떤 모형들이 있는지를 알아보도록 하겠습니다. 1. 폭포수 모형 (Waterfall Model) 가장 많이 사용되는 모형인 폭포수 모형부터 알아보겠습니다. 폭포수 모형은 폭포에서 물이 한번 떨어지면 다시 올라갈 수 없듯이, 한번 지나간 단계는 다시 살피지 않는다는 뜻을 지닌 모형입니다. 즉, 한 단계를 완벽하게 완성하고 마무리 한 뒤에 다음 단계로 넘어가며, 넘어간 뒤에는 다시 돌아오지 않습니다. 그..

[BOJ] 2877 - 4와 7

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/2877 2877번: 4와 7 창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오. www.acmicpc.net 난이도: 실버 1 사용언어: JAVA 풀이 풀이는 간단합니다. 우선 K를 입력받았을 때, K번 째 수가 몇 자리 숫자인지를 먼저 파악해야 합니다. K=4 라면 정답이 47이므로 2자리 수, 14라면 777이므로 3자리 수라는 것을 먼저 알아내야 합니다. 그 뒤에는 K가 해당 자릿수 숫자들 중 몇 번째에 해당하는 지를 알아내기만 하면 됩니다. 4와 7로 숫자를 표현했지만, 사실 이진수와 같은 표현법을 사용하기 때문에, ..

[BOJ] 1890 - 점프

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/1890 1890번: 점프 첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 www.acmicpc.net 난이도: 실버 2 사용언어: JAVA 풀이 이 문제는 다이나믹 프로그래밍을 이용해 쉽게 해결할 수 있습니다. 다이나믹 프로그래밍을 위한 배열을 하나 만들고, 이 배열에 해당 칸까지 올 수 있는 경우의 수를 저장해주면 됩니다. 주어진 예제를 이용해보겠습니다. (0, 0)에 2가 들어가 있습니다. 그렇다면, 우측으로 2칸 점프하거나, 아래 방..

[BOJ] 2636 - 치즈

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 www.acmicpc.net/problem/2636 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 난이도: 골드 5 사용언어: JAVA 풀이 이 문제는 BFS를 이용하여 해결할 수 있습니다. BFS에 관한 설명은 아래 문제의 풀이에서 확인하실 수 있습니다. jooona.tistory.com/63 [BOJ] 2178 - 미로 탐색 -개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 설명 www.acmicpc.net/problem/2178 217..

[BOJ] 4963 - 섬의 개수

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 설명 www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 난이도: 실버 2 사용언어: JAVA 문제는 간단합니다. 땅은 1, 바다는 0으로 표시된 지도를 하나 주고, 해당 지도에서 섬의 개수를 구하는 문제입니다. 한 땅의 상하좌우 또는 대각선에 또 다른 땅이 존재하면 같은 섬으로 인정됩니다. 풀이 이 문제는 dfs를 이용해 어렵지 않게 해결할 수 있습니다. 1을 하나 발견하면 dfs로 이어진 모..

[BOJ] 11048 - 이동하기

개인적인 풀이일 뿐, 최적의 정답이 아님을 알려드립니다. 문제 설명 www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 난이도: 실버 1 사용언어: JAVA NxM의 방이 존재하고, 방의 각 칸에는 사탕이 여러 개씩 떨어져 있습니다. 그리고 각 칸에 도착하면 떨어져 있는 사탕들을 모두 주울 수 있습니다. 현재 준규는 가장 좌측 상단에 위치하고, 만일 (i, j)라는 위치에 존재한다면, (i+1, j), (i, j+1), (i+1, j+1) 이렇게 ..