본문 바로가기

알고리즘

(160)
[프로그래머스] 문자열 압축 https://programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 작년 하반기 카카오 코딩테스트 문제입니다. 온라인으로 봤던 기억이 있는데 그때는 풀어보려고 해도 안풀렸었는데 거의 반년?이 지나고 다시 침착하게 풀어보니까 풀 수 있었습니다. 처음에 코드를 제출했는데 5번 테스트케이스만 오답이 나왔습니다. 질문하기를 눌러보니 문자열 길이가 "a" 같은 1짜리가 들어오게 되면 처음에 설정해 두었던 MAX_VALUE 값이 나와서 틀리는 거였습니다. [ 문제 풀이 ] 1. len ..
[SWEA] 9760. Poker Game import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution { static String[] cards; static int[] suit, rank; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = null; int T = Integer.parseInt(br.readLine()..
[백준] 1707. 이분 그래프 https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K(2≤K≤5)가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V(1≤V≤20,000)와 간선의 개수 E(1≤E≤200,000)가 빈 칸을 사이에 두고 순서대로 주어진다. 각 정점에는 1부터 V까지 차례로 번호가 붙어 있다. 이어서 둘째 줄부터 E개의 줄에 걸쳐 간선에 대한 정보가 주어지는데, 각 줄에 인접한 두 정점의 번호가 빈 칸을 사이에 두고 주어 www.acmicpc.net 문제를 풀기 위해서 이분 그래프의 개념을 확실하게 알고가야 합니다. 그래프를 두 그룹으로 나누어서 각 그룹이 서로 연결되어 있지 않다..
[프로그래머스] 후보키 https://programmers.co.kr/learn/courses/30/lessons/42890 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 후보키의 조건은 1) 유일성(uniqueness) : 릴레이션에 있는 모든 튜플에 대해 유일하게 식별되어야 한다. 2) 최소성(minimality) : 유일성을 가진 키를 구성하는 속성(Attribute) 중 하나라도 제외하는 경우 유일성이 깨지는 것을 의미한다. 즉, 릴레이션의 모든 튜플을 유일하게 식별하는 데 꼭 필요한 속성들로만 구성되어야 한다. 그래서 저는 먼저 속성의 조합이 만들어질 수 있는 모든 경..
[SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.StringTokenizer; /* * 1244_최대상금_Greedy * Greedy : 코드 간단, 속도 빠름 * 가설이 틀리면 답을 구하지 못할 수 있다. 103ms * * 완탐 => 가지치기 144ms * */ // Z35_Solution_SWEA_1244_최대상금_Greedy public class Solutio..
4008. [모의 SW 역량테스트] 숫자 만들기 백준 14888. 연산자 끼워넣기와 똑같은 문제입니다. 저는 연산자 끼워넣기 문제를 순열을 이용하여서 연산자들을 줄세워서 나올 수 있는 모든 경우의 수를 확인했습니다. 그리고 그 때마다 숫자 계산을 하여 최댓값과 최솟값을 구했는데, 이번문제도 처음엔 그렇게 풀려고 시도해봤는데 시간초과가 발생했습니다. 극단적인 예로 '+' 연산자가 10개가 있으면 실제로는 한 번만 계산하면 되지만, 10!의 순열을 계산하면서 거기에서 시간초과가 발생한 것 같습니다. 중복된 연산자를 처리하기에 순열을 이용하면 비효율적입니다. 그래서 이번 문제는 재귀를 통한 완전탐색으로 해결했는데, 코드를 보면 쉽게 이해할 수 있기 때문에 문제풀이 순서는 생략하려고 합니다. 이러한 패턴의 문제들이 많은것 같은데 풀이 방법을 숙지해야겠고, 백..
[백준] 14500. 테트로미노 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net 입력받은 2차원 배열에서 처음 부터 끝까지 완전탐색하면서 주어진 정사각형 4개를 이어 붙인 테트로미노 영역의 값을 계산해서 최대값을..
[백준] 14890. 경사로 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 이 문제를 조금 더 쉽게 풀기 위해서 다른 블로그를 통해서 아이디어를 얻을 수 있었습니다. 처음에 저는 내려가는 경사로가 아닌 올라가는 경사로만 만들면서 행과 열별로 탐색하려고 생각했는데, 그렇게 하면 반대방향에서도 고려해야 하므로 코드가 길어지고 복잡했습니다. 이 점을 해결하기 위해서 1. 올라가는 경사로만 행과 열별로 판단 하는 것이 아닌, 내려가는 경사로도 놓을 수 있다고 가정합니다. 먼저 올라가는 경사로를 놓을 ..