문제 9012번 - 괄호 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 풀이 package seohae.algorithm.level1; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Scanner; import java.util.Stack; /** * 괄호 * h..
문제 10870번 - 피보나치수열 https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 재귀함수 풀이 import java.util.Scanner; public class M10870 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long A = sc.nextLong(); System.out.println(facto..
2750번 : 수 정렬하기 https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 선택정렬 풀이 import java.util.Scanner; public class M2750_선택정렬 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); int[] arr = new int[A]; for(int i = 0; i < A; i++) ..
백준 2884번 제출 코드 1) 기본 import java.util.Scanner; public class M2884_2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String A = sc.nextLine(); String[] array = A.split(" "); int hour = Integer.parseInt(array[0]); int minute = Integer.parseInt(array[1]); if (minute >= 45) { minute = minute - 45; } else { minute = 60 + minute - 45; hour = hour - 1; if (hour < 0) { ho..
백준 2588번 1) 문제 2) 입력/출력 예제 제출 코드 import java.util.Scanner; import java.util.stream.Stream; public class M2588 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int A = sc.nextInt(); // 472 int B = sc.nextInt(); // 385 /* 풀이 진행 */ // 1) 입력값 배열로 변경 int[] digitsA = Stream.of(String.valueOf(A).split("")) .mapToInt(Integer::parseInt) .toArray(); int[] digitsB = Stream.of..
문제 괄호로 된 입력 값이 올바른지 판별하라 입력: ()[]{} 출력: true 나의 코드 문제 : leetcode.com/problems/valid-parentheses/ # 괄호로 된 입력 값이 올바른지 판별하라 # 입력 ()[]{} # 출력 true # 리스트로 구현해보자. class Solution: def isValid(self, s: str) -> bool: dict = {"(": ")", "[": "]", "{": "}"} # 문자열을 리스트로 변환 value_list = list(s) print(value_list) i = 0 while i < len(value_list): key = value_list[i] # 존재한다면 if dict.get(key) in value_list: value..
문제 연결리스트를 뒤집어라. 입력 : [1 -> 2- > 3 -> 4 -> 5 -> NULL] 출력 : [5 -> 4 -> 3 -> 2 - > 1 -> NULL] 정답코드 # Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode: node, prev = head, None while node: next, node.next = node.next, prev prev, node = node, next return 출처 : github.com/onlybooks/al..
문제 정렬되어있는 두 연결 리스트를 합쳐라. 입력: l1 = [1 -> 2-> 4] / l2 = [1 -> 3-> 4] 출력 : [1 -> 1 -> 2 -> 3 -> 4 -> 4] 나의코드 (Fail) # 정렬되어있는 두 연결 리스트를 합쳐라 # 입력 1->2->4, 1->3->4 # 출력 1->1->2->3->4->4 class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 리스트 변환 def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode: while l1 is not None: prev = l1.val while l2 is not None: if pre..
문제 연결리스트가 팰린드롬인지 체크해라. 팰린드롬이란, 거꾸로 해도 같은 문자를 뜻한다. 입력 [1 -> 2] : False 입력 [1 - > 2 -> 2 -> 1] : True 나의코드 # 연결리스트가 팰린드롬인지 체크 (팰린드롬이란, 거꾸로해도 같은 문자) # 입력 1-> 2 : false # 입력 1->2->2->1 : true from typing import List class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 리스트 변환 def isPalindrome(self, head: ListNode) -> bool: # 노드가 1개일 경우 - 팰린드롬 if head.next is None: r..
문제 가로의 길이가 N, 세로의 길이가 2인 직사각형 형태의 얇은 바닥이 있다. 이 얇은 바닥을 덮개로 채우고자 하는데, 해울 수 있는 모든 경우의수를 구하라. 덮개는 1 X 2, 2 X 1, 2 X 2 이렇게 3가지로 구성되어있다. 만약 N이 3일 경우 1) (2 X 1) + (2 X 2) 2) (2 X 2) + (2 X 1) 3) (1 X 1) + (1 X 1) + (1 X 1) 4) (2 X 1) + (1 X 2) + (1 X 2) 5) (1 X 2) + (1 X 2) + (2 X 1) 총 5가지 경우가 나온다. 정답코드 # 정수 N을 입력 받기 n = int(input()) # 앞서 계산된 결과를 저장하기 위한 DP 테이블 초기화 d = [0] * 1001 # 다이나믹 프로그래밍(Dynamic P..
문제 n개의 페어를 이용한 min(a, b)의 합으로 만들 수 있는 가장 큰 수를 출력하라. 입력: [1, 4, 3, 2] 출력: 4 min(1, 2) + min(3, 4)일 경우에 최대값 4를 출력하게된다. 나의 코드 # min(a, b)의 합으로 만들 수 있는 가장 큰수 # 정렬 # 앞에서 2개씩 묶기 # 작은겄기리 묶고 큰것끼리 묶어야 최소값의 합이 가장 커진다 # [1, 4, 3, 2] -> [1, 2, 3, 4] # 앞에서부터 2개씩 묶었을때 짝수번째의 원소만 추출하면 된다. nums = [1, 4, 3, 2] nums.sort() result = 0 # 반복문 인덱스를 사용하여 짝수번째 원소만 추출 for i, a in enumerate(nums): if i % 2 == 0: result +=..
문제 한번의 거래로 낼 수 있는 최대 이익을 산출하라. 입력 : [7, 1, 5, 3, 6, 4] 출력 : 5 위 예제에서는 1일대 구매하여 6일 경우 판매하는 것이 최대 이익 5를 얻을 수 있다. 나의 코드 1) 첫번째 코드 list = [7, 1, 5, 3, 6, 4] min_value = min(list) # 최소값 저장 min_index = list[min_value] # 최소값 인덱스 저장 print(list[min_value]) # 최소 값의 인덱스 찾기 if min_index == len(list) - 1: print(0) else: # 반복문 실행 for i, v in enumerate(list): if i < min_index: # 최소값 인덱스보다 왼쪽은 pop (이유: 최소값일때 사는..