알고리즘 문제풀이 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<String> strList = Arrays.stream(strArr).limit(k).collect(Collectors.toList());
        StringBuilder answer = new StringBuilder();
        for (int i = 0; i < strList.size(); i++) {
            if (i == strList.size() - 1) {
                answer.append(strList.get(i));
            } else {
                answer.append(strList.get(i)).append(" ");
            }
        }
        return answer.toString();
    }
    public static void main(String[] args) {
        System.out.println(truncateSentence("Hello how are you Contestant", 4));
    }
}
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 < points.length - 1; i++) {
            int[] start = points[i];
            int[] end = points[i + 1];
            count += Math.max(Math.abs(start[0] - end[0]), Math.abs(start[1] - end[1]));
        }
        return count;
    }
    public static void main(String[] args) {
        System.out.println(minTimeToVisitAllPoints(new int[][]{{1, 1}, {3, 4}, {-1, 0}}));
    }
}
public class RemoveAllAdjacentDuplicatesInString {
    // 다시 풀기
    // 연속된 중복된 문자를 지워라, 더이상 지울게 없을때 까지 진행한다.
    public static String removeDuplicates(String s) {
//        List<String> list = new ArrayList<>();
//        for (int i = 0; i < s.length(); i++) {
//            list.add(s.charAt(i) + "");
//        }
//        list.forEach(System.out::print);
//        System.out.println();
//        s = list.stream().distinct().collect(Collectors.joining());
//        System.out.println(s);
        StringBuffer str = new StringBuffer(s);
        boolean isUnique = false;
        while (!isUnique) {
            int count = 0;
            for (int i = 0; i < str.length() - 1; i++) {
                // Todo: 겹친다면 그 다음 거랑도 비교해야 함
                if (str.charAt(i) != str.charAt(i + 1)) {
                    count++;
                }
                if (str.charAt(i) == str.charAt(i + 1)) {
                    str.deleteCharAt(i);
                    str.deleteCharAt(i);
                }
            }
            if(count == str.length() - 1) {
                isUnique = true;
            }
        }
        return str.toString();
    }
    public static void main(String[] args) {
        System.out.println(removeDuplicates("aaaaaaa"));
    }
}
//이건 다 못푼거지만 일단 보내드릴게요~

새리

//Squares of a Sorted Array
class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] answer = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            answer[i] = (int) Math.pow(nums[i], 2);
        }
        Arrays.sort(answer);
        return answer;
    }
}
//Remove All Adjacent Duplicates In String
class Solution {
    public String removeDuplicates(String s) {
        Stack<Character> str = new Stack<>();
        str.push(s.charAt(0));
        for (int i = 1; i < s.length(); i++) {
            if (!str.isEmpty() && s.charAt(i) == str.peek()) {
                str.pop();
            } else {
                str.push(s.charAt(i));
            }
        }
        StringBuilder answer = new StringBuilder();
        for (Character character : str) {
            answer.append(character.toString());
        }
        return answer.toString();
    }
}
//Truncate Sentence
class Solution {
    public String truncateSentence(String s, int k) {
        String[] strings = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < k; i++) {
            sb.append(strings[i] + " ");
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
}

//Minimum Time Visiting All Points
class Solution {
    public int minTimeToVisitAllPoints(int[][] points) {
        int answer = 0;
        for (int i = 0; i < points.length - 1; i++) {
            answer += distance(points[i], points[i + 1]); 
        }
        return answer;
    }
    private int distance(int[] ptA, int[] ptB) {
        // (1, 1), (3, 4) 사이. 대각선, horizontal, vertical 한 칸씩 다 1초 걸리면 어쨌든 x, y축 차가 더 큰 수만큼 이동할 것
        int max = Math.max(Math.abs(ptA[0] - ptB[0]), Math.abs(ptA[1] - ptB[1]));
        return max;
    }
}

//Replace All Digits with Characters
class Solution {
    public String replaceDigits(String s) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (i % 2 == 1) {
                int a = s.charAt(i) - '0';
                sb.append((char) (s.charAt(i - 1) + a));
            } else {
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
}

시온

//977
class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] answer = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            answer[i] = (int) Math.pow(nums[i], 2);
        }
        Arrays.sort(answer);
        return answer;
    }
}
//8:35
//1047 
class Solution {
    public String removeDuplicates(String s) {
        for (int i = 0; i < s.length() - 1; i++) {
            String target = s.substring(i, i + 2);
            if (target.charAt(0) == target.charAt(1)) {
                s = s.replaceFirst(target, "");
                i = -1;
            }
        }
        return s;
    }
}
//1816
class Solution {
    public String truncateSentence(String s, int k) {
        String[] splited = s.split(" ");
        String[] klength = new String[k];
        for (int i = 0; i < klength.length; i++) {
            klength[i] = splited[i];
        }
        String answer = String.join(" ", klength);
        return answer;
    }
}
//
//
//1266
class Solution {
    public int minTimeToVisitAllPoints(int[][] points) {
        int times = points.length;
        int sum = 0;
        for (int i = 0; i < times - 1; i++) {
            int x = Math.abs(points[i][0] - points[i + 1][0]);
            int y = Math.abs(points[i][1] - points[i + 1][1]);
            sum += Math.max(x, y);
        }
        return sum;
    }
}
//8:35

  • 아 내코드.. 어디있지.. ㅠㅠ >> 내 깃헙 레포 전체를 DFS탐색해서 찾을수 있을꺼같당 ㅎㅎ;
  • 원래 엄마는 애기들 밥먹이느라 제일 늦게먹거나 밥을 잘 못먹는다는데 고런느낌~ 어딧는지 모르겠음 ㅎㅎ
  • 어미새의 마음으로 나중에 찾으면 업로드할예정

댓글을 작성해보세요.

채널톡 아이콘