전체 글 790

[Lv.2 / 프로그래머스 / 파이썬] 올바른 괄호

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 대표적인 스택 문제이다. 알고리즘은 다음과 같다. 괄호를 순회하며 다음의 규칙을 수행한다.현재 순회하는 괄호가 ( 라면 스택에 넣는다현재 순회하는 괄호가 ) 라면 다음의 규칙을 수행한다.스택에 ( 괄호가 없다면 올바르게 짝지을 수 없으므로 False를 반환한다.스택에서 ( 괄호를 꺼내 짝지어준다(없앤다)순회가 끝났다면 다음의 규칙을 수행한다.스택에 남아있는 괄호가 없다면 모든 괄호가 올바르게 짝지어진 것이므로 True를 반환한다.스택에 괄호가 남아있다면 짝을 지어주지 못한 괄호가 있는 것이므로 False..

[Lv.2 / 프로그래머스 / 파이썬] 2 x n 타일링

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 2 x n 의 공간이 주어질 때 2 x 1 의 타일을 놓는 경우의 수를 구해야 하는 동적 계획법 문제이다.n이 1 증가할 때 타일을 놓는 방법은 다음과 같다. dp[n]일 때의 경우에 세로로 타일을 놓는다dp[n-1]의 경우에 가로로 2칸짜리 타일을 놓는다 따라서 점화식은 dp[n] = dp[-1] + dp[-2] 이다. def solution(n): dp = [0, 1, 2] for i in range(n - len(dp) + 1): dp.append((dp[-1] + dp[-2..

[Lv.1 / 프로그래머스 / SQL] 잡은 물고기 중 가장 큰 물고기의 길이 구하기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 가장 큰 물고기의 길이를 출력하되, 소수점 두 자리까지 표시해야 하며 cm을 붙여 출력해야 한다.소수점 자리 표시는 FORMAT 함수로 가능하고, 문자열을 연결하여 출력하기 위해 CONCAT 함수를 사용한다. SELECT CONCAT(FORMAT(MAX(LENGTH), 2), 'cm') AS MAX_LENGTHFROM FISH_INFO

[🥇2 / 백준 3109 / 파이썬] 빵집

3109번: 빵집유명한 제빵사 김원웅은 빵집을 운영하고 있다. 원웅이의 빵집은 글로벌 재정 위기를 피해가지 못했고, 결국 심각한 재정 위기에 빠졌다. 원웅이는 지출을 줄이고자 여기저기 지출을 살펴보던www.acmicpc.net 문제유명한 제빵사 김원웅은 빵집을 운영하고 있다. 원웅이의 빵집은 글로벌 재정 위기를 피해가지 못했고, 결국 심각한 재정 위기에 빠졌다.원웅이는 지출을 줄이고자 여기저기 지출을 살펴보던 중에, 가스비가 제일 크다는 것을 알게되었다. 따라서 원웅이는 근처 빵집의 가스관에 몰래 파이프를 설치해 훔쳐서 사용하기로 했다.빵집이 있는 곳은 R*C 격자로 표현할 수 있다. 첫째 열은 근처 빵집의 가스관이고, 마지막 열은 원웅이의 빵집이다.원웅이는 가스관과 빵집을 연결하는 파이프를 설치하려고 ..

[Effective Java : Item 90] 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라

개요 Serializable을 구현하기로 결정했다는 것은, 언어의 정상 메커니즘인 생성자 사용을 우회하여 인스턴스를 생성할 수 있게 된다는 것이다. 이로 인해, 버그와 보안 문제가 발생할 가능성이 일어날 가능성이 커지는데, 직렬화 프록시 패턴(serializable proxy pattern)을 통해 이를 크게 줄일 수 있다.   직렬화 프록시 패턴 사용법 * Proxy의 사전적 정의는 "대리", "대리인"을 의미 직렬화 프록시 패턴을 간략하게 요약하자면, 직렬화된 코드를 그대로 클래스의 인스턴스로 생성하는 것이 아니라, 그 클래스와 논리적 상태가 동일한 중첩 클래스를 설계해 방어적 생성을 하는 것이다.  직렬화 프록시 패턴을 구현하는 방법은 다음과 같다. 바깥 클래스의 논리적 상태를 정밀하게 표현하는 중..

Dev/Java 2024.05.22

[Lv.1 / 프로그래머스 / 파이썬] 대충 만든 자판

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr    풀이 알파벳마다 자판 상관 없이 가장 빨리 누를 수 있는 자판을 선택하는 것이 최선의 선택일 것이다.따라서 주어진 자판을 순회하며 알파벳마다 가장 빨리 누를 수 있는 횟수를 딕셔너리에 기록한다. 이후, targets의 문자열을 순회하며 딕셔너리를 이용해 문자열을 입력할 수 있는 가장 짧은 입력 횟수를 구한다. def solution(keymap, targets): # 알파벳별 가장 빨리 입력할 수 있는 횟수 계산 d = dict() for keys in keymap: for ke..

[Effective Java : Item 86] Serializable을 구현할지는 신중히 결정하라

개요 특정 클래스의 인스턴스를 직렬화하고 싶다면 Serializable을 구현하도록 클래스 선언에 implements Serializable만 붙이면 된다. Serializable 내부적으로 구현이 강제되는 메서드 또한 존재하지 않아 쉽게 적용할 수 있다고 생각될 수 있으나, 실상은 직렬화를 구현한다는 것은 훨씬 복잡하고 값비싼 일이다.  Serializable 구현 시 주의할 점 1. 릴리스한 뒤에는 수정하기 어렵다.Serializable을 구현하면 직렬화된 바이트 스트림 인코딩도 하나의 공개 API가 되는 셈이다. 따라서 릴리스가 된 뒤에는 이 직렬화 형태도 영원히 지원해야 한다. 또한 커스텀 직렬화 형태를 사용하지 않고 자바의 기본 직렬화를 사용한다면 최초 직렬화 당시 클래스의 내부 구현 방식에 묶..

Dev/Java 2024.05.08

[🥈2 / 백준 17103 / 파이썬] 골드바흐 파티션

https://www.acmicpc.net/problem/17103  문제골드바흐의 추측: 2보다 큰 짝수는 두 소수의 합으로 나타낼 수 있다. 짝수 N을 두 소수의 합으로 나타내는 표현을 골드바흐 파티션이라고 한다. 짝수 N이 주어졌을 때, 골드바흐 파티션의 개수를 구해보자. 두 소수의 순서만 다른 것은 같은 파티션이다. 입력첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2  출력각각의 테스트 케이스마다 골드바흐 파티션의 수를 출력한다.  예제 입력5 6 8 10 12 100 예제 출력1 1 2 1 6  풀이 에라토스테네스의 체로 N의 최대값 만큼 소수 목록을 구한 뒤 테스트 케이스별로 순회하며 골드바흐 파티션..

[Lv.3 / 프로그래머스 / SQL] 물고기 종류 별 대어 찾기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr    풀이 종류별로 가장 큰 물고기의 길이와 그 물고기의 ID를 출력해야 한다.  물고기의 ID를 출력해야 하는 부분 때문에 단순히 집계 함수로 문제를 해결할 수 없다.따라서 물고기의 종류별로 가장 긴 실제 레코드를 서브쿼리로 구한 뒤 메인 쿼리와 비교하여 해결해야 한다.NAME을 출력해야 하는 부분은 INNER JOIN을 통해 해결할 수 있다. SELECT ID, FISH_NAME, LENGTHFROM FISH_INFO AS FIINNER JOIN FISH_NAME_INFO AS FN..

[Lv.1 / 프로그래머스 / SQL] 특정 형질을 가지는 대장균 찾기

프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   풀이 비트연산자를 통해 보유 형질 조건을 판별해야 한다. 비트연산을 수행할 때, 세 번째 형질을 나타내는 비트는 100인데, 이를 십진수로 표현하면 3이 아니라 4임에 유의하자. SELECT COUNT(1) AS COUNTFROM ECOLI_DATAWHERE (GENOTYPE & 1 OR GENOTYPE & 4) AND !(GENOTYPE & 2)

반응형