풀이

 

 

import java.util.Arrays;
import java.util.stream.IntStream;

class Solution {
    public int[] solution(int[] arr, boolean[] flag) {
        int[] answer = {};
        for(int i=0;i<flag.length;i++) {  				// flag 길이만큼 순회
            if(flag[i]) {
                int[] temp = new int[arr[i]*2];			// arr[i]*2만큼 임시 배열 생성, 각 요소에 arr[i] 할당
                for(int j=0;j<temp.length;j++) {
                    temp[j] = arr[i];
                }
                answer = IntStream.concat(Arrays.stream(answer), Arrays.stream(temp)).toArray();  // 기존 answer와 임시 배열 합치기
            }
            else {
                answer = Arrays.copyOfRange(answer,0,answer.length-arr[i]);    // 기존 answer 배열에서 arr[i]크기만큼 줄여서 다시 할당
            }
        }
        return answer;
    }
}

 

 

배열 공부한다고 Array만 쓰려다가 괜히 복잡하게 했다;;

list를 쓰면 add, remove를 사용하면 간편한데..

역시 Array보다 linked list가 입력, 삭제가 간편하긴하다.

 

 

풀이

 

 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        int[] answer = arr;
        for(int i=0;i<query.length;i++) {
            if(i%2==0) {
                answer = Arrays.copyOfRange(answer,0,query[i]+1);
            } 
            else {
                answer = Arrays.copyOfRange(answer,query[i],answer.length);
            }
        }
        return answer;
    }
}

 

 

나는 실시간으로 잘라가며 했는데 그럴 필요없이 마지막 남은 문자열의 시작과 끝 위치만 알아도 가능했다...

 

 

풀이

 

class Solution {
    public int[] solution(int[] arr) {
        int length=1; 						// 초기 길이 = 1
        
        while(length < arr.length) {     	// length가 arr의 길이보다 작으면 X2 크거나 같으면 종료
            length = length * 2;
        }
        int[] answer =  new int[length];	// 구한 length 값만큼 배열 할당 요소는 0으로 초기화됨
        
        for(int i = 0;i<arr.length;i++) {	// arr 요소를 answer에 복사
            answer[i]=arr[i];
        }
        return answer; 
    }
}

 

 

 

처음엔 맨 마지막 케이스가 계속 틀려서 뭔가 했는데 초기 길이를 2로 한게 잘못이었다.1도 2의 거듭제곱 정수란걸 까먹음;;;

 

풀이

class Solution {
    public String solution(String myString, String pat) {
        String answer = "";
        
        int index = myString.lastIndexOf(pat);
        answer = myString.substring(0,index+pat.length());
        
        return answer;
    }
}

 

 

lastIndexOf() 함수를 사용해 pat이 위치한 가장 마지막 index 위치를 찾고

본 문자열의 0번째 인덱스부터 index까지의 substring을 리턴한다. 

lastIndexOf() 는 시작위치를 반환하므로 pat의 길이만큼 더해줘야 pat까지 포함한 부분문자열이 된다.

 

처음에는 for문으로 뒤에서 하나씩 줄여가며 pat으로 끝나는지 찾는 방식을 썼는데

이 방식이 더 깔끔한 것 같다.

'알고리즘공부 > 프로그래머스 연습' 카테고리의 다른 글

빈 배열에 추가, 삭제하기  (0) 2024.11.24
배열 조각하기  (0) 2024.11.24
배열의 길이를 2의 거듭제곱으로 만들기  (0) 2024.11.24
문자열 돌리기  (0) 2024.11.24
부분 문자열  (0) 2024.11.24

 

 

 

 

풀이

 

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    
        String a = sc.next();
        for(String s : a.split("")) {
            System.out.println(s);
        }
    }
}

 

 

String 문자열을 a라는 변수에 할당하고

split 함수로 하나씩 분리하여 s라는 for문의 임시변수에 할당해 출력

 

 

문제 설명

어떤 문자열 A가 다른 문자열 B안에 속하면 A를 B의 부분 문자열이라고 합니다.
예를 들어 문자열 "abc"는 문자열 "aabcc"의 부분 문자열입니다.
문자열 str1과 str2가 주어질 때, str1이 str2의 부분 문자열이라면
1을 부분 문자열이 아니라면 0을 return하도록 solution 함수를 완성해주세요.

 

제한 사항

1 ≤ str1 ≤ str2 ≤ 20

str1과 str2는 영어 소문자로만 이루어져 있습니다

 

 

class Solution {
    public int solution(String str1, String str2) {
        if(str2.contains(str1)) {			// str2에 str1이 포함되었으면 1, 없으면 0
            return 1;
        } else return 0;
    }
}

 

contains 함수는 대소문자를 구분하니 주의

+ Recent posts