개발지/코테 (23) 썸네일형 리스트형 [프로그래머스] 코테연습 - 성격 유형 검사하기 (lv.1) - 내 방법 풀이 초이스배열을 순회하며, 유형당 점수를 줄 생각을 했다. 점수는 Map을 사용할까 하다가, 배열로 저장하는 방법을 선택했다. survey를 보며, 동의/비동의를 결정하여 점수를 더해주기 위해, checkType으로 리턴한 String의 charAt메서드로 점수를 더해줄 유형을 찾았다. 이후 점수를 비교해서 answer에 더해주는 식. class Solution { public String solution(String[] survey, int[] choices) { String answer = ""; int[] typeScore = new int[8]; // 초이스 배열 순회, 숫자에 따라 성격유형당 점수 증가. // 성격유형은 어떻게? 일반 배열로 하자. {R, T, F, C, M, J,.. [프로그래머스] 코테연습 - 튜플(lv.2) - 내 방법 풀이 (https://deokkk9.tistory.com/48) 문제를 이해하는 것부터 어려웠고, 질문하기에서 힌트를 얻었지만, 결국 다른 사람의 풀이를 참고하게 되었다. HashMap을 사용하여, 튜플배열에 등장하는 a1부터 an까지 구해 answer배열에 넣어주려고 했지만, Hashmap에서 value 기준으로 key를 정렬 할 때 오류가 낫고, 문자열 다루는 것이 매끄럽게 되지 않았다. 스트림과 람다식에 익숙해질 필요를 느꼈다. 잘 다룰수록, 필요한 부분에서 깔끔한 코드를 가져올 수 있는거 같다. import java.util.*; class Solution { public int[] solution(String s) { int[] answer = {}; s = s.replaceAll(.. [프로그래머스] 코테연습 - 신고 결과 받기 - 내 방법 풀이 처음 시간 초과가 난 코드이다. 신고 당한 횟수가 k번 이상인 유저의 신고자들의 메일을 보내는 것이, 정말 헷갈렸다. 어떻게 구현해야 할 지 모르겠어서 생각나는데로 hashSet을 순회하며 answer[idx]를 증가시켰지만 3 9 10 11 14 20 21번 총 6개의 케이스에서 시간 초과가 되었다. import java.util.*; class Solution { public int[] solution(String[] id_list, String[] report, int k) { int[] answer = new int[id_list.length]; Set hashSet = new HashSet(); for (String S : report) { hashSet.add(S); } Ha.. [프로그래머스] 코테연습 - 스킬트리 - 내 방법 풀이 처음에 인덱스를 비교하여 풀 생각을 하였다. 필수 스킬트리를 따라 인덱스가 주어지므로, skill_trees를 순회하며 각 스킬의 인덱스와 skill의 인덱스를 비교하려고 했지만 앞선 스킬중에 무관한 스킬이 포함되어 있을 때 답을 낼 수가 없기 때문에 다른 적용을 찾아야 했다. 따라서 replaceAll과 정규식을 활용하여 필수 스킬 외에 상관없는 스킬을 제거하고, 남은 skill_tree와 skill의 인덱스를 비교하며, 해당 스킬이 skill의 인덱스와 같지 않다면, 제대로 스킬트리를 배우지 못한 것이므로 answer를 증가시키지 않았다. class Solution { public int solution(String skill, String[] skill_trees) { int an.. [프로그래머스] 코테연습 - PCCE 기출문제 10번 / 데이터 분석 - 내 방법 풀이 스위치문을 최근에 많이 사용한다. 정렬기준은 총 2가지(String ext, String sort_by)가 나오므로, 정렬기준의 인덱스를 주어진 자료의 인덱스로 반환하는 메서드를 만들었고, 그것에 따라 먼저 ext가 val_ext보다 작은 것을 dataList에 추가한다. 이후 다시 sB메서드를 사용해서 정렬기준 index를 구한 뒤 Comparator.sort를 통해 오름차순으로 정리해주었다. import java.util.*; class Solution { public int[][] solution(int[][] data, String ext, int val_ext, String sort_by) { List dataList = new ArrayList(); for (int [] dt.. [프로그래머스] 코테연습 - 크레인 인형뽑기 게임(lv.1) - 내 방법 풀이 예전에 이 문제를 읽고 풀 방법을 생각하다가 못 풀고 남겨남었었다. 오늘 다시 보니, 스택을 활용해서 푸는 문제였고 기초적인 문제.. 아직 나는 한참 멀었나보다. 처음에는 인형이 쌓여있는 한줄마다 stack을 생성해야 했는데, 그렇게 풀었으면 메모리사용이 너무 컸을 거 같다. 다행히 굳이 그렇게 풀지 않아도 되는 것을 발견해서 풀이 방향을 수정했다. moves의 숫자에 해당하는 줄을 위에서부터 이차배열을 내려가면서 조회하고, 0은 패스. 숫자는 스택에 넣어주며 같은 인형인지 확인하여 인형을 삭제한다. 스택은 인형을 검사할 1개면 충분했고, 나머지는 반복문과 조건문으로 푸는 간단한 문제였다. import java.util.*; class Solution { public int soluti.. [프로그래머스] 코테연습 - 오픈채팅방(lv.2) - 내 방법 풀이 문제를 읽고, Id값과 닉네임을 보고, HashMap을 사용하면 되겠다는 생각이 들었다. 먼저 record를 읽으면서 유저 아디와 닉네임을 (key,value) 값으로 저장하되 맨 앞 단어가 Enter와 Change일 경우에 add하는 조건을 걸었다. 왜나하면 Leave는 아이디 값만 가지고 있어 닉네임 값이 없기 때문이었다. 위의 과정을 통해 최종 변경된 값만 가지고 있는 고유ID와 닉네임 Map을 얻게 되었고, 다시 한 번 record를 조회하면서 첫 단어를 switch문으로 가져와서 각 경우에 맞는 메시지를 저장하도록 코드를 구성했다. 최종변경된 메시지만 출력하면 되므로 복잡한 과정없이 2번의 record 조회로 문제를 풀 수 있었다. 효율성 측면에서도 record의 최대 길이 *.. [프로그래머스] 코테연습 - 공원 산책(lv.1) - 내 방법 풀이 레벨 1의 문제였고, 조건도 간단했지만 생각보다 코드로 구현해내기가 복잡했던 것 같다. 동 서 남 북 4방향의 선택지가 있었고, 방향에 따라 행동제약에 걸어줘야할 조건문이 달라졌기 때문에 중간중간 헷갈려서 몇 번이나 코드를 고쳐야 했다. 처음 생각한 방법으로 코드를 구현해 냈으며, 복잡할 땐 그림을 그리고 예시를 따져가며 썼다. route를 실행할 수 없다면 다음 route를 실행해야 하기 때문에, 먼저 boolean으로 이동할 수 있는지 검사하는 메서드를 만들었고, 인수에 따라 다른 조건문을 따라 가도록 했다. 이후 해당 route를 실행할 수 있다면 로봇 위치를 조정해 주었는데, 알고 보니 최초 로봇 위치가 park배열 안에 S로 주어졌다. 그래서 최초 위치를 검사하는 로직을 추가한.. [프로그래머스] 코테연습 - 124 나라의 숫자(lv.2) - 내 방법 풀이 10진수를 3진수로 바꾸되 표현을 (1, 2, 4) 숫자로만 표현하면 되는 문제였다. 10진수를 N진법으로 바꿀 때, 숫자를 N으로 나눈 나머지를 순서대로 읽으면 되므로, 문제에서 주어진 n을 3으로 나눈 나머지에 따라 answer에 차례대로 더해주는 switch문을 사용했다. 10진수를 다만 3진법 전환할 때 이전 계산에서 나누어 떨어졌다면 n--;를 실행시켜준다. ( n이 나누어 떨어졌을 때, 그 다음 몫에서 1의 자리를 당겨주기 위해서.) class Solution { public String solution(int n) { String answer = ""; while (n > 0) { int temp = n % 3; n /= 3; switch (temp) { case 0: an.. [프로그래머스] 코테연습 - N개의 최소 공배수(lv.2) - 내 방법 풀이 코드보다는 수학&논리적 사고가 필요했던 문제. (중학교 때인가, N개의 수를 각각 인수분해하여 구하는 방법이 생각난다) 유클리드 호재법을 사용하여 두 수의 최대공약수를 구한 뒤, 최소공배수를 구하는 방법인 (두 수의 곱)을 (두 수의 최대공약수)로 나누어 구한다. 앞에서부터 차례대로 최소공배수를 구하는 식으로 나간다. class Solution { int answer = arr[0]; for (int i = 1; i < arr.length; i++) { answer = answer * arr[i] / gcd(answer, arr[i]); } return answer; } public int gcd(int a, int b) { if(b == 0) return a; return gcd(b,.. 이전 1 2 3 다음 목록 더보기