본문 바로가기

Algorithm(알고리즘)131

[Java][백준 1522][문자열] 문자열 교환 문제 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 있는 것이다. 예를 들어, aabbaaabaaba이 주어졌을 때, 2번의 교환이면 a를 모두 연속으로 만들 수 있다. 입력 첫째 줄에 문자열이 주어진다. 문자열의 길이는 최대 1,000이다. 출력 첫째 줄에 필요한 교환의 회수의 최솟값을 출력한다. 🌈 풀이 후기 처음에는 어떻게 접근해야 할지 몰라서 투포인터를 고민하다가 다른 사람의 풀이를 보고 아이디어를 떠올렸다. a를 모두 연속으로 만들기 위해서 a의 길이를 먼저 구한 다음에 0부터 a의 길이만큼 확인해주면서 그안에 있는 b의 최소한의 교환으로 b만 옮겨주면 .. 2021. 7. 6.
[Java][백준 21611][시뮬레이션][삼성SW 역량 테스트] 마법사 상어와 블리자드 문제 오늘 새로 배운 마법은 블리자드이고, 크기가 N×N인 격자에서 연습하려고 한다. N은 항상 홀수이고, (r, c)는 격자의 r행 c열을 의미한다. 격자의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이며 마법사 상어는 ((N+1)/2, (N+1)/2)에 있다. N = 3 N = 5 N = 7 가장 처음에 상어가 있는 칸을 제외한 나머지 칸에는 구슬이 하나 들어갈 수 있다. 구슬은 1번 구슬, 2번 구슬, 3번 구슬이 있다. 같은 번호를 가진 구슬이 번호가 연속하는 칸에 있으면, 그 구슬을 연속하는 구슬이라고 한다. 다음은 N = 7인 경우 예시이다. 블리자드 마법을 시전하려면 방향 di와 거리 si를 정해야 한다. 총 4가지 방향 ↑, ↓, ←, →가 있고, 정수 1, 2.. 2021. 5. 26.
[Java][백준 21610][시뮬레이션][삼성SW 역량 테스트] 마법사 상어와 비바라기 문제 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기를 크기가 N×N인 격자에서 연습하려고 한다. 격자의 각 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지한다. 바구니에 저장할 수 있는 물의 양에는 제한이 없다. (r, c)는 격자의 r행 c열에 있는 바구니를 의미하고, A[r][c]는 (r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미한다. 격자의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 마법사 상어는 연습을 위해 1번 행과 N번 행을 연결했고, 1번 열과 N번 열도 연결했다. 즉, N번 행의 아래에는 1번 행이, 1번 행의 위에는 N번 행이 있고, 1번 열의 왼쪽에는 N번 열이, N번 열의 오.. 2021. 5. 26.
[Java][Programmers][고득점 Kit ] Hash (완주하지 못한 선수, 전화번호 목록, 위장, 베스트앨범) 프로그래머스 고득점 Kit에 있는 해시 문제는 총 4개이다. 모두 key - value 쌍을 활용하면 풀기 쉬워지는데 자주 사용하는 것은 Collections을 이용한 sort , getOrDefault를 이용한 값 추가이다. 완주하지 못한 선수 (Level1) - getOrDefault만 잘 사용하면 쉽게 풀리는 문제. import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; HashMap hm = new HashMap(); for (String player : participant) hm.put(player, hm.getOrDefault.. 2021. 5. 16.