코딩 테스트 13

[프로그래머스 / 자바 / Lv.3] 43105 정수 삼각형

문제 풀이  DP 문제다. 트리에서 자식들의 누적합이 최대가되는 값을 출력하는 문제이다.DP 점화식을 아래와 같이 생각했다.{자식의 현재 값 + (오대각선위 or 왼대각선위) 중 최댓값} 을 구해서 단말노드에 누적 합을 넣어놓는다 이 점화식으로 DP에 누적합을 넣어놓으면 마지막 배열에 총 누적합의 경우가 쌓이므로 마지막 배열 중 최댓값을 출력하면 답이다. class Solution { public int solution(int[][] triangle) { int len = triangle.length; int[][] dp = new int[len][len]; dp[0][0] = triangle[0][0]; for (int i=1; i 1. dp 배열..

[프로그래머스 / 자바 / Lv.2] 70129 이진 변환 반복하기

문제 풀이 입력값에서 0을 제거하고->  0 제거 후 길이를 다시 이진변환-> 이진변환한 수에서 다시 0을 제거-> 0 제거 후 길이를 다시 이진변환하는 것을 반복해서 이진변환 결과가 1이 될 때까지 반복해야한다.출력값으로는 [{총 반복 횟수}, {제거한 0의 개수}] 를 출력해야한다. 변수 설명- len : 0 제거후 길이- zero : 제거한 0의 개수 카운터- count : 반복 횟수 카운터 풀이 순서class Solution { static int zero = 0; static int count = 0; public int[] solution(String s) { convert(s); int[] answer = {count, zero}; ret..

[프로그래머스 / 자바 / Lv.2] 12924 숫자의 표현

문제 풀이 연속된 숫자의 합이 n이 되는 모든 경우의 수를 구하는 문제다.처음에 연속된 숫자의 합이니까 등차수열로 풀어야겠다.. 라고 생각하고 문제를 접근했다.첫 번째 풀이기본 베이스는 위의 등차수열 공식을 생각하고 문제를 풀었다.1. n==n인 경우를 미리 세어주기 위해 count를 1로 초기화함2. 이중 for문으로 저 공식을 만족하는 a, b 값이 존재하면 count를 늘려줌3. for문 다 돌면 count 반환이렇게해서 테스트 케이스는 다 통과됐는데... 시간복잡도 O(n^2)이라 그런지 시간초과가 뜸 ㅜㅜ 다른 방법으로 풀면 되는데 오기가 생겨서 등차수열 고집하다가 시간 많이 버린 문제...ㅋㅋ class Solution { public int solution(int n) { ..

[프로그래머스 / 자바 / Lv.3] 42628 이중우선순위큐

문제풀이 이중우선순위큐를 구현하는 문제로, 주어진 명령어들을 처리하여 최종적으로 큐의 최댓값과 최솟값을 반환하는 것이다.1. 두 개의 우선순위 큐 생성 (최소힙, 최대힙)- 최대힙 정렬은 `Collections.reverseOrder()`로 큐 역순 정렬하여 최대힙을 만든다.2. 명령어 규칙대로 처리- I : min, max 두 큐에 모두 add 연산을 수행- D 1 : 최댓값 삭제- D -1 : 최솟값 삭제3. 큐가 비어있으면 [0, 0] 반환하고, 비어있지 않으면 max.peek()으로 최댓값, min.peek()로 최솟값 반환함.class Solution{ public int[] solution(String[] operations) { PriorityQueue min..

[프로그래머스 / 자바 / Lv.2] 12941 최솟값 만들기

문제풀이 두 배열의 각 원소의 곱의 누적합이 최소가 되도록 하는 문제다.각 원소의 곱의 누적합이 최소가 되려면, 오름차순 정렬한 배열과 내림차순 정렬한 배열의 각 원소를 곱해준 후에 누적합을 구해주면 최솟값이 된다. 1. 자바에서는 int[] 배열을 내림차순으로 정렬하지 못하므로, 일단 각각 A, B 배열을 오름차순 정렬을 해준다.2. A배열은 원소의 시작인 i 부터, B 배열은 원소의 끝인 (len-1)-i 부터 역순으로 원소를 곱해주고, answer에 합을 누적한다.  class Solution{ public int solution(int []A, int []B){ int len = A.length; int answer = 0; ..

[프로그래머스 / 자바 / Lv.2] 12939 최댓값과 최솟값

문제  자바 개념Stream API란?람다식을 이용한 기술 중 하나로 데이터 소스를 조작 및 가공, 변환하여 원하는 값으로 반환해주는 인터페이스String[] 배열 to Integer[] 배열 : `Arrays.stream(list).mapToInt(Integer::parseInt)`최댓값, 최솟값 : `Arrays.stream(list).max().getAsInt()`, `Arrays.stream(list).min().getAsInt()`풀이 String 배열을 Integer 배열로 변환할때 Stream API를 사용하여 풀이하였다.1. String 입력값을 split을 이용해 공백 기준으로 String 배열로 만들기2. `Arrays.strea(list).mapToInt(Integer::parseIn..

[백준 파이썬] 단계별로 풀어보기 - Lv6. 심화 1

# 25083 새싹 print(" ,r'\"7") print("r`-_ ,' ,/") print(" \\. \". L_r'") print(" `~\\/") print(" |") print(" |") - " 출력 : \" - \ 출력 : \\ # 3003 킹, 퀸, 룩, 비숍, 나이트, 폰 A = list(map(int, input().split())) print(1-A[0], 1-A[1], 2-A[2], 2-A[3], 2-A[4], 8-A[5]) # 2444 별찍기-7 n = int(input()) for i in range(1, n+1): print(' '*(n-i)+'*'*(2*i-1)) for i in range(n-1, 0, -1): print(' '*(n-i)+'*'*(2*i-1)) - 연결해서..

[백준 파이썬] 단계별로 풀어보기 - Lv5.문자열

# 27866 문자와 문자열 #단어 S와 정수 i 주어짐 #S의 i번째 글자 출력 S = input() i = int(input()) print(S[i-1]) # 2743 단어 길이 재기 #알파벳 입력받아 길이 출력 x = input() print(len(x)) # 9086 문자열 #문자열 입력 #문자열 첫 글자와 마지막 글자 출력 T=int(input()) #테스트 케이스 개수 for _ in range (T) : x = input() print(x[0]+x[-1]) #x[-1]은 마지막 글자 - x[-1] : 마지막 글자 # 11654 아스키 코드 #주어진 글자의 아스키코드값 출력 x = input() print(ord(x)) - ord() : 아스키 코드값 리턴 함수 - chr() : 아스키 코드값..

[파이썬 게임] Chimp Memory Game

chimp memory game 격자 : 5 rows(행), 9 columns(열) start 버튼 6 numbers (순차 증가) 격자에 숫자 랜덤 위치하기 Hide Numbers : 1. Display Time, 2. First Number 시간이 지난 후에 숫자 숨겨짐 1을 누르면 나머지 숫자 숨겨짐 Correct → Next Level Wrong → Game Over 프레임 : 1_frame 가로 1280, 세로 720 import pygame #초기화 pygame.init() screen_width = 1280 #가로크기 screen_height = 720 #세로크기 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.d..

[백준 파이썬] 단계별로 풀어보기 - Lv4. 1차원 배열

# 10807 개수 세기 N=int(input()) x = list(map(int,input().split())) v = int(input()) print(x.count(v)) - x.count(v)로 x리스트 안에 v가 몇 개 들어가있는지 확인가능 # 10871 X보다 작은 수 N,X = map(int,input().split()) A = list(map(int, input().split())) for i in range(N) : if A[i] 42로 나눈 나머지 #서로 다른 값 몇 개? A=[0]*10 for i in range(10) : x = int(input()) A[i] = (x % 42) B = set(A) print(len(B)) - 리스트 입력 받고 리스트를 집합으로 바꿔서 중복되는 수 ..