본문 바로가기

Problem Solving/Algorithm Concepts23

[알고리즘] 우선순위 큐, 힙 & 백준(최대 힙, 최소 힙, 가운데를 말해요, 카드 정렬하기) 우선순위 큐란, 데이터 삽입은 어떤 순서로 해도 상관없지만 데이터를 삭제할 때는 우선순위에 맞춰 더 높은 우선순위를 갖는 데이터를 먼저 삭제하는 큐를 말한다. 우선순위 큐는 힙을 통해 구현할 수 있다. 힙이란 완전 이진트리의 일종으로 대표적으로 최대 힙과 최소 힙이 있다. - 최대 힙: 루트 노드가 가장 큰 값을 가지며, 부모 노드는 항상 자식 노드보다 큰 값을 갖는다. - 최소 힙: 루트 노드가 가장 작은 값을 가지며, 부모 노드는 항상 자식 노드보다 작은 값을 갖는다. 힙에서의 삭제는 항상 루트 노드를 먼저 삭제하며 노드 변동 시 힙의 성질을 만족하도록 힙을 변동시킨다. 이러한 힙의 특징을 이용하여 우선순위 큐를 구현하는 것이다. 사실상 우선순위 큐를 구현하는 것은 힙을 구현하는 것이다. 최대 힙 구.. 2022. 10. 3.
[Programmers] Level1 직사각형 별찍기 https://school.programmers.co.kr/learn/courses/30/lessons/12969 * 문제 설명 프로그래머스 Level1 직사각형 별찍기 표준 입력으로 두 개의 정수 n과 m이 주어짐 별(*) 문자를 이용해 가로의 길이 n, 세로의 길이 m인 직사각형 형태 출력 * 입출력 예 입력) 5 3 출력) ***** ***** ***** * 소스코드1 1. 정수 n과 m을 nextInt()로 입력받는다. 2. 이중 for문을 이용하여 직사각형을 만든다. *주의할 점은 for문에 순서에 따라 직사각형이 달라지기 때문에 순서를 잘 고려하면 됨.* print: 개행 없음/println: 개행 최종 코드) import java.util.Scanner; public class Solutio.. 2022. 8. 3.
[Programmers] Level1 문자열 내 p와 y의 개수 https://school.programmers.co.kr/learn/courses/30/lessons/12916 * 문제 설명 프로그래머스 Level1 문자열 내 p와 y의 개수 대문자, 소문자가 섞여있는 문자열 s s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return하는 solution 완성하시오. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴 단, 개수를 비교할 때는 대문자와 소문자를 구별하지 않음 * 입출력 예 s answer pPoooyY true Pyy false * 소스코드1 1. 문자열의 길이만큼 연산 str.length() for문을 사용해서 문자열을 길이만큼 연산하도록 한다.for(int i=0; i 2022. 8. 2.
[Programmers] Level1 자릿수 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/12931 * 문제 설명 프로그래머스 Level1 자릿수 더하기 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return하는 solution 함수를 만들라 예를 들어 N = 123이면 1+2+3=6 을 return 하면 된다. * 입출력 예 N answer 123 6 987 24 * 소스코드1 1. 숫자를 쪼개기 힘들기 때문에 문자열로 변환 숫자를 문자로 변환은 생각보다 간단하다........! new String으로 선언한 후, 파라미터로 입력받은 n과 텅 빈 값("")을 붙이면(+) 된다. (long n = 12345 이었으면, String str = 12345; 문자열이 된다.) 2. 문.. 2022. 8. 2.
[Programmers] Level1 자연수 뒤집어 배열로 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12932 * 문제 설명 프로그래머스 Level1 자연수 뒤집어 배열로 만들기 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴 예를 들어, n이 12345이면 [5, 4, 3, 2, 1]을 리턴 * 접근 포인트 1) 자연수 n의 자릿수에 구애받지 않고 성립해야 한다. - 제한 조건 n은 10,000,000,000이하인 자연수입니다. 2) 숫자열을 배열로 쪼개야 한다. 3) 숫자열의 순서를 뒤집어야 한다. * 소스코드1 1. 숫자를 쪼개기 힘들기 때문에 문자열로 변환 숫자를 문자로 변환은 생각보다 간단하다........! new String으로 선언한 후, 파라미터로 입력받은 n과 텅.. 2022. 8. 1.
프로그래머스 Level 1 모음 Level 1 1 신고 결과 받기 2 로또의 최고 순위와 최저 순위 3 신규 아이디 추천 4 숫자 문자열과 영단어 5 키패드 누르기 6 크레인 인형뽑기 게임 7 없는 숫자 더하기 8 음양 더하기 9 내적 10 소수 만들기 11 폰켓몬 12 완주하지 못한 선수 13 K번째 수 14 모의고사 15 체육복 16 실패율 17 약수의 개수와 덧셈 18 3진법 뒤집기 19 예산 20 두 개 뽑아서 더하기 21 2016년(연습문제) 22 최소직사각형 23 나머지가 1이 되는 수 찾기 24 부족한 금액 계산하기 25 [1차] 비밀지도 26 가운데 글자 가져오기(연습문제) 27 [1차] 다트 게임 28 같은 숫자는 싫어 29 나누어 떨어지는 숫자 배열(연습문제) 30 두 정수 사이의 합(연습문제) 31 문자열 내 마음대.. 2022. 8. 1.
[Java Algorithm] 1-4 단어 뒤집기(StringBuilder 이용법 또는 직접 뒤집기) * 문제 설명 N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 문제 입력: 첫 줄에 자연수 N(3 2022. 7. 27.
[알고리즘] 큐(Queue) 정리 & 문제 풀이(Python) 큐 : 자료구조 중 하나로, 먼저 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조이다. - 큐는 한쪽 끝에서는 삽입 연산만 이루어지며 다른 한쪽 끝에서는 삭제 연산만 이루어지는 유한 순서 리스트이다. - 구조상으로 큐가 스택과 다른 점은 스택에서는 삽입과 삭제가 같은 쪽에서 일어나지만 큐에서는 다른 쪽에서 일어난다. 큐의 연산 큐의 포인터 - front: 큐의 첫 번째 원소를 가리키는 포인터 - rear: 큐의 마지막 원소를 가리키는 포인터 - push(): 큐에 값을 넣는 연산 (Enqueue) rear 위치에 자료를 추가하고 rear를 1 증가시킴 - pop(): 큐에서 자료를 빼는 연산 (Dequeue) front 위치에 자료를 제거하고 front를 1 증가시킴 - fro.. 2022. 2. 7.
[알고리즘] 스택(Stack) 정리 & 문제 풀이(Python) 스택 : 자료구조 중 하나로, 먼한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out) 구조이다. - 파이썬은 스택 자료구조를 제공하지 않는다. 기본 클래스인 list를 통해 스택을 흉내낼 수 있다. 스택의 연산 - push(item): item 하나를 스택의 가장 윗 부분에 추가한다. - pop(): 스택 가장 위에 있는 원소를 삭제하고 그 원소를 반환한다. - peek(): 스택 가장 위에 있는 원소를 반환한다. (삭제하지는 않는다.) - isEmpty(): 스택이 비어있다면 1, 아니면 0을 반환한다. 대표적인 문제 및 사용 - 웹 브라우저 방문기록(뒤로가기) - 실행 취소(undo) - 역순 문자열 만들기 - 수식의 괄호 검사(연산자 우선순위 표현을 위한 괄호검사) -.. 2022. 1. 31.