본문 바로가기

Problem Solving/Algorithm Concepts24

[알고리즘] 행렬 곱셈, 행렬 제곱 행렬 제곱의 문제를 풀어야하는데, 행렬 곱셈을 하는 법부터 정확히 알지 못 했기 때문에 정리하는 글이다. 1. 2740: 행렬 곱셈 문제 N*M크기의 행렬 A와 M*K크기의 행렬 B가 주어졌을 때, 두 행렬을 곱하는 프로그램을 작성하시오. => 행렬의 곱셈 공식에 의해서 N*M, M*K 행렬을 곱하면 N*K 행렬이 된다. 오른쪽 사진에 의하면, 3 x 2 행렬과 2 x 3 행렬이다. 3 x 2 행렬과 2 x 3 행렬을 곱하면 3 x 3 행렬이 만들어진다. 두 행렬을 곱하면 위의 왼쪽 사진과 같은 결과가 나온다. 1) N과 K에 대해 이중 for문을 돌면서, 2) 벡터의 크기 M만큼 for 돌면서 행벡터와 열벡터의 각 요소 곱의 더하기 값을 구해주고 3)결과 행렬에(2차원 리스트) 넣어주면 된다. impo.. 2022. 10. 4.
[알고리즘] 우선순위 큐, 힙 & 백준(최대 힙, 최소 힙, 가운데를 말해요, 카드 정렬하기) 우선순위 큐란, 데이터 삽입은 어떤 순서로 해도 상관없지만 데이터를 삭제할 때는 우선순위에 맞춰 더 높은 우선순위를 갖는 데이터를 먼저 삭제하는 큐를 말한다. 우선순위 큐는 힙을 통해 구현할 수 있다. 힙이란 완전 이진트리의 일종으로 대표적으로 최대 힙과 최소 힙이 있다. - 최대 힙: 루트 노드가 가장 큰 값을 가지며, 부모 노드는 항상 자식 노드보다 큰 값을 갖는다. - 최소 힙: 루트 노드가 가장 작은 값을 가지며, 부모 노드는 항상 자식 노드보다 작은 값을 갖는다. 힙에서의 삭제는 항상 루트 노드를 먼저 삭제하며 노드 변동 시 힙의 성질을 만족하도록 힙을 변동시킨다. 이러한 힙의 특징을 이용하여 우선순위 큐를 구현하는 것이다. 사실상 우선순위 큐를 구현하는 것은 힙을 구현하는 것이다. 최대 힙 구.. 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.