알고리즘 문제풀이 For Java - 7월21일
2021.07.27
스터디일지 : 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탐색해서 찾을수 있을꺼같당 ㅎㅎ;
- 원래 엄마는 애기들 밥먹이느라 제일 늦게먹거나 밥을 잘 못먹는다는데 고런느낌~ 어딧는지 모르겠음 ㅎㅎ
- 어미새의 마음으로 나중에 찾으면 업로드할예정
댓글을 작성해보세요.