코테 7

[JAVA] 스택(Stack) / 카카오 크레인 인형 뽑기(KAKAO)

1. 스택(Stack) 이란 ? 스택은 "쌓다"라는 의미로, 데이터를 차곡차곡 쌓아 올린 형태의 자료구조입니다. 스택은 후입선출(Last-In First Out:LIFO)의 형태로 일어나는 자료구조를 말합니다. 후입선출 구조란 예를 들어 스택에 A, B, C, D의 순서로 입력을 하여 스택에 넣었다면 D, C, B, A의 순서로만 꺼낼 수 있습니다. Stack ADT(추상 데이터 타입) Stack() : 비어 있는 새로운 스택을 만든다. isEmpty() : 스택이 비어있으면 true , 아니면 false를 반환한다. push(e) : 항목 e를 스택의 맨 위에 추가한다. pop() : 스택의 맨 위에 있는 항목을 꺼내어 반환한다. peek() : 스택의 맨 위에 있는 항복을 삭제하지 않고 반환한다. s..

Java 2023.08.13

[JAVA] 재귀(Recursion)함수 , 재귀(Recursion)호출

재귀(Recursion)함수란 ? 재귀 (Recursion) 함수란 특정 함수 내에서 자기 자신을 다시 호출하여 문제를 해결해나가는 함수입니다. 문제를 해결하기 위해 원래 범위의 문제에서 더 작은 범위의 하위 문제를 먼저 해결함으로써 원래 문제를 해결해 나가는 방식입니다. 일반 반복문을 통해 구현 가능한 기능은 재귀 함수를 통해 구현이 가능하며 반대로 재귀 함수로 구현 한 기능을 반복문으로 구현이 가능합니다. 재귀 함수는 함수 내에서 자기 자신을 계속 호출하는 방식이기 때문에 함수 안에 반드시 종료 구간이 되는 Base Case를 생각하며 코드를 구현해야 합니다. . . 백준 5639번 이진 검색 트리 문제를 풀었을 때, 익숙치 않았던 재귀함수 파트가 나와 머리가 아팠던 적이 있어 직접 간단하게 재귀함수..

Java 2023.08.12

[JAVA] Brute Force 알고리즘

Brute Force ( 브루트포스 ) - Brute(무식한) + Force(힘) 영어 해석처럼 하나부터 열까지 모든 경우를 탐색하는 알고리즘이다. 모든 경우를 탐색하기 때문에 당연히 정답을 찾을 수 있다. 알고리즘을 설계하고 구현하기 쉽다. 복잡한 알고리즘 없이 빠르게 구현 가능하다. 알고리즘 실행시간이 매우 길다. 메모리 효율면에서 매우 비효율적이다. 선형구조 : 순차탐색 비선형구조 : 백트랙킹 , DFS , BFS 브루트 포스,,이름은 뭔가 멋있어 보이지만 복잡한 알고리즘을 푸는 경우 상당히 무식?한 방법!? 예시1 브루트포스 알고리즘 사용 예시 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR..

Java 2023.08.12

[ JAVA ] BufferedReader , StringTokenizer, StringBuilder 을 사용하는 이유

BufferedReader, StringTokenizer 는 문자열로 활용하기 위하여 사용되며 Scanner를 사용하는 것보다 빠르다. 백준이나 인프런에 있는 알고리즘 문제를 풀면서 문자에 대한 입력을 처리할 때, 지금까지는 scanner 를 많이 사용했지만, 문제를 풀면서 시간초과 문제가 발생했고, scanner 대신 BufferedReader 를 사용하면 버퍼(Buffer)를 사용하여서 알고리즘 문제를 풀 때, 시간복잡도 효율성에서 유리하다는 사실을 알고 본격적으로 공부 시작 ! 1 . 그렇다면 버퍼(Buffer) 는 무엇일까? 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역 버퍼를 이용한 입력 : BufferedReader 버퍼를 이용한 출력 : ..

Java 2023.08.12

#13 자바(JAVA) 알고리즘 문제풀이 : 코딩테스트 대비 / 연속된 자연수의 합

N입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성 만약 N=15이면 7+8=15 4+5+6=15 1+2+3+4+5=15 와 같이 총 3가지의 경우가 존재한다. 15 3 import java.util.Scanner; public class Inflearn29 { public int solution(int N,int A[]) { int answer = 0; int sum =0; int lt =0; for(int rt=0; rt=N) { sum -= A[lt++]; if(sum == N) { answer ++; } } } return answer; } public static void main(Strin..

Java 2023.07.26

#12 자바(JAVA) 알고리즘 문제풀이 : 코딩테스트 대비 / 매출액의 종류

현수의 아빠는 제과점을 운영한다. 현수아빠는 현수에게 N일 동안의 매출기록을 주고 연속된 K일 동안의 매출액의 종류를 각 구간별로 구하라고 했다 만약 N=7이고 7일 간의 매출기록이 아래와 같고, 이때 K=4이면 20 12 20 10 23 17 10 각 연속 4일간의 구간의 매출종류는 첫 번째 구간은 [20, 12, 20, 10]는 매출액의 종류가 20, 12, 10으로 3이다. 두 번째 구간은 [12, 20, 10, 23]는 매출액의 종류가 4이다. 세 번째 구간은 [20, 10, 23, 17]는 매출액의 종류가 4이다. 네 번째 구간은 [10, 23, 17, 10]는 매출액의 종류가 3이다. N일간의 매출기록과 연속구간의 길이 K가 주어지면 첫 번째 구간부터 각 구간별 매출액의 종류를 출력하는 프로그..

Java 2023.07.26

#1 자바(JAVA) 알고리즘 문제풀이 : 코딩테스트 대비 / 문자 찾기

코테 준비를 시작해보려고 인프런에서 강의를 들으면서 깃허브에만 올리다가 블로그에도 복습겸 올려보겠슴 ! 다! 한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성 대소문자 구분 없음, 문자열 길이 100을 안넘음 . . 입력 : Computercooler c 출력 : 2 import java.util.Scanner; public class Inflearn1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); // 문자 입력 char c = scanner.next().charAt(0)..

Java 2023.02.09