본문 바로가기

알고리즘 문제풀이

[BOJ][JAVA] 17135 - 캐슬 디펜스 문제 출처 : https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 문제 설명 꽤나 복잡한 시뮬레이션 문제였지만, 로직 자체는 크게 어렵지 않아서 조건에 따라 차근차근 코드를 짜 나가다 보면 해결할 수 있는 문제였습니다. 여기서 주의할 점은 각 케이스에 대해서 시뮬레이션을 돌릴 때, 원본이 변하면 안 되기에 복사본을 만든 후 그 복사본에서 시뮬레이션을 해야 한다는 것입니다. 한꺼번에 구현하려 하지 않고, 적절한 단위로 끊어서 함수로 구성해 나갔기 때문에 조금이.. 더보기
[SWEA][JAVA] 1861 - 정사각형 방 문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LtJYKDzsDFAXc&categoryId=AV5LtJYKDzsDFAXc&categoryType=CODE&problemTitle=1861&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 설명 DFS 유형의 문제입니다. 이 문제의 핵심은 하나의 방에 대해서 가능한 경로는 네 방향 중 한 방향 뿐이거나, 경로가 아.. 더보기
[SWEA][JAVA] 1210 - Ladder1 문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh&categoryId=AV14ABYKADACFAYh&categoryType=CODE&problemTitle=1210&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 설명 맨 끝 행에 있는 도착 지점을 찾은 다음, 사다리를 거꾸로 올라가면서 시작점까지 올라가도록 푸는 게 핵심인 문제입니다. .. 더보기
[SWEA][JAVA] 1954 : 달팽이 숫자 문제 출처 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq&categoryId=AV5PobmqAPoDFAUq&categoryType=CODE&problemTitle=1954&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 설명 D2문제였지만 난이도가 그것 치고는 꽤 높은 문제였습니다. 패턴의 규칙을 찾아 아이디어로 삼는 것이 중요했는데, 저는 .. 더보기
[BOJ][JAVA] 1074 - Z 문제 출처: https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, N > 1이 라서 www.acmicpc.net 문제 설명 전형적인 이분탐색 문제인데, 이런 류의 문제는 처음 만나봐서 헤멨던 문제입니다. 직관적으로 떠오르는 풀이법인 2차원 배열로 풀었을 경우, 배열의 사이즈가 2의 30제곱까지 올라가기 때문에 무조건 메모리 초과가 일어납니다. 그렇기 때문에 반드시 이분탐색으로 풀어야 하며, 찾아야 하는 r,c좌표가 어느 사분면에 있는지를 알아낸 다음 그 전 사분면들은 값만 더해줄 뿐 더 .. 더보기
[BOJ][JAVA] 2839 - 설탕 배달 문제 출처 : https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제 설명 코드 자체는 굉장히 간단한 편인데, 아이디어를 얻기가 그만큼 쉽지는 않았던 문제였습니다. 전형적인 그리디 유형의 문제로, 5kg으로 최대한 많이 들고 가도록 하는게 포인트입니다. 5로 나눠지면 5kg로 다 들고갈 수 있다는 뜻이니 그 전에 구한 3kg의 갯수와, 남은 설탕을 5로 나눈 몫을 더해서 답을 내고 그렇지 않다면 3kg의 갯수를 하나씩 늘려줍니다. 계속 3kg로만 담아지다 .. 더보기
[BOJ][JAVA] 15686 - 치킨 배달 문제 출처 : https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제 설명 최대 M개를 고른다는 말에 처음에 부분집합으로 풀었는데, 답이 나오지 않았습니다. 생각해보니 M개보다 적게 고르든 M개만큼 고르든, 어쨌든 치킨 거리는 최솟값으로 계산되기 때문에 결과값은 동일하다는 결론이 나왔고, 그래서 M개만을 뽑는 조합으로 풀었더니 정답이 나왔습니다. 치킨집과 집을 각각 ArrayList에 따로 저장하고, 치킨집의 전체 개수 중 .. 더보기
[BOJ][JAVA] 3040 - 백설 공주와 일곱 난쟁이 문제 출처 : https://www.acmicpc.net/problem/3040 3040번: 백설 공주와 일곱 난쟁이 매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다. www.acmicpc.net 문제 설명 백설 공주는 공주가 되기 전에 유명한 수학자였다니ㅋㅋㅋㅋ설명이 재미있는 문제였습니다ㅎㅎ 문제에도 나와 있듯 한 마디로, 아홉 개의 수 중 합이 100이 되는 일곱 개의 수를 찾는 문제이기때문에, 조합으로 비교적 쉽게 풀 수 있는 문제였습니다:) 코드 import java.util.Scanner; //조합 public class BOJ3040_SnowWhite { .. 더보기