알고리즘

내 풀이 class Solution { public int solution(int[] bandage, int health, int[][] attacks) { // t초 동안 붕대를 감으면서 1초마다 x만큼의 체력을 회복함 // t초 연속으로 붕대를 감는데 성공하면 y만큼의 체력을 추가로 획득 // seconds == t -> +y // 공격당하면 취소당하고 // 당하는 순간에는 붕대 못감음 // 취소되면 붕대감기 연속 성공 시간 0으로 초기화 // 피해량 만큼 줄어들고 0 이하면 죽고 체력 회복 안됨 // bandage = 붕대감기 기술 정보 [t,x,y] = [붕대감기 시전 시간, 초당 회복량, 추가 회복량] // health = 최대 체력 // attacks = 공격 패턴 attacks[i] = [공..
[⭐항상 새겨두어야할 공부 방법⭐] - 다른 사람한테 설명 가능해야 함! (설명 못하면 제대로 이해 못한거) - 항상 구조적으로 생각하고 이해하기 ( 왜 이렇게 되는지 ) - 하고 많은 다양한 똑같은 것들 중에서 왜 이걸 사용하는지? Nest.js 를 공부하다가 본 내용인데 Nest에서 "모듈 이벤트는 위상 정렬(Topological Sort)을 거쳐 거리에 따라 정렬된 후, onModuleInit를 호출한다" 라고 해서 위상정렬이 뭔지 한번 찾아봤다!! 위상정렬은 쉽게말해서 "순서가 정해져있는 작업을 차례대로 수행해야 할 때 그 순서를 결정해주기 위해서" 사용하는 알고리즘이다! - 위상 정렬은 여러가지 답이 존재할 수 있다! - DAG(Directed Acyclic Graph)에만 적용할 수 있음..!
이전 게시물.. ( 버블정렬의 개념!!) https://jihoon2723.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B2%84%EB%B8%94%EC%A0%95%EB%A0%ACbubble-Sort [알고리즘] 버블정렬(bubble Sort) 알고리즘을 공부를 시작해보려고 한다..! 평소에 조금씩이라도 해야할것 같다는 생각이 들었다. 버블정렬을 알아보니 평소에 생각없이 쓰던 정렬 방법이였다는것을 알았다..! 이제는 무엇이든 jihoon2723.tistory.com 버블정렬에 대해 공부하다가.. 구현하기 쉬워서 사용하긴 했었는데 공부하다보니 그렇게 효율적인 방법은 아니라는 생각이 들었다.. 그래도.. 버블정렬을 필요한 시점이 있지않을까? 싶어서 ..
알고리즘을 공부를 시작해보려고 한다..! 평소에 조금씩이라도 해야할것 같다는 생각이 들었다. 버블정렬을 알아보니 평소에 생각없이 쓰던 정렬 방법이였다는것을 알았다..! 이제는 무엇이든 알고 사용하도록 하자..!! [⭐항상 새겨두어야할 공부 방법⭐] - 다른 사람한테 설명 가능해야 함! (설명 못하면 제대로 이해 못한거) - 항상 구조적으로 생각하고 이해하기 ( 왜 이렇게 되는지 ) - 하고 많은 다양한 똑같은 것들 중에서 왜 이걸 사용하는지? 항상 무엇을 학습하든 위 내용을 생각하면서 살아야지..! 본론으로... 버블정렬 프로세스 - 첫 번째 원소와 두 번째 원소 비교하고, 두 번째 원소와 세 번째 원소를, 세 번째와 네 번째....~~ 이런식으로 마지막-1 번째 원소와 마지막 원소 까지 비교하여 서로 ..
오늘도 어김없이 해시와 친해지기 위해 해시문제를 도전!! 저번에 올렸던 해시 레벨1 문제를 기억하면서 풀어보기 도즈언!! 문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return하도록 solution함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존..
Hash함수에 대해 이해도를 높이기 위해 Hash문제를 다시 풀어보았다. 나는 처음에 해시를 몰라 배열로 접근하였지만, 해시를 사용하면 속도나 효율성 측면에서 더 나은것 같아서 다시 해시를 정확히 이해할 때 까지 차근차근 문제를 접해보겠다. 문제설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participan..
해시에 대한 이해를 높이기 위해 이 문제에 도전했다. 그런데 우선 나는 해시함수에 대해 모르는게 많았고 이해도 잘 못하고 있었다. 그래서 우선 문제를 풀고 다른 사람들이 풀어놓은 코드를 보면서 이해를 높이기로 하였다. 문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 점두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solu..
동적 계획법은 큰 문제를 작은 문제로 나눠서 최종 문제를 해결하는 알고리즘이다. 작은 문제를 처리할 때 수행되는 답을 저장해 놓고 다음번에 필요할 때 그 값을 불러와서 처리한다. 재활용 개념이라고 이해하면 쉽다. 분할 정복과 비슷한 개념이지만 분할 정복과 동적 계획법의 차이점은 분할 정복에서의 쪼개진 작은 문제들은 중복되지 않지만 동적 계획법에서 쪼개진 문제는 서로 연관성이 있다는 점이다. (분할 정복에 대해서는 나중에 공부한 후 포스팅 예정입니다.) 개념 동적 계획법은 문제를 풀 때 하나의 문제를 여러 하위 문제로 나누어 풀고, 그것들을 결합해서 최종 목적에 도달하는 방식의 알고리즘입니다. 피보나치 수열을 재귀로 표현했을 때 결함이 생기는데 이를 동적 계획법으로 보완한 사례를 보면서 알아 보겠습니다. ..
이건 내가 풀었다..!! 그렇지만 다른 분들의 코드를 보니 더 효율적인 게 많았다. 나는 반복문을 이용한 방법을 생각했다! 그런데 다른 분들은 replace , substring 등 함수를 이용하여 더 효율적이고 간단한 알고리즘을 구축하였다. 보고 배워야지! 우선 문제를 보자! 문제 문제 설명 길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를 들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다. 제한 조건 n은 길이 10,000 이하인 자연수입니다. 입출력 예 nreturn 3 "수박수" 4 "수박수박" 나의 코드 class Solution { public String solution(int n) { String ..
Map 중에서 HashMap에 대해 알아보자! [HashMap, TreeMap, LinkedHashMap]과 같은 Map들이 있다. 각 Map의 사용법, 차이점은 다음에 알아보자! 오늘은 HashMap!! Map인터페이스란? Map인터페이스는 키(Key)와 데이터(Value) 값을 한 쌍으로 묶어서 저장하는 컬랙션 클래스를 구현하는 데 사용된다. 키(Key)의 중복을 허용하지 않지만 값(Value)의 값은 중복을 허용합니다. 그 이유는 값(Value)을 추출하기 위해서는 키(Key)객체에 대응하는 값(Value) 객체를 반환하는데 중복된 Key객체가 있을 경우 어떠한 키(Key) 객체를 가져와야 할지 모르기 때문이다. (사진 및 내용참고 출처:https://2018-start.tistory.com/33)..
나는이지훈
'알고리즘' 카테고리의 글 목록