[자료구조] 스택 (Stack)
·
Computer Scrience/Data Structrue
스택스택이란 자료를 쌓아 올린 형태의 자료구조로 후입선출(LIFO, Last In First Out)의 구조를 말한다. 스택이 후입선출 구조인 이유는 원소를 top이라고 부르는 한 곳에서만 접근이 가능하기 때문이다. 스택의 삽입 연산은 push라고 하며, 삭제 연산은 pop이라고 한다. Java에서 스택은 Stack 클래스로 구현이 가능하다. 하지만 우리가 알고 있는 Stack과 다르게도 구현이 가능하다. 그 이유는 Stack 클래스가 Vector 클래스를 상속받고 있기 때문이다. Vector 클래스에는 add 메소드가 오버로딩이 되어 있는데, 일반적으로 push 연산을 할 때는 top을 통해서 구현해야 하지만 Vector의 add 메소드에서는 인덱스를 지정하여 원소를 삽입할 수가 있다. Stack에서 ..
[99클럽] 99클럽 코테 스터디 4일차 TIL - 스택(Stack)
·
코딩테스트 연습/99클럽
오늘의 문제Leetcode - Valid Parentheses (출처 하단 표기) 문제Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.An input string is valid if:Open brackets must be closed by the same type of brackets.Open brackets must be closed in the correct order.Every close bracket has a corresponding open bracket of the same type.제한사항1 s consists of pare..
[99클럽] 99클럽 코테 스터디 3일차 TIL - 큐(Queue)
·
코딩테스트 연습/99클럽
오늘의 문제프로그래머스 - 기능 개발 (출처 하단 표기)비기너 문제가 푼 문제라 미들러 문제를 풀어보았다. 문제프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한사항작업의 개수(progresses, speeds배열의 길이)는..
[자료구조] 해시 (Hash)
·
Computer Scrience/Data Structrue
해시 (Hash)해시는 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것을 의미한다. 해시 알고리즘을 해시 함수라고 부르며, 해시 함수로 변환된 값이나 키를 해시값 또는 해시키라고 부른다.  해시 함수 (Hash Function)해시 함수는 원소의 키 값을 원소의 위치로 변환하는 함수이다. 즉, 검색 키 값을 해시 테이블 주소로 매핑하는 함수이다. 해시 함수는 해싱 구현을 위해 결정해야 할 사항 중 하나인데, 해싱은 키가 있는 위치를 계산하여 바로 찾아가는 계산 검색 방식을 말한다.해싱 수행 방법검색 키 값을 해시 함수에 대입하여 주소를 구하고, 구한 주소에 해당하는 해시 테이블 위치로 바로 이동하는 방식이다.검색/삽입/삭제의 평균 시간 복잡도 = O(1) 해시 함수의 종류로는..
[99클럽] 99클럽 코테 스터디 2일차 TIL - 해시(Hash)
·
코딩테스트 연습/99클럽
오늘의 문제프로그래머스 - 완주하지 못한 선수 (출처 하단 표기) 문제수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.completion의 길이는 participant의 길이보다 1 작습니다.참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.참가자 중에는 동명이인이 있을 수 있습니다.입출력 예participantcompl..
[99클럽] 99클럽 코테 스터디 1일차 TIL - 해시(Hash)
·
코딩테스트 연습/99클럽
오늘의 문제프로그래머스 - 폰켓몬 (출처 하단 표기) 문제당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.첫 번째(3번), 두 번째(1번) 폰켓몬을 선택첫 번째(..
[프로그래머스] 덧칠하기
·
코딩테스트 연습/Programmers
문제어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리 · 학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트를 덧칠하기로 했습니다.넓은 벽 전체에 페인트를 새로 칠하는 대신, 구역을 나누어 일부만 페인트를 새로 칠 함으로써 예산을 아끼려 합니다. 이를 위해 벽을 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다. 그리고 페인트를 다시 칠해야 할 구역들을 정했습니다.벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 롤러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다.롤러가 벽에서 벗어나면 ..
[백준] 구간 합 구하기 4
·
코딩테스트 연습/백준
문제수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 풀이초기 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringTokenize..
[프로그래머스] 추억 점수
·
코딩테스트 연습/Programmers
문제사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다.그리워하는 사람의 이름을 담..
[프로그래머스] 비밀지도
·
코딩테스트 연습/Programmers
문제네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다."지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.암호화된 배열은 지도의 각 가로줄에서 벽 부..