본문 바로가기

IT. Programming

2주 1일차 알고리즘 문제풀이(개인)

* 해답 아래 더보기에 Java 코드 기재 * 

  • 목차
    • 가운데 글자 가져오기
      • 문제설명
      • 제한사항
      • 입출력 예
      • 기본 상태
      • 풀이에 필요한 조건
      • 해답 +더보기
    • 음양 더하기
      • 절차 동일

1. 가운데 글자 가져오기

[문제 설명]

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

[제한사항]

  • s는 길이가 1 이상, 100이하인 스트링입니다.

[입출력 예]

s return
"abcde" "c"
"qwer" "we"

 

[기본 상태]

class Solution {
    public String solution(String s) {
        String answer = "";
        return answer;
    }
}

 

[풀이에 필요한 조건]

문자열의 길이를 저장할 int형 변수 s_len 가 필요하고,

입력받는 문자열의 길이를 계산해줄 .length() 함수를 통해 입력받는 s 문자열의 길이를 계산하여 s_len에 저장.

 

입력받은 문자열의 길이가 홀수인지 짝수인지 2로 나누었을 때 나머지를 구하여 판별.

s_len%2 ==1 👉 홀수 

s_len%2 == 0 👉짝수

 

입력받는 문자열을 char 형태의 배열로 변환하기 위해 String.toCharArray() 함수를 이용.

참고 https://velog.io/@uhan2/java-String.toCharArray-%EC%82%AC%EC%9A%A9%EB%B2%95

 

s 문자열의 길이가 홀수일 때, 길이/2 를 한 값의 문자열이 반환된다.

ex) str="abcde" 👉 arr[] = {"a", "b", "c", "d", "e"}  👉 arr[2] = {"c"}

짝수일 때는 길이/2 를 한 값과, 그 이전 배열을 가져와야한다.

ex) str="qwer" 👉 arr[] = {"q", "w", "e", "r"} 👉 arr[1] = {"w"}, arr[2] = {"e"}

 

빈 문자열 answer에 문자열 s를 char 형식으로 변환한 배열의 중간값을 저장해준다.

ex) answer += s.toCharArray()[s_len / 2];

     answer += s.toCharArray()[s_len / 2 -1] + "" + s.toCharArray()[s_len / 2];

 

[해답]

class Solution {
    public String solution(String s) {
     int s_len = s.length();
     String answer = "";
    
     if(s_len % 2 == 1) {
     answer += s.toCharArray()[s_len / 2];
     }
     else {
     answer += s.toCharArray()[s_len / 2 -1] + "" + s.toCharArray()[s_len / 2];
     }
     return answer;    
    }
}

 

더보기

//해답
class Solution {
public String solution(String s) {
int s_len = s.length();
String answer = "";

if(s_len % 2 == 1) {
answer += s.toCharArray()[s_len / 2];
}
else {
answer += s.toCharArray()[s_len / 2 -1] + "" + s.toCharArray()[s_len / 2];
}
return answer;
}
}

//메인
public class Main {
public static void main(String[] args) {
Solution sol = new Solution();
String str1="abcde";
String result1=sol.solution(str1);

String str2="qwer";
String result2=sol.solution(str2);

System.out.println(result1);
System.out.println(result2);
}
}

 

2. 음양 더하기

 

[문제 설명]

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

signs 부울 연산 관련 링크입니다.

https://wikidocs.net/220

 

자료형의 명칭은 boolean(불린 또는 불리언이라고 부른다)이다.

 

참 또는 거짓의 값을 갖는 자료형을 부울 자료형이라고 한다.

 

부울 자료형에 대입되는 값은 참(true) 또는 거짓(false)만 가능하다.

 

ex) 

int base = 180;
int height = 185;
boolean isTall = height > base;

if (isTall) {
System.out.println("키가 큽니다.");
}

 

1. int 형태의 변수 height, base를 비교하여 true 혹은 false 로 결과값을 isTall에 저장합니다.

2. 조건에 따라 값을 반환하도록 설정합니다. ( 위 경우 if ( height > base ) { } 와 결과값이 같습니다. )

 

 

[제한사항]

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

[입출력 예 설명]

입출력 예

absolutes signs result
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

[기본 상태]

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 123456789;
        return answer;
    }
}

 

[풀이에 필요한 조건]

signs 배열과 absolutes 배열의 길이가 동일.

 

배열의 길이보다 작은 값까지 돌아가는 for 문을 작성.

for (int index = 0; index < signs.length; index++)

 

if(true)일 때, absolutes[index] 는 양수가 되고 결과값인 answer 에 + 해주면 된다.

if(false)일 때, absolutes[index] 는 음수가 되고 결과값인 answer 에 - 해주면 된다.

 

 

[해답]


class Solution {

    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        
        for (int index = 0; index < signs.length; index++) {
            if (signs[index]) {
                answer += absolutes[index];
            } else {
                answer -= absolutes[index];
            }
        }
        return answer;
    }
}

 

더보기

//해답
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
int answer = 0;

for (int index = 0; index < signs.length; index++) {
if (signs[index]) {
answer += absolutes[index];
} else {
answer -= absolutes[index];
}
}

return answer;
}
}

//메인
public class Main {
public static void main(String[] args){
Solution sol = new Solution();


boolean signs1[] = {true,false,true};
int absolutes1[] = {4,7,12};
int addResult1 = sol.solution(absolutes1, signs1);

boolean signs2[] = {false,false,true};
int absolutes2[] = {1,2,3};
int addResult2 = sol.solution(absolutes2, signs2);

System.out.println(addResult1);
System.out.println(addResult2); }
}

 

추가

자료형의 명칭은 boolean(불린 또는 불리언이라고 부른다)이다.

 

참 또는 거짓의 값을 갖는 자료형을 부울 자료형이라고 한다.

 

부울 자료형에 대입되는 값은 참(true) 또는 거짓(false)만 가능하다.

 

ex) 

int base = 180;
int height = 185;
boolean isTall = height > base;

if (isTall) {
System.out.println("키가 큽니다.");
}

 

1. int 형태의 변수 height, base를 비교하여 true 혹은 false 로 결과값을 isTall에 저장합니다.

2. 조건에 따라 값을 반환하도록 설정합니다. ( 위 경우 if ( height > base ) { } 와 결과값이 같습니다. )

 

 

 

3. x만큼 간격이 있는 n개의 숫자

[문제설명]

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

[제한사항]

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

    if(1<= n && n<=1000 && -10000000 <= x && x<= 10000000) (해답에 기재하지 않았습니다.)

[입출력 예]

x n answer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4, -8]

[기본 상태]

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = {};
        return answer;
    }
}

[풀이에 필요한 조건]

answer 배열에 넣어줄 값을 저장할 sum 변수 선언 (기본값 x > 배열 0번에 값 입력을 위해).

 

배열 반복을 위한 for 문. 최대 루프값보다 1 작은 값에서 끝나도록 설정.

 

answer 배열에 순서대로 sum 값을 지정하고, 다음 저장할 sum 값에 x를 더함.

( sum*(i+1) 로 바로 배열에 넣어도 무방 )

 

[해답]

더보기

//개인 솔루션

 

class Solution {
public long[] solution(int x, int n) {
long[] answer = new long[n];
long sum=x;
for (int i = 0; i < n; i++) {
answer[i] = sum;
sum += x;
}
return answer;
}
}

 

4. 내적

[문제설명]

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

[제한사항]

  • a, b의 길이는 1 이상 1,000 이하입니다.
  • a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

[입출력 예]

입출력 예

a b result
[1,2,3,4] [-3,-1,0,2] 3
[-1,0,1] [1,0,-1] -2

 

입출력 예 설명

입출력 예 #1

  • a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

입출력 예 #2

  • a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.

[기본 상태]

class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 1234567890;
        return answer;
    }
}

[풀이에 필요한 조건]

내적 계산을 위한 result 변수 선언.

 

길이 만큼의 배열 수행을 위한 for 문 작성.

 

내적 계산을 위한 계산식 작성 result = a[i] * b[i];

 

answer 리턴값에 result 계산값을 반복문 수행만큼 반복하여 추가.

 

[해답]

더보기

//개인 솔루션

 

class Solution {
public int solution(int[] a, int[] b) {
int answer = 0;
int result = 0;

for(int i=0 ; i < a.length ; i++){
result = a[i]*b[i];
answer += result;
}
return answer;
}
}

 

n. 차후 추가를 위한 샘플

[문제설명]

[제한사항]

[입출력 예]

[기본 상태]

[풀이에 필요한 조건]

[해답]

'IT. Programming' 카테고리의 다른 글

Programmers. x만큼 간격이 있는 n개의 숫자  (0) 2021.11.08
TIL  (0) 2021.11.08
Programmers. 음양 더하기  (0) 2021.11.08
Programmers. 가운데 글자 가져오기  (0) 2021.11.08
항해 99 1주차  (0) 2021.11.07