본문 바로가기

프로그래밍94

[pg] 프로그래머스 무인도 여행 1. 문제 정의 전형적인 bfs / dfs 문제. 맵이 주어지고 맵 안에는 무인도와 바다가 있으며, 바다칸에는 X, 무인도칸에는 1~9의 숫자가 주어진다. 무인도가 인접해 있다면 하나의 무인도라고 정의한다. 최종적으로는 맵 안에 있는 무인도들이 가지고 있는 식량들의 값을 오름차순으로 정렬해서 리턴하는 문제이다.(무인도의 갯수는 0~N) 무인도가 없을 경우에는 -1을 리턴한다. 2. 내가 한 시도 처음 문제를 보고 전형적인 bfs / dfs 문제라는 것을 깨달았다. 나같은 경우는 dfs보다는 bfs로 문제를 푸는 것이 편해서 bfs로 풀기로 결정하고, 로직을 작성했다. 이 문제의 특징이라고 할 수 있는 것은 이전에 탐색했던 루트를 다시 탐색하지 않기 위해서 visited를 전역변수로 공유해서 사용해야 했던.. 2023. 8. 24.
[면접을 위한 CS 전공지식 노트][DB] 데이터 베이스 기본 1. 데이터 베이스 일정한 규칙에 따라 구조화되어 저장되어 있는 데이터의 모음. 2. DBMS(DataBase Management System) 데이터베이스를 생성, 조작, 관리하는 역할을 한다. 데이터를 query language를 통해서 삽입, 조회, 수정, 삭제할 수 있다. DBMS는 데이터베이스 시스템의 핵심 부분으로 사용자와 응용프로그램이 데이터를 효율적으로 조작, 관리할 수 있도록 응용프로그램과 데이터베이스 사이에서 인터페이스 역할을 한다. 3. 엔티티(데이터베이스에 저장하려는 실제 항목을 나타내는 추상적인 개념) 엔티티는 데이터베이스에서 현실 세계에서 식별가능한 하나의 객체, 사물, 개념 또는 사건을 나타내는 추상적인 개념이다. (객체지향에서 설명하는 객체와 비슷하다.) 데이터베이스 내에서 .. 2023. 8. 18.
[pg] 프로그래머스 두 원사이의 정수 쌍 1. 문제정의 반지름이 r1인 작은 원과, r2인 큰 원이 존재한다. 이 두 원을 겹치면 작은원과 큰원 사이에는 일부 면적이 발생한다. 이 면적안에 있는 정수로 이루어진 좌표를 구하는 문제이다. 2. 내가 한 시도 lv2로 올라오고 나서 부터는 문제를 봤을 때 어떻게 풀어야지! 라는 것이 잘 떠오르지 않게 되었다. 검색을 통해 이 문제는 피타고라스의 정리를 이용하면 쉽게 풀리는 문제라는 것을 알고나서 그 방향으로 해결법을 고민하기 시작하였다. 1번째 시도 피타고라스의 정리를 이용해서 원 안에 있는 모든 점을 서치하여 조건에 맞는 점들만 리턴하도록 코딩하였다. 말 그대로 무식하게 모든 점을 서치해봤다. 결과는 실패했다. 일부 테스트 케이스에서는 성공이었지만 일부에서는 시간초과가 발생하였다. 2번째시도 이번.. 2023. 8. 9.
[pg] 프로그래머스 요격시스템 1. 문제 정의 폭격 미사일이 하늘로 부터 수평 방향으로 s,e 구간사이에 떨어지고, 이 구간 사이에 미사일을 날려 최소한의 미사일로 폭격미사일을 막아내는 문제이다 ex) [1,2] , [3,4], [4,5], [5,10] 일 경우 총 4개의 미사일이 필요 ex) [1,5], [2,4], [5,10] 일 경우 총 2개의 미사일이 필요 2. 내가 한 시도 처음에는 감이 잡히질 않아서 서치를 해봤는데, 정렬을 하면 쉽게 풀리는 문제라는 힌트를 얻고, 그것을 통해 해결하였다. 개구간 s,e 아무거나 골라서 정렬을 하고, 순회하면서 범위내에서 해결하지 못하면 미사일을 추가하는 방식으로 푸는 방식이었다. 나 같은 경우에는 개구간 s를 기준으로 내림차순 정렬하여 풀이를 진행하였다. 3. 코드 public class.. 2023. 8. 9.
[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.
[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.
[pg] 프로그래머스 신규아이디 추천 1. 문제 정의 유저가 신규아이디를 만들 때 회사에서 정한 규칙에 맞지 않는다면 그 규칙에 맞게 수정해주어야 하는 문제. 처음에 String값이 매개변수로 넘어오며, 규칙은 총 7단계이다. 1. 소문자로 통일 2. 소문자, 숫자, 빼기, 언더바, 마침표를 제외한 모든 문자 제거 3. ..으로 연속된 부분있으면 .으로 치환 4. 마침표가 처음이나 끝에 존재하면 둘다 제거 5. 이 때 빈문자열이면 a 대입 6. 현재 16자 이상이면 15자까지만 남기고 나머지 제거 7. 현재 2자 이하라면 3자까지 반복해서 맨 마지막 글자를 추가 2. 나의 시도 처음에는 문제에 있는 순서를 바꿔서 풀려고 진행했는데, 잘 풀리지 않아서, 다시 문제가 요구하는 단계별로 로직을 구성하였더니, 모든 테스트케이스가 통과되었다. 문제에.. 2023. 8. 1.