문제 이름:
삼총사
문제 설명:
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
코드:
class Solution {
public int solution(int[] number) {
int answer = 0;
int leng = number.length;
for(int i = 0; i < leng; i++){
for(int j = i + 1; j < leng; j++){
for(int k = j + 1; k < leng; k++){
if(number[i] + number[j] + number[k] == 0){
answer++;
}
}
}
}
return answer;
}
}
코드 설명:
3중 반복문을 설정한 이유:
number 배열의 0,1,2 0,1,3... 순으로 합을 구하기 위해서
첫 번째 반복문은 배열의 첫 번째 숫자를 0부터 꺼내오기 위해 i를 0으로 설정하고 배열의 길이만큼 돌린다.
두 번째 반목문은 i 가 0일때 0 다음 인덱스 숫자부터 꺼내오기 위해 i + 1로 j를 설정해준다.
세 번째 반복문은 j 가 1일 때 1 다음 인덱스 숫자부터 꺼내오기 위해 j + 1로 k를 설정해준다.
조건문을 통해서 i + j + k를 했을 때 0이 나오면 answr의 값을 1씩 증가시켜 준다.
문제 이름:
크기가 작은 부분 문자열
문제 설명:
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return 하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271"인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개입니다.
코드:
import java.util.*;
class Solution {
public int solution(String t, String p) {
int answer = 0;
List<String> stList = new ArrayList<>();
for(int i = 0; i < t.length() - p.length() + 1; i++){
stList.add(t.substring(i, p.length() + i));
}
long longP = Long.parseLong(p);
List<Long> longList = new ArrayList<>();
for(String st : stList){
longList.add(Long.parseLong(st));
}
for(long l : longList){
if(l <= longP){
answer++;
}
}
return answer;
}
}
코드 설명:
이 코드는 리스트를 사용해서 문제를 풀어 본 것이다.
리스트를 사용한 이유:
처음으로 떠오른 게 리스트여서 리스트를 사용해서 풀어봤다.
t의 문자열에서 p 문자열 길이만큼 잘라온 값을 저장해 줄 stList를 선언한다.
첫 번째 반복문에서 t.length() - p.length() + 1은 문제 설명의 예시를 보면 314, 141, 415... 이런 식으로
앞에서부터 한 칸씩 이동해서 p의 길이만큼 잘라주고 있고 전체 예시를 보면 자른 값의 개수는 5개가 나오기 때문에
저렇게 작성을 했다.
substring을 사용해서 p의 길이만큼 잘라주고 stList에 저장을 해준다.
longList는 자른 문자열을 long타입으로 변환 후에 저장할 리스트이다.
두 번째 반복문은 stList의 값을 하나씩 빼와서 longList에 저장을 해준다.
마지막 반복문은 longList의 값을 하나씩 빼와서 longP와 비교를 해서 값이 작거나 같으면 answr의 값을 1씩 증가해 준다.
코드 2 :
import java.util.*;
class Solution {
public int solution(String t, String p) {
int answer = 0;
Long longP = Long.parseLong(p);
for(int i = 0; i < t.length() - p.length() + 1; i++){
String st = t.substring(i, p.length() + i);
Long longT = Long.parseLong(st);
if(longT <= longP){
answer++;
}
}
return answer;
}
}
코드 설명:
코드가 너무 길어져서 리스트를 사용 안 하고 작성을 한 코드이다.
p를 long 타입으로 변환해준다.
반복문을 통해서 st에다가 p의 길이만큼 자른 문자를 넣어준다.
이 st를 long타입으로 변환해준다.
조건문을 통해서 값이 작거나 같은 경우에만 answer의 값을 1씩 증가해 준다.
문제 이름:
시저 암호
문제 설명:
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
코드:
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(ch >= 'a' && ch <= 'z'){
answer += (char) ((ch - 'a' + n) % 26 + 'a');
}else if(ch >= 'A' && ch <= 'Z'){
answer += (char) ((ch - 'A' + n) % 26 + 'A');
}else {
answer += ch;
}
}
return answer;
}
}
코드 설명:
반복문을 통해서 s의 문자열의 문자를 하나씩 꺼내온다.
조건문을 통해서 ch가 a ~ z 이면
answer에 그 문자에서 n 번째 뒤의 문자를 넣어준다.
( ch - 'a' + n ) % 26 + 'a';
에서 % 26 은 알파벳을 넘어가게 되면 안 되기 때문에 사용을 해줬다.
저렇게 작성을 하면 n번째 뒤의 문자를 만들어 줄 수 있다.
다음 조건문에서는 대문자일 경우에 위와 똑같이 값을 넣어준다.
값이 알파벳이 아닌 다른 문자일 경우에는 그냥 그 값을 넣어준다.
'프로그래머스 문제' 카테고리의 다른 글
프로그래머스 (Java) 문제들2 (1) | 2024.09.03 |
---|---|
프로그래머스 (Java) K번째 수, 두 개 뽑아 더하기 (1) | 2024.09.02 |
프로그래머스(Java) 3진법 뒤집기, 내적, 직사각형 별찍기 (0) | 2024.08.29 |
프로그래머스(Java) 문제들 (1) | 2024.08.28 |
프로그래머스 (Java) 행렬의 곱셈 (0) | 2024.08.22 |