Algorithm/풀이 회고 16

[Java/프로그래머스] 메뉴 리뉴얼

/* * 2021.06.28 * PGM 메뉴 리뉴얼 https://programmers.co.kr/learn/courses/30/lessons/72411 * 단품 -> 코스요리, 최소 두명이상이 가장많이 함께 주문한 단품메뉴가 기준 * 최소 2개이상으로 구성 * 입력이 뭐가 올지 모르니 다 해봐야하고, 각 order를 course개수만큼 조합 * 각 order가 정렬되어 들어오기 때문에 오름차순으로 조합하여 해결 * 그 조합들을 HashMap으로 카운트해서 각 숫자에 맞는 max를 찾는다. * 최소 두명이상이 해당 조합을 주문해야한다는 조건은 사실 한 사람안에서는 중복이 없으니 2 이상이면 된다. * 문제에서 course가 정렬되어있다고 했는데 나는 order들이 각각 정렬되어있는 줄 알았다. * 51분..

[Java/프로그래머스] 튜플

/* * 2021.06.28 * PGM 튜플 https://programmers.co.kr/learn/courses/30/lessons/64065 * 중복없는 원소 배열이 주어질 때, * 중복o, 순서o * 일단 입력으로 주어진 s 파싱이 문제 : s.split("[^0-9]+")로 해결 * split한 결과의 인덱스 0에 빈문자열이 생기는 이유는?? * Map으로 등장횟수를 세어준다. * 그리고 등장횟수를 기준으로 정렬해서 리턴해야하기 때문에 클래스만들고 등장횟수로 정렬한다 * 숫자를 String으로 처리했으니 마지막에 답 낼 때는 숫자로 파싱해주는 것 잊지말자! * 31분 */ import java.util.*; class Solution { public int[] solution(String s) ..

[Java/프로그래머스] 뉴스 클러스터링

/* * 2021.06.27 * PGM 뉴스 클러스터링 https://programmers.co.kr/learn/courses/30/lessons/17677 * 각 문자열 한글자씩 이동하며 두글자씩 자르며 갯수 맵(key : 두글자, value : 갯수)을 만들고 * (이때 모두 소문자화하고, 특수문자는 제외) * 교집합과 합집합 맵을 만든다. 이 단계가 이 문제의 핵심 * 유사도 구하고 65536 곱하고 정수부만 답으로 낸다. * 중복집합에서의 map.size()는 원소의 종류 개수다. * 그래서 중복집합에서 원소의 총 개수 != 원소의 종류 개수다. * 원래 집합에서는 원소의 총 개수 == 원소의 종류 개수 라서 헷갈렸다. 이것 때문에 삽질해서 시간 많이 버렸다. * double과 int 형변환을 자..

[Java/프로그래머스] 수식 최대화

/* * 2021.06.27 * PGM 수식 최대화 https://programmers.co.kr/learn/courses/30/lessons/67257 * 어떤 숫자가 올지 모르고 다해봐도 최대 3! * 100 정도밖에 안되므로 브루트포스로 해결 * 연산자 3개의 우선순위를 커스텀하는 계산기를 구현하는 게 이 문제의 핵심인듯 하다. * 우선순위 커스텀한 후위표기법으로 변환 -> 계산 * 모든 경우 다해보기 : 재귀함수 (placeAll) * 후위표기법으로 변환 : 숫자는 그냥 넣고, 연산자는 스택에 넣는데, 우선순위 높은 연산자들은 스택에서 뺀다.(makePostfix) * 계산 : 후위표기법을 그대로 계산 (calcPostfix) * 주의 : split 쓸때는 내 의도와 맞는지 출력해보자 돌다리도 두..

[Java/프로그래머스] 오픈채팅방

package PGM_Level2; /* * 2021.06.27 * PGM 오픈채팅방 https://programmers.co.kr/learn/courses/30/lessons/42888?language=java * 1-100,000 * Enter, Change, Leave 명령어, uid, 이름(중복가능) 세가지로 이루어진 record * uid로 사람을 조회한다. -> 즉 uid는 중복x이므로 Set으로 관리 * uid가 key, nick이 value인 Map과, order와 uid를 담는 리스트를 만들어준다. * Map에 uid가 없는데 order가 Enter면 Map uid에 nick 넣어주고 리스트에 추가, * Map에 있는데 Enter면 Map에서 uid로 nick만 바꿔주고 리스트에 추가, ..

[Java/프로그래머스] 문자열 압축

/* * 2021.06.26 * PGM 문자열 압축 https://programmers.co.kr/learn/courses/30/lessons/60057# * 입력 String을 1이상의 단위로 잘라서 연속하면 연속한만큼 숫자붙이고 * 하나로 줄이는데, 이때 압축이 많이된(압축결과 길이가 가장 짧은) 문자열의 길이가 답 * 입력에 따라 답을 알 수 없고, 길이가 최대 1000이므로 1000*500이면 다 해볼만하니 브루트포스로 풀었다. * 입력길이가 1000일 때 500까지만 해보면 되는 이유는 압축하려면 최소 두번은 연속해야해서다. * 반복회수가 두 자리수 이상인 것은 왜 생각 못했을까.. 한자리 수인 것만 생각하고 풀었다.. * 배열 앞뒤 비교해가며 조건에 맞으면 카운트하고 한 라인 다돌면 정답 갱신..