본문 바로가기

프로그래밍/알고리즘 문제풀이24

[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.
[pg] 프로그래머스 숫자 문자열과 영단어 1. 문제 정의 이번 문제는 굉장히 쉽다. 문자열안에 영어로 적혀있는 숫자를 아라비아 숫자로 변환해주기만 하면 된다. ex) "zero12" -> "012" 2. 나의 시도 문제를 보고 맵이 떠올라 맵을 만들고 맵을 순회하면서 문자열에 있는 알파벳을 아라비아숫자로 변경하였다. 3. code /** * 프로그래머스 LV1 * 숫자 문자열과 영단어 * 접근 방법: 문자열과 숫자를 map으로 만들고, map을 순회 하면서 key값에 해당하는 문자열은 숫자로 바꾸는 형식으로 진행. */ public class Solution { public int solution(String s) { Map translator = new HashMap(); translator.put("zero","0"); translator... 2023. 8. 1.
[pg] 프로그래머스 신고 결과 받기 0. 개요 이 문제는 이전에 자료구조 지식과 알고리즘 지식이 없다시피 하던 시절 무작정 도전해서 풀어봤던 문제다. 그때에는 맵을 무려 3개나 사용해서 간신히 간신히 풀었던 기억이 있는데, 이번에 코테를 준비하면서 다시 한번 풀어보게 되었다. 나도 쥐똥만큼은 성장한 것인지, 문제를 보고 얼마 지나지 않아 해결방법이 떠올랐다. Person이라는 객체를 만들어서 해결하면 좋겠다고 생각하고, 코딩을 시작했다. 1. 문제 정의 이 문제는 유저들의 유저ID가 있고, 그 유저가 다른 유저를 신고했을 경우 신고당한 유저의 신고횟수가 증가하여(여러번 신고할시에는 1번만 신고한 것으로 간주된다.), 신고횟수가 최종적으로 메서드에 k라는 매개변수로 주어지는 값과 같거나 더 크면 그 유저를 신고한 유저들에게 결과 메일이 발송.. 2023. 7. 27.