본문 바로가기

전체 글144

[pg] 프로그래머스 비밀지도 1. 문제정의 한 변의 길이와 2개의 숫자 배열이 주어지는데, 각 배열의 숫자들을 이진수로 변경했을 때 비트연산 or를 하여 최종적으로 1일경우 #, 0일 경우 " "로 바꾸어서 문자열로 출력 해야 한다. 2. 내가한시도 문제를 읽고 비트연산이라는 것을 알아채고 Integer에서 제공해주는 toBinaryString 메서드를 이용해서 숫자들을 이진수문자열로 변경하였다. 이후 1은 "#"으로 replaceAll 해주었고, 0은 " "으로 replaceAll 해주었다. 3. code public class Solution { public static String[] solution(int n, int[] arr1, int[] arr2) { String[] answer = new String[n]; for (.. 2023. 8. 8.
[pg] 프로그래머스 다트게임 1. 문제 정의 총 3라운드의 다트게임이 진행 되는데, 형식은 다음과 같이 들어온다. ex) "1S*2T*3S" 숫자는 0~10까지 들어오고 S일경우 1제곱, D일경우 2제곱, T일경우 3제곱을 수에 곱해주고 *일경우에는 자신의 바로앞 점수 *2, 그리고 현재 점수 *2 를 하게 된다. #일 경우에는 현재 숫자 * -1 이다. *와 #은 있을수도 있고 없을 수도 있다. 2. 나의 시도 처음에 문제를 풀 때에는 뭔가 가독성있게 풀려고 생각을 했는데, 생각해보니 정규표현식을 잘 알지 못해서, 그냥 생 if else문으로 문제를 해결했다. (빠르게 해결하고 더 좋은 풀이를 찾는 것이 목적이었기 때문에 중복코드를 제거하는 메서드 조차 만들지 않았다.) 그리고 다른사람의 풀이를 살펴보고, 정규표현식을 쓰는 법을 .. 2023. 8. 8.
[pg] 프로그래머스 실패율 1. 문제 정의 각 스테이지별로 도전자가 있고, 패스한 인원이 있다. 실패율은 스테이지 도전인원 / (스테이지 도전인원+패스한 인원) 현재 유저들이 도전하고 있는 스테이지의 번호가 담긴 배열이 주어질 때 각 스테이지 별 실패율을 구해서, 실패율이 높은 순으로 스테이지 번호를 리턴. 2. 내가 시도한 방법. 스테이지 번호, 실패율, 그리고 실패율을 구하기 위한 도전인원과 패스인원을 구하는 게 핵심이기 때문에 Stage라는 객체를 만들어서 스테이지 번호와 실패율을 하나로 관리하였고, 도전인원의 count를 관리하기 위해서 처음에는 map을 선언, 나중에는 배열 이용해서 count를 관리하였다. 전체인원 관리는 전체인원을 선언한 후에 하위 스테이지의 실패율을 구할 때마다 빼주면서 구현하였다. 이 문제를 처음 .. 2023. 8. 8.
[면접을 위한 CS 전공지식 노트][자료구조] Graph (그래프) 1. Graph 그래프는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조이다. 네비게이션 길찾기, 네트워크 분석 등 다양하게 사용될 수 있다. 2. Vertex와 Edge A라는 곳에서 무언가를 통해 B로 간다고 했을 때 A,B는 Vertex가 되고 A에서 B로 갈 때의 무언가는 Edge가 된다. Edge 같은 경우 단방향, 양방향 둘다 가능하다. 이 때 Vertex에서 나가는 Edge을 Outdegree라고 하고, Vertex로 들어오는 Edge을 Indegree라고 한다. 이때의 Vertex와 Edge들을 통합하여 그래프라고 부른다. 뿐만아니라 Edge별로 가중치를 다르게해서 Vertex들을 연결할 수 있다. 3. 정리 그래프는 Vertex와 그들을 연결해주는 Edge로 구성된다. Vert.. 2023. 8. 4.
[면접을 위한 CS 전공지식 노트][자료구조] Tree(트리) 1. 트리 트리는 그래프 중 하나로 그래프와 같이 노드와 엣지로 구성되어 있다. 한 노드가 여러노드를 가리킬 수 있으며, 비선형적인 자료구조이다. 데이터 구조의 계층적인 속성을 표현하는 것이 특징이다. 우리가 사용하는 파일탐색기의 구조도 트리 구조라고 볼 수 있다. Tree를 알아보기에 앞서 트리와 관련된 용어를 알아야 할 필요가 있다. 1. Root: 트리의 시작점이자, 트리에서 제일 위에 있는 최상위 노드이다. 이를 root라고 부른다. 2. Node와 Edge: 노드는 트리에서 데이터를 저장하는 기본적인 단위이다. 각 노드는 하나이상의 자식노드를 가지고 있을 수 있고, 또한 부모노드와 연결될 수도 있다. 그리고 노드들을 연결해주는 간선을 Edge라고 한다. 3. Parent와 Child: 그림에서는.. 2023. 8. 4.
[면접을 위한 CS 전공지식 노트][자료구조] Queue(큐) 0. 개요 이번에는 Queue에 대해서 공부한것을 글로 정리할 예정이다. 1. Queue 큐는 FIFO(First In First Out)구조이다. 스택이 LIFO(Last In First Out) 였던 것과 대조적이다. CPU 작업을 기다리는 프로세스, 스레드 행렬 또는 네트워크 접속을 기다리는 행렬, 너비 우선 탐색, 캐시, 메시지큐 등에 사용된다. 큐 같은 경우 node를 이용해 만든 선형큐와 배열을 이용해 만든 원형큐가 있다. 원형큐는 새로운 데이터를 offer 할 때마다 Rear 인덱스를 +1, poll 할 때마다 front+1에 있는 데이터를 꺼내고 front+1. 배열을 이용해 구현한 원형 큐에서의 상태 조건 1) Rear와 Front가 같은 곳을 가리키고 있다. -> 큐가 비어 있다. 2).. 2023. 8. 3.
[면접을 위한 CS 전공지식 노트][자료구조] Stack(스택) 0. 개요 배열과 리스트에 대한 정리가 끝났으니, 다음 자료구조는 스택과 큐이다. 그 중 스택을 먼저 정리하려고 한다. 1. Stack 스택의 구조는 간단하다. LIFO(Last In First Out)가 핵심이다. 이것을 알고 있다면 이미 스택에 대해서 99.9%는 이해했다고 생각해도 무방하다. 스택에서는 push를 할 경우 스택에 데이터가 쌓이고, pop을 할 경우에는 가장 최근에 push된 데이터를 꺼내는 구조이다. 그리고 peek을 하게 되면 스택에 최 상위 top에 있는 데이터의 정보를 읽어올 수 있다. 스택의 기능을 명세한 인터페이스 스택이 가지고 있는 기능의 핵심을 명세했다. push: data를 스택에 집어 넣는다. pop: 가장 최근에 넣은 데이터를 스택에서 꺼낸다. peek: 가장 최근.. 2023. 8. 3.
[pg] 프로그래머스 키패드 누르기 0. 개요 이번 문제는 위치를 다루는 문제였다. 레벨 1이어도 위치를 다루는 문제는 고민이 조금 필요한 부분이 있다. 다행히 문제가 복잡하지는 않아서 다른 알고리즘 없이 위치를 옮겨다니는 것으로 해결이 가능했다. 1. 문제 정의 휴대폰 키패드에서 앞으로 누르르 번호가 주어 질 때 왼손 엄지와 오른손 엄지로 휴대폰 키패드 번호를 누를 때 마다 L과 R을 추가하여 문자열로 반환하는 문제이다. 조건1: 1,4,7 일때는 왼손 엄지로만 누른다. 조건2: 3,6,9 일때는 오른손 엄지로만 누른다. 조건3: 2,5,8,0 일때는 가까운 손가락으로 누른다. 2. 내가 한 시도 1,4,7과 3,6,9를 제외한 2,5,8,0일때 엄지와 누를 키패드의 거리를 비교하는 것이 핵심이 었던 문제 였던 것 같다. 그래서 나는 L.. 2023. 8. 2.
[면접을 위한 CS 전공지식 노트][자료구조] 연결리스트 LinkedList 0. 개요 이전 글에서는 선형 자료구조인 배열의 구조와 Java에서의 ArrayList를 살펴보았다. 이번에는 연결리스트에 대해서 공부한 내용을 글로 정리하여 남기고자 한다. 일단 연결리스트에는 단방향 연결리스트와 양방향 연결리스트가 있다. 이번 글에서는 두 가지 모두에 대해서 구현해보고, 특징들에 대해서 알아볼 예정이다. 1. 단방향 연결리스트 단방향 연결리스트는 말 그대로 한 방향으로만 링크된 리스트들을 의미한다. 즉, 앞에서 뒤로는 탐색이 가능하지만, 역방향으로는 탐색이 불가능하다. 그림으로 살펴보자. 아래 그림과 같이 Head는 다음 노드를 가리키고 있고, 0번 노드는 1번 Tail을 가리키고 있다. 그러나 Tail에서 0번 노드의 주소는 알지 못하기 때문에 역방향의 탐색이 불가능하다. 2. 양방.. 2023. 8. 2.