블로그
전체 52021. 07. 27.
0
알고리즘 문제풀이 For Java - 7월21일
스터디일지 : 2021-07-21 수요일 사람들 이번주 주제 : 리트코드 참석인원 : 동, 연, 새리, 시온, 산희 ,케이(사전 순 6명) 진행시간 : 19시~22시(3시간) 알고리즘 문제들 리트코드 문제내역 1 : Squares of a Sorted Array 2 : Remove All Adjacent Duplicates In String 3 : Truncate Sentence 4 : Minimum Time Visiting All Points 5 : Replace All Digits with Characters 리트코드 문제 선정 기준 그동안 그냥 순서대로 쭉 풀어봤는데, 리트코드 문제마다 좋아요/싫어요 문제 평가가 있는데, 좋아요가 적고 싫어요가 많을수록 그러니까 좋싫비가 나쁠수록 문제가 재미도 감동도 의미도 없고 설명도 부실해서 이상하다는 느낌을 받는게 부지기수였다. 그래서, 이번 회차부터는 좋실비 좋은걸로, 최소 좋아요가 더 많은 문제들이고, 되도록이면 좋아요 5 : 싫어요 1 비율정도의 문제를 선정해서 푸니 훨씬 코딩의 참재미를 느낄 수 있었다 문제풀이 현황판 번호 동 연 새리 시온 산희 케이 1 링크 O X O O O O 2 링크 O O O O X O 3 링크 O O O X O O 4 링크 X O O X X O 5 링크 O O O O O O 제출코드 순서대로 새리, 시온, 동, 연, 산희, 케이 각각 2문제씩 연 package pass; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class TruncateSentence { public static String truncateSentence(String s, int k) { String[] strArr = s.split(" "); Arrays.stream(strArr).forEach(System.out::println); List strList = Arrays.stream(strArr).limit(k).collect(Collectors.toList()); StringBuilder answer = new StringBuilder(); for (int i = 0; i package pass; import java.util.Arrays; public class SquaresOfASortedArray { // 977번 // 제곱해서 오름차순 정렬하기 public static int[] sortedSquares(int[] nums) { return Arrays.stream(nums) .map(a -> (int) Math.pow(a, 2)) .sorted() .toArray(); } public static void main(String[] args) { int[] array = sortedSquares(new int[]{-4, -1, 0, 3, 10}); Arrays.stream(array).forEach(System.out::println); } } package pass; public class MinimumTimeVisitingAllPoints { // 배열의 순서대로 point를 다 거쳐야 함, 최소 시간으로 // 최단 거리 구하기..? public static int minTimeToVisitAllPoints(int[][] points) { int count = 0; for (int i = 0; i public class RemoveAllAdjacentDuplicatesInString { // 다시 풀기 // 연속된 중복된 문자를 지워라, 더이상 지울게 없을때 까지 진행한다. public static String removeDuplicates(String s) { // List list = new ArrayList(); // for (int i = 0; i 새리 //Squares of a Sorted Array class Solution { public int[] sortedSquares(int[] nums) { int[] answer = new int[nums.length]; for (int i = 0; i //Remove All Adjacent Duplicates In String class Solution { public String removeDuplicates(String s) { Stack str = new Stack(); str.push(s.charAt(0)); for (int i = 1; i //Truncate Sentence class Solution { public String truncateSentence(String s, int k) { String[] strings = s.split(" "); StringBuilder sb = new StringBuilder(); for (int i = 0; i //Minimum Time Visiting All Points class Solution { public int minTimeToVisitAllPoints(int[][] points) { int answer = 0; for (int i = 0; i //Replace All Digits with Characters class Solution { public String replaceDigits(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i 시온 //977 class Solution { public int[] sortedSquares(int[] nums) { int[] answer = new int[nums.length]; for (int i = 0; i //8:35 //1047 class Solution { public String removeDuplicates(String s) { for (int i = 0; i //1816 class Solution { public String truncateSentence(String s, int k) { String[] splited = s.split(" "); String[] klength = new String[k]; for (int i = 0; i // //1266 class Solution { public int minTimeToVisitAllPoints(int[][] points) { int times = points.length; int sum = 0; for (int i = 0; i 동 아 내코드.. 어디있지.. ㅠㅠ >> 내 깃헙 레포 전체를 DFS탐색해서 찾을수 있을꺼같당 ㅎㅎ; 원래 엄마는 애기들 밥먹이느라 제일 늦게먹거나 밥을 잘 못먹는다는데 고런느낌~ 어딧는지 모르겠음 ㅎㅎ 어미새의 마음으로 나중에 찾으면 업로드할예정
2021. 07. 08.
0
알고리즘 문제풀이 For Java - 707 스터디일지
스터디일지 : 2021-07-07 목요일 사람들 이번주 주제 : 리트코드 참석인원 : 동, 연, 새리, 시온, 산희 ,케이(사전 순 6명) 진행시간 : 19시~21시(3시간) 알고리즘 문제들 리트코드 문제내역 1: https://leetcode.com/problems/subdomain-visit-count/ 2: https://leetcode.com/problems/middle-of-the-linked-list/ 3: https://leetcode.com/problems/counting-bits/ 4: https://leetcode.com/problems/reverse-string/ 리트코드 문제 선정 기준 그동안 그냥 순서대로 쭉 풀어봤는데, 리트코드 문제마다 좋아요/싫어요 문제 평가가 있는데, 좋아요가 적고 싫어요가 많을수록 그러니까 좋싫비가 나쁠수록 문제가 재미도 감동도 의미도 없고 설명도 부실해서 이상하다는 느낌을 받는게 부지기수였다. 그래서, 이번 회차부터는 좋실비 좋은걸로, 최소 좋아요가 더 많은 문제들이고, 되도록이면 좋아요 5 : 싫어요 1 비율정도의 문제를 선정해서 푸니 훨씬 코딩의 참재미를 느낄 수 있었다 문제풀이 현황판 번호 동 연 새리 시온 산희 케이 1 링크 O X O O O O 2 링크 O O O O X O 3 링크 O O O X O O 4 링크 X O O X X O 5 링크 O O O O O O 제출코드 순서대로 새리, 시온, 동, 연, 산희 케이 각각 2문제씩 Subdomain Visit Count class Solution { public ListString> subdomainVisits(String[] cpdomains) { MapString, Integer> counter = new HashMap(); for (String domains : cpdomains) { int count = Integer.parseInt(domains.split(" ")[0]); String domain = domains.split(" ")[1]; for (int i = domain.length() - 1; i >= 0; i--) { if (i == 0 || domain.charAt(i - 1) == '.') { String subDomain = domain.substring(i); if (!counter.containsKey(subDomain)) { counter.put(subDomain, count); } else { counter.replace(subDomain, counter.get(subDomain) + count); } } } } ListString> answer = new ArrayList(); for (Map.EntryString, Integer> entry : counter.entrySet()) { answer.add(entry.getValue() + " " + entry.getKey()); } return answer; } } //2. Middle of the Linked List class Solution { public ListNode middleNode(ListNode head) { ListNode temp = head; int counter = 1; int mid = 0; while (temp.next != null) { counter++; temp = temp.next; } mid = counter / 2; if (counter % 2 == 0) { mid = counter / 2; } temp = head; while (mid != 0) { temp = temp.next; mid--; } return temp; } } //3. Counting Bits class Solution { public int[] countBits(int n) { int[] answer = new int[n + 1]; for (int i = 0; i n; i++) { answer[i] = Integer.bitCount(i); } return answer; } } //4. Reverse String class Solution { public void reverseString(char[] s) { char temp = ' '; int mid = s.length / 2 - 1; if (s.length % 2 == 0) { mid += 1; } for (int i = 0; i s.length / 2; i++) { temp = s[i]; s[i] = s[s.length - i - 1]; s[s.length - i - 1] = temp; } } } public class Solutaion338 { public int[] countBits(int n) { int[] answer = new int[n + 1]; for (int i = 0; i n; i++) { int getCountOne = getCntOne(i); answer[i] = getCountOne; } return answer; } private int getCntOne(int i) { return getCntOneRecursive(i, 0); } private int getCntOneRecursive(int i, int cntOne) { if (i == 0) { return cntOne; } else { if (i % 2 == 0) { return getCntOneRecursive(i / 2, cntOne); } else { return getCntOneRecursive(i / 2, cntOne + 1); } } } } package leetcode; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class Solution811 { public ListString> subdomainVisits(String[] cpdomains) { MapString, Integer> counter = new HashMap(); for(String cur : cpdomains) { String[] f1 = cur.split(" "); int visitCounter = Integer.parseInt(f1[0]); String[] token = f1[1].split("."); for(int i=0 ; itoken.length ; i++) { String subDo = tokStrSum(token.length, i,token); if(counter.containsKey(subDo)) { int temp = counter.get(subDo); counter.put(subDo, temp + visitCounter); }else { counter.put(subDo,visitCounter); } } } ListString> answer = new ArrayList(); //counter.keySet().toArray() //String[] hou = counter.keySet().toArray(); for(String s : counter.keySet()){ answer.add(String.format("%d %s",counter.get(s),s)); } //for(int i=0 ; i // answer.add(String.format("%d %s",counter.get(hou[i]),hou[i])); //} return answer; } private String tokStrSum(int length, int cnt, String[] token) { StringBuilder builder = new StringBuilder(); for(int i=cnt ; ilength ; i++) { builder.append(token[i]); if(i != length-1) { builder.append("."); } } return builder.toString(); } public static void main(String[] args) { Solution811 s = new Solution811(); s.tester(new String[] {"9001 discuss.leetcode.com"}, new String[] { "9001 discuss.leetcode.com", "9001 leetcode.com", "9001 com" }); } public void tester(String[] in, String[] ans) { ListString> response = subdomainVisits(in); if(response.toString().equals(Arrays.toString(ans))) { System.out.println("OK"); } System.out.println("NG"); System.out.println("ANSWER : "+Arrays.toString(ans)); System.out.println("EXPECTED : " + response.toString()); } } package leetcode; class ListNode { int val; ListNode next; private ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; } } public class Solution876 { public ListNode middleNode(ListNode head) { int len = getlen(head,0); return getAnswer(head,len/2); } private ListNode getAnswer(ListNode next, int tar) { if(tar==0) { return next; } else { return getAnswer(next.next,tar-1); } } private int getlen(ListNode next,int len) { if(next==null) { return len; } else { return getlen(next.next,len+1); } } } //876 class Solution { public ListNode middleNode(ListNode head) { ListNode next = head.next; int totalLength = 1; // head 있다고 가정 while (next != null) { totalLength++; next = next.next; } if (totalLength == 1) { return head; } next = head.next; ListNode middleNode = null; int targetLength = totalLength / 2; int length = 1; while (length != targetLength) { next = next.next; length++; } middleNode = next; return middleNode; } } //338 class Solution { public int[] countBits(int n) { int[] result = new int[n + 1]; for (int i = 0; i n; i++) { String binary = Integer.toBinaryString(i); binary = binary.replaceAll(“0”, “”); result[i] = binary.length(); } return result; } }
2021. 06. 27.
0
알고리즘 문제풀이 For Java - 3회차
스터디일지 : 2021-06-27 일요일 이번주 주제 : 해시 참석인원 : 동, 연, 새리, 시온, 히로 ,케이( 6명) 진행시간 : 10시~13시(3시간) 프로그래머스 고득점 키트 https://programmers.co.kr/learn/challenges?selected_part_id=12081 번호 링크 동 연 새리 시온 산희 케이 1 정수 제곱근 판별 O O O O O O 2 약수의 합 O X O O O O 3 제일 작은 수 제거하기 O O O O X O 4 정수 내림차순으로 배치하기 O O O X O O 5 자릿수 더하기 O O O X O O 스터디를 진행하며 풀리지 않는 의문점 // note : 왜 정렬이 끝가지 안될까..? 그것이 궁금하다.. public long solution(long n) { String ins = Long.toString(n); String[] arr = ins.split(""); Arrays.sort(arr, new ComparatorString>() { @Override public int compare(String o1, String o2) { return (1 - o1.compareTo(o2)); } }); StringBuilder builder = new StringBuilder(); for(String t : arr) { builder.append(t); } return Long.parseLong(builder.toString()); } 위 코드에서 정렬이 끝가지 안풀린다 >> Dong의 버그코드, 원인과 해결책을 찾으면 공유해주기 제출 코드(표에 표시된 순서로) class Solution { public long solution(long n) { long answer = -1; double doubleSqrt = Math.sqrt(n); int intSqrt = (int)doubleSqrt; return intSqrt == doubleSqrt ? (long)Math.pow(intSqrt+1,2) : -1; } } 케이의 파이썬 풀이 def solution(n): answer = 0 if n==1: return 4 for i in range(0,n,1): if i*i == n : i += 1 return (i*i) elif i*i > n: return -1 else: pass return answer if __name__ == "__main__": print(solution(1)) class Solution { public int[] solution(int[] arr) { if (arr.length == 1) { return new int[]{-1}; } int[] answer = new int[arr.length - 1]; int mini = Integer.MAX_VALUE; for (int elem : arr) { mini = Math.min(elem, mini); } int idx = 0; for (int i = 0; i arr.length; i++) { int elem = arr[i]; if (elem == mini) { continue; } answer[idx] = arr[i]; idx++; } return answer; } } 동의 cpp 풀이 #include string> #include vector> using namespace std; vectorint> solution(vectorint> arr) { vectorint> answer; answer = arr; int len = answer.size(); int min=65535, idx; if(len==1 || len==0 ) { answer.clear(); answer.push_back(-1); return answer; } else { for(int i=0 ; iif(min>answer[i]) { idx=i; min=answer[i]; } } answer.erase(answer.begin()+idx); return answer; } puts("error"); } import java.util.Arrays; import java.util.Comparator; class Solution { public long solution(long n) { String ins = Long.toString(n); //String[] arr = ins.split(""); char[] arr = ins.toCharArray(); Arrays.sort(arr); /* Arrays.sort(arr, new Comparator() { @Override public int compare(String o1, String o2) { //return (1 - o1.compareTo(o2)); if( Integer.parseInt(o1) > Integer.parseInt(o2)) { return 1; } return 0; } }); */ StringBuilder builder = new StringBuilder(); for(int i=0 ; iarr.length ; i++) { builder.append(arr[arr.length-(i+1)]); } return Long.parseLong(builder.toString()); } } 연의 cpp 풀이 #include string> #include vector> #include algorithm> using namespace std; bool inv_aligne (char a, char b) { return a>b; } long long solution(long long n) { long long answer = 0; string s; //convert n -> s s=to_string(n); //sorting sort(s.begin(), s.end(),inv_aligne); //conv s->n answer=stoll(s); return answer; } 자릿수 더하기 : 세리 import java.util.*; public class Solution { public int solution(int n) { int answer = 0; while (n!=0) { answer += n%10; n/=10; } return answer; } } 시온의 씨쁠쁠 풀이 #include iostream> using namespace std; int solution(int n) { int answer = 0,retemp=0; int i=0, j=0,nsize=0,ncpy=0;//10이하 nsize = 1,100이하 = nsize=2 ncpy = n; for(nsize = 0; nsize9 ; nsize++) { if(ncpy 10) { answer = ncpy+answer; break; } else { retemp=ncpy%10; answer = retemp+answer; ncpy=ncpy/10; } } return answer; }
2021. 06. 27.
0
알고리즘 문제풀이 For Java - 2회차
스터디일지 : 2021-06-25 금요일 이번주 주제 : 해시 참석인원 : 동, 연, 새리, 시온, 산희 ,케이(사전 순 6명) 알고리즘 마스터 && 교수님 케이께서 누추한 스터디 캐리해주심 ㄷ ㄷ;; 진행시간 : 19시~22시(3시간) 프로그래머스 고득점 키트 https://programmers.co.kr/learn/challenges?selected_part_id=12081 다른 언어 사용가능한 분들(Cpp, python) 은 다른언어로도 한번씩 더 풀어봄 문제 프로그래머스 플랫폼에서 4문제 해시 관련 문제 풀이함 해시 완주하지 못한선수 전화번호 목록 위장 베스트엘범 문제별 개인 풀이내역 번호 링크 동 연 새리 시온 산희 케이 1 완주하지 못한 선수 O O O O O O 2 전화번호 목록 O O O O O O 3 위장 O O O O X O 4 베스트앨범 X O O X O O 오늘의 알고리즘문제풀이 담당코드 && 발표내용 HASH - 완주하지 못한 선수 by 동 문제 문제 : https://programmers.co.kr/learn/courses/30/lessons/42576 문제 설명 문자열 배열이 2개 주어짐 하나는 참가한 모든 선수의 이름이 (participant) 다른건 완주한 모든 선수의 이름이(completion) 위 두 배열을 비교해 완주하지 못한 선수의 이름을 구하는 문제입니다. 제한 N제한 : 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. 답은 1개 : completion의 길이는 participant의 길이보다 1 작습니다. 중복가능성 : 참가자 중에는 동명이인이 있을 수 있습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 풀이 두가지 풀이법을 생각해볼수 있는데 Hash 자료구조의 특성을 이용해서 participant에서 completion 을 하나하나 삭제하기 participant , completion 둘다 정렬(사전순) 해서 양측에 존재하면 Pass, 한쪽에만 존재하는 문자열이 정답임 이 문제는 효율성도 점검하는데, 위 두가지 풀이중 1번 Hash 자료구조의 특성을 이용하면 전체 연산량은 N번이고, 2번 정렬2번+순차탐색 방식으로 풀면 전체 연산량은 N+LogN*2 정도 된다. 코드 cpp #include string> #include vector> #include algorithm> using namespace std; string solution(vector participant, vector completion) { string answer = ""; sort(participant.begin(),participant.end()); sort(completion.begin(),completion.end()); int len = participant.size(); for(int i=0 ; iif(participant[i] !=completion[i]) { answer = participant[i]; break; } } return answer; } Python3 코드 #test.py from operator import * def solution(participant, completion): answer = '' participant.sort() completion.sort() for i in range(len(completion)) : if participant[i] != completion[i]: answer = participant[i] break if answer == '' : answer = participant[-1] return answer Java 코드 import java.util.*; public class first{ public static void main(String[] args) { Solution mysol = new Solution(); String p1[] = {"leo", "kiki", "eden"}; String c1[] = {"eden", "kiki"}; String ret = mysol.solution(p1,c1); System.out.println(ret); } } class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; Arrays.sort(participant); Arrays.sort(completion); for(int i=0 ; icompletion.length ; i++) { if(!participant[i].equals(completion[i])){ return participant[i]; } } return participant[completion.length]; } } HASH 전화번호 목록 문제 By 연 문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42577 어떤 번호가 ,다른번호의 접두어가 되는지( 77 → 7767) 접두어가 존재하면 True, 아니면 False 제한 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다 풀이 완전탐색 : 유일한 입력인 phone_book의 제한이 백만이므로, 2중포문 n^2로 코딩하면 시간제한에 걸릴수도 있음 → 길이순 정렬이 필요 , 왜냐하면 접두어가 되기 위해서는 항상 짧아야하니까 phone_book 을 문자열의 길이순으로 정렬하고, 짧은거부터 검색을 시작 모든 문자열의 앞부분에 검색문자열이 존재하는지를 일일이 검사 존재한다면 그대로 리턴하고 끝 근데 생각해보니 완탐으로 풀면 N*N/2 인데 그냥 풀렸다. 코드 package progrs; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class Solution42577 { public boolean solution(String[] phone_book) { MapString, Integer> map = new HashMap(); for (int i = 0; i phone_book.length; i++) { map.put(phone_book[i], i); } for (int i = 0; i phone_book.length; i++) { for (int j = 0; j phone_book.length; j++) { if (map.containsKey(phone_book[i].substring(0, j))) { return false; } } } return true; } public static void main(String[] args) { Solution42577 sol = new Solution42577(); sol.solution(new String[]{"12", "123", "1235", "567", "88", "111111", "0", "000000000000"}); } } #include iostream> #include string> #include stack> #include algorithm> #include vector> #include cmath> #include queue> using namespace std; const int DEBUG = 0; bool lcomp(string a, string b) { int la = a.length(); int lb = b.length(); if (la return true; } else if (la > lb) { return false; } else if (la == lb) { return (a else { //이런경우는 없다 return (a bool solution(vector phone_book) { bool answer = true; sort(phone_book.begin(), phone_book.end(), lcomp); int n = phone_book.size(); for (int i = 0; i for (int j = i+1; j int ret = phone_book[j].find(phone_book[i]); //if (0 if (0== ret) { return false; } } } return answer; } 해설 단순 구현문제이므로, 위에서 문제분석을 읽고 그대로 코드를 옮기면 된다. 따라서 이 문제에서는 스니핏 해설이 존재하지 않는다. 로컬에서의 테스트를 위해 테스트코드가 추가된 버전을 수록함. HASH - 위장 by 세리 문제 문제링크 https://programmers.co.kr/learn/courses/30/lessons/42578 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성 풀이 두가지 구현 방법 map 자료구조 : Key:Value 로 clothes배열에다 집어넣고 KEY별 경우의 수 -1(아무것도 안입는경우) 구현 : 어쨋거나 [의상의 종류]와 [의상종류별 가짓수] 두개만 알면 경우의수 따져셔 풀수 있으니까 일일이 중복검사하고, 가짓수를 세서 해결 코드 import java.util.*; class Solution { public int solution(String[][] clothes) { HashMap map = new HashMap(); for (String[] cloth : clothes) { map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1); } int result = 1; for (String key : map.keySet()) { result *= map.get(key) + 1; } return result - 1; } } Hash 베스트엘범 By 시온 수도코드 스니핏 해설 mapint> gnr_playtimes; mapint, int>> bestof_in_gnr 설명 //장르별로 플레이횟수를 구하기 int len = genres.size(); for (int i = 0; i //genres[i] string값을 Key로 plays 를 하나씩 추가 bestof_in_gnr[genres[i]][i] = plays[i]; //## // 이중 map //1차 Key: 장르명 중에서 >>> 2차 Key : plays의 인덱스 } import java.util.*; class Solution { class Song implements ComparableSong> { int id, play; String genre; Song(int id, int play, String genre){ this.id = id; this.play = play; this.genre = genre; } @Override public int compareTo(Song o){ if(this.play == o.play){ return this.id - o.id; } else { return -(this.play - o.play); } } } ArrayListInteger> bestAlbum; ArrayListSong> songList; HashMapString, Integer> genreMap; HashMapString, Integer> albumMap; public int[] solution(String[] genres, int[] plays) { bestAlbum = new ArrayList(); songList = new ArrayList(); genreMap = new HashMap(); albumMap = new HashMap(); for(int i = 0 ; i genres.length ; ++i){ int id = i; int play = plays[i]; String genre = genres[i]; songList.add(new Song(id, play, genre)); if(genreMap.containsKey(genre)){ genreMap.put(genre, genreMap.get(genre) + play); } else { genreMap.put(genre, play); } } Collections.sort(songList, new ComparatorSong>(){ @Override public int compare(Song s1, Song s2){ if(s1.genre.equals(s2.genre)){ return s1.compareTo(s2); } else { return -(genreMap.get(s1.genre) - genreMap.get(s2.genre)); } } }); for(Song song : songList){ if(!albumMap.containsKey(song.genre)){ albumMap.put(song.genre, 1); bestAlbum.add(song.id); } else { int genreCnt = albumMap.get(song.genre); if(genreCnt >= 2) continue; else { albumMap.put(song.genre, genreCnt + 1); bestAlbum.add(song.id); } } } int[] answer = new int[bestAlbum.size()]; for(int i = 0 ; i answer.length ; ++i){ answer[i] = bestAlbum.get(i); } return answer; } } ## Hash 베스트엘범 By 산희 산희가 코드 보내주면 추가예정
2021. 06. 23.
0
알고리즘 문제풀이 For Java - 1회차, 6월23일 스터디
스터디일지 : 2021-06-23 수요일 참석인원 : 동, 연, 새리, 시온, 케이, 산희 (6명) 진행시간 : 19시~22시(3시간) 문제 리트코드 플랫폼에서 4문제 6월 23일 문제별 개인 풀이내역 번호 링크 동 연 새리 시온 케이 산희 1 https://leetcode.com/problems/sort-integers-by-the-number-of-1-bits/ O O O O O O 2 https://leetcode.com/problems/groups-of-special-equivalent-strings/ X O O X O O 3 https://leetcode.com/problems/maximum-depth-of-n-ary-tree/ X X X O X O 4 https://leetcode.com/problems/merge-strings-alternately/ O O O O O O 오늘의 자바 알고리즘문제풀이 회고 동 스벅에서 문풀을 했더니 맨탈 이 흔들려서 실수..?(라는 이름의 뇌절)를 많이했다. 이미 발표하신분 또시키고 ㅠ.ㅠ 요즘 개발을 많이한거 아닌데 약간 눈이 침침(..? 아니 벌써?)한건가 시린건가 약간 아까 무슨 소독차 구름속을 한번 지나서 그런거같기도 하다 ㅠㅠ.. 연 오늘은 콜라를 안마셔도 그럭저럭 퍼포먼스가 나와서 기분이 좋았다 저녁은 맛있는걸 먹었는데 끝나고 라면 한봉지 더 끓여먹으면서 틀린문제를 리뷰해야겠다 새리 트리 자료구조가 생각보다 생각이 나지 않아서 생각외로 힘들었다.. 특히 이번에 나온 리트코드 트리문제는 좀 .. 뭐랄까 로컬에서 테스트 돌리기 좀 많이 난감한 부분이 있었다. 데이터셋 넣기도 힘들고. 시온 일과시간에 자바로 프로젝트를 진행중인데, 오늘 기능 한가를 완성해 풀리퀘를 날리니 긴장이 풀려 힘들었다. 공통풀이문제 : merge-strings-alternately/ 동 class Solution { public String mergeAlternately(String word1, String word2) { char[] answer = new char[word1.length() + word2.length()]; int idx = 0; int p1 = 0; int p2 = 0; int m1 = word1.length(); int m2 = word2.length(); while (answer.length != p2+p1) { if(p1 != m1) { answer[idx] = word1.charAt(p1); idx++; p1++; } if(p2 != m2) { answer[idx] = word2.charAt(p2); idx++; p2++; } } return String.valueOf(answer); } } 연 public class MergeStringsAlternately { public static String mergeAlternately(String word1, String word2) { StringBuilder answer = new StringBuilder(); // 작은 길이 만큼 for 루프 돌기 int length = word1.length() word2.length() ? word1.length() : word2.length(); for (int i = 0; i length; i++) { answer.append(word1.charAt(i)).append(word2.charAt(i)); } if(word1.length() > length) { answer.append(word1.substring(length)); } if(word2.length() > length) { answer.append(word2.substring(length)); } return answer.toString(); } public static void main(String[] args) { System.out.println(mergeAlternately("abcd", "pq")); } } 새리 public String mergeAlternately(String word1, String word2) { char[] char1 = word1.toCharArray(); char[] char2 = word2.toCharArray(); int leng1 = char1.length - 1; int leng2 = char2.length - 1; StringBuilder str = new StringBuilder(); int counter1 = 0, counter2 = 0; while (counter1 leng1 || counter2 leng2) { if (counter1 leng1) { str.append(char1[counter1]); counter1++; } if (counter2 leng2) { str.append(char2[counter2]); counter2++; } } return str.toString(); } 시온 class Solution { public String mergeAlternately(String word1, String word2) { String result = ""; int lowerLength = word1.length() word2.length() ? word1.length() : word2.length(); for (int i = 0; i lowerLength; i++) { result += word1.charAt(i); result += word2.charAt(i); } String restOfWord1 = word1.substring(lowerLength); String restOfWord2 = word2.substring(lowerLength); result += restOfWord1; result += restOfWord2; return result; } } 히로 import java.io.*; class Solution{ public String mergeAlternately(String word1, String word2) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("First string: "); String s1 = br.readLine().toUpperCase(); System.out.print("Second string: "); String s2 = br.readLine().toUpperCase(); if(s1.length() != s2.length()){ System.out.println("Unequal lengths!"); return; } String s3 = ""; int p1 = 0; int p2 = s2.length() - 1; while(true){ if(p1 == s1.length() || p2 0) break; s3 += s1.charAt(p1); s3 += s2.charAt(p2); p1++; p2--; } System.out.println(s3); } }