49. 숨어있는 숫자의 덧셈 (1)

class Solution {
public int solution(String my_string) {
int answer = 0;
for(int i=0; i<my_string.length(); i++){
if(my_string.charAt(i) >= '0' && my_string.charAt(i) <= '9'){
answer += my_string.charAt(i) - '0';
}
}
return answer;
}
}
<작성한 코드>
for문을 사용해서 배열의 길이만큼 반복시켜 줬다. 후 문자를 하나씩 비교하며 0~9의 숫자라면 answer에 더해주었다. -'0'을 해준 이유는 char형이라서 0은 48에 해당한다. int형으로 변환하려면 -48을 해서 처리하였다.
50. 소인수분해

import java.util.*;
class Solution {
public int[] solution(int n) {
List<Integer> list = new ArrayList<>();
for(int i=2; i<=n; i++){
if(n%i == 0){
while(n%i == 0){
n /= i;
}
list.add(i);
}
}
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
<작성한 코드>
정수를 담을 list를 먼저 선언해줬다. 그 뒤 소인수를 구하기 위해 for문으로 2부터 n까지 반복문을 만들었다. 만약 n을 i로 나눈 값이 0이면 i는 소인수일 것이다. 그리고 while문으로 i가 소인수일 때 n을 n/i로 초기화해주고 list에 추가했다.
값을 구해서 list가 초기화가 되었고 이것을 int형 answer배열에 넣어줘서 반환했다.
51. 컨트롤 제트

import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
int before = 0;
String[] real = s.split(" ");
for(String ss : real){
if(ss.equals("Z")){
answer -= before;
}else {
int num = Integer.parseInt(ss);
answer += num;
before = num;
}
}
return answer;
}
}
<작성한 코드>
우선 s안에 공백을 기준으로 정렬되어있으니 변수 real에 공백을 기준으로 내용들을 정리하였다. 그 뒤 for문으로 real에 있는 값들을 하나씩 뽑아서 비교했다. 현재 문자열이니 Integer.parseInt()를 사용해서 정수로 변환해 주고 answer에 더해줬다. before에 num을 넣어준 이유는 이전에 더한 값을 저장해 두고 문자열 Z가 나왔을 시 이전에 더한 값을 도로 빼주기 위해서 선언해 줬다.
52. 배열 원소의 길이

class Solution {
public int[] solution(String[] strlist) {
int[] answer = new int[strlist.length];
for(int i=0; i<strlist.length; i++){
answer[i] = strlist[i].length();
}
return answer;
}
}
<작성한 코드>
strlist의 원소개수만큼 answer의 길이를 초기화 해줬다. 그리고 반복문으로 0부터 strlist길이까지 반복해 주고 answer [i]에 strlist [i]. length() 즉 각각의 길이를 대입해 줬다. 간단한 문제였다.
53. 직사각형 넓이 구하기

class Solution {
public int solution(int[][] dots) {
int answer = 0;
int w = 0;
int h = 0;
int x = dots[0][0];
int y = dots[0][1];
for(int i=1; i<dots.length; i++){
if(x != dots[i][0]) w = Math.abs(x - dots[i][0]);
if(y != dots[i][1]) h = Math.abs(y - dots[i][1]);
}
answer = w * h;
return answer;
}
}
<작성한 코드>
먼저 가로,세로의 값을 담을 변수 w, h를 선언해 줬다. 후에 x에 첫 번째 x좌표값을 넣고, y에도 첫 번째 y좌표값을 넣었다. 그 뒤 1부터 dots의 길이까지 반복을 시켰다. 만약 현재 x좌표와 dot [i][0] 번째 값이 다르다면 좌표의 차이를 구해줬다. 또한 Math.abs를 사용해서 절댓값을 구하도록 하였다. y도 마찬가지로 똑같이 해주었다. w*h를 해주고 반환하였다.
54. 캐릭터의 좌표

class Solution {
public int[] solution(String[] keyinput, int[] board) {
int[] answer = new int[board.length];
int x = 0;
int y = 0;
int x2 = board[0] / 2;
int y2 = board[1] / 2;
for(int i=0; i<keyinput.length; i++){
if(keyinput[i].equals("left") && x > -x2) x--;
if(keyinput[i].equals("right") && x < x2) x++;
if(keyinput[i].equals("up") && y < y2) y++;
if(keyinput[i].equals("down") && y > -y2) y--;
}
answer[0] = x;
answer[1] = y;
return answer;
}
}
<작성한 코드>
x, y 좌표로 사용할 변수를 먼저 초기화했다. 후에 x, y가 갈수있는 최대의 길이를 담은 x2, y2변수를 만들어줬다. for문으로 keyinput 원소의 개수만큼 반복시켰고, 배열의 문자열이 각각 일치하고 x, y 가 설정된 최댓값, 최솟값을 넘지 않을 때만 x, y에 +, -를 해주었다.
55. 최댓값 만들기(2)

import java.util.*;
class Solution {
public int solution(int[] numbers) {
int answer = 0;
Arrays.sort(numbers);
int length = numbers.length;
int max = numbers[length-1] * numbers[length-2];
int min = numbers[0] * numbers[1];
answer = Math.max(max, min);
return answer;
}
}
<작성한 코드>
먼저 오름차순 정렬을 시켰다. 그뒤 length에 배열의 길이를 구한 뒤 제일 큰 수 두 개를 곱해서 max에 저장했다. 또한 음수끼리 곱하면 양수가 나올 수 있기 때문에 가장 작은 값도 곱해서 min에 저장했다. 그 뒤 Math.max를 사용해서 두 개 중 크기가 더 큰 값을 answer에 저장하고 반환했다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (63~68번 문제풀이) (1) | 2023.09.26 |
---|---|
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (56~62번 문제풀이) (0) | 2023.09.25 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (41~48번 문제풀이) (0) | 2023.09.22 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (33~40번 문제풀이) (0) | 2023.09.21 |
[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (25~32번 문제풀이) (0) | 2023.09.21 |
남건욱's 공부기록