코딩 기초 트레이닝 - 프로그래머스(차근차근 시작해 보세요 Day 24)
문제 설명
팀의 막내인 철수는 아메리카노와 카페 라테만 판매하는 카페에서 팀원들의 커피를 사려고 합니다. 아메리카노와 카페 라테의 가격은 차가운 것과 뜨거운 것 상관없이 각각 4500, 5000원입니다. 각 팀원에게 마실 메뉴를 적어달라고 하였고, 그 중에서 메뉴만 적은 팀원의 것은 차가운 것으로 통일하고 "아무거나"를 적은 팀원의 것은 차가운 아메리카노로 통일하기로 하였습니다.
각 직원이 적은 메뉴가 문자열 배열 order로 주어질 때, 카페에서 결제하게 될 금액을 return 하는 solution 함수를 작성해주세요. order의 원소는 아래의 것들만 들어오고, 각각의 의미는 다음과 같습니다.
order의 원소 | 의미 |
"iceamericano", "americanoice" | 차가운 아메리카노 |
"hotamericano", "americanohot" |
따뜻한 아메리카노 |
"icecafelatte", "cafelatteice" | 차가운 카페 라테 |
"hotcafelatte", "cafelattehot" | 따뜻한 카페 라테 |
"americano" | 아메리카노 |
"cafelatte" | 카페 라테 |
"anything" | 아무거나 |
제한사항
- 1 ≤ order의 길이 ≤ 1,000
입출력 예
order | result |
["cafelatte", "americanoice", "hotcafelatte", "anything"] |
19000 |
["americanoice", "americano", "iceamericano"] | 13500 |
입출력 예 설명
입출력 예 #1
- 예제 1번의 입력을 표로 나타내면 다음과 같습니다.
order[i] | 팀원의 적은 음료 | 실제 주문 음료 |
"cafelatte" | 카페 라떼 | 차가운 카페 라떼 |
"americanoice" | 차가운 아메리카노 | 차가운 아메리카노 |
"hotcafelatte" | 따뜻한 카페 라떼 | 따뜻한 카페 라떼 |
"anything" | 아무거나 | 차가운 아메리카노 |
철수는 차가운 아메리카노 2잔, 차가운 카페 라테 1잔, 따뜻한 카페 라테 1잔을 주문하게 되므로 결제 금액은 4500 × 2 + 5000 × 2 = 19000원입니다. 따라서 19000을 return 합니다.
입출력 예 #2
- 예제 2번의 입력에서는 모든 음료를 차가운 아메리카노로 시키게 됩니다. 따라서 결제 금액은 4500 × 3 = 13500원이고 13500을 return 합니다.
class Solution {
public int solution(String[] order) {
int answer = 0;
for (String menu : order) {
if (menu.equals("anything")) {
answer += 4500; // "anything"은 차가운 아메리카노
} else if (menu.equals("iceamericano") || menu.equals("americanoice")) {
answer += 4500; // 차가운 아메리카노
} else if (menu.equals("hotamericano") || menu.equals("americanohot")) {
answer += 4500; // 뜨거운 아메리카노
} else if (menu.equals("icecafelatte") || menu.equals("cafelatteice")) {
answer += 5000; // 차가운 카페 라테
} else if (menu.equals("hotcafelatte") || menu.equals("cafelattehot")) {
answer += 5000; // 뜨거운 카페 라테
} else if (menu.equals("americano")) {
answer += 4500; // 아메리카노
} else if (menu.equals("cafelatte")) {
answer += 5000; // 카페 라테
}
}
return answer;
}
}
문제 설명
직사각형 형태의 그림 파일이 있고, 이 그림 파일은 1 × 1 크기의 정사각형 크기의 픽셀로 이루어져 있습니다. 이 그림 파일을 나타낸 문자열 배열 picture과 정수 k가 매개변수로 주어질 때, 이 그림 파일을 가로 세로로 k배 늘린 그림 파일을 나타내도록 문자열 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 ≤ picture의 길이 ≤ 20
- 1 ≤ picture의 원소의 길이 ≤ 20
- 모든 picture의 원소의 길이는 같습니다.
- picture의 원소는 '.'과 'x'로 이루어져 있습니다.
- 1 ≤ k ≤ 10
입출력 예
picture | k | result |
[".xx...xx.", "x..x.x..x", "x...x...x", ".x.....x.", "..x...x..", "...x.x...", "....x...."] |
2 | ["..xxxx......xxxx..", "..xxxx......xxxx..", "xx....xx..xx....xx", "xx....xx..xx....xx", "xx......xx......xx", "xx......xx......xx", "..xx..........xx..", "..xx..........xx..", "....xx......xx....", "....xx......xx....", "......xx..xx......", "......xx..xx......", "........xx........", "........xx........"] |
["x.x", ".x.", "x.x"] | 3 | ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 picture는 다음과 같습니다.이를 가로 세로로 k배, 즉 2배 확대하면 그림 파일은 다음과 같습니다.따라서 ["..xxxx......xxxx..", "..xxxx......xxxx..", "xx....xx..xx....xx", "xx....xx..xx....xx", "xx......xx......xx", "xx......xx......xx", "..xx..........xx..", "..xx..........xx..", "....xx......xx....", "....xx......xx....", "......xx..xx......", "......xx..xx......", "........xx........", "........xx........"]를 return 합니다.
-
..xxxx......xxxx.. ..xxxx......xxxx.. xx....xx..xx....xx xx....xx..xx....xx xx......xx......xx xx......xx......xx ..xx..........xx.. ..xx..........xx.. ....xx......xx.... ....xx......xx.... ......xx..xx...... ......xx..xx...... ........xx........ ........xx........
-
.xx...xx. x..x.x..x x...x...x .x.....x. ..x...x.. ...x.x... ....x....
입출력 예 #2
- 예제 2번의 picture는 다음과 같습니다.이를 가로 세로로 k배, 즉 3배 확대하면 그림 파일은 다음과 같습니다.따라서 ["xxx...xxx", "xxx...xxx", "xxx...xxx", "...xxx...", "...xxx...", "...xxx...", "xxx...xxx", "xxx...xxx", "xxx...xxx"]를 return 합니다.
-
xxx...xxx xxx...xxx xxx...xxx ...xxx... ...xxx... ...xxx... xxx...xxx xxx...xxx xxx...xxx
-
x.x .x. x.x
class Solution {
public String[] solution(String[] picture, int k) {
String[] answer = new String[picture.length * k];
// 각 행을 k배 확장
for (int i = 0; i < picture.length; i++) {
String expandedRow = "";
// 각 문자를 k배로 확장
for (char c : picture[i].toCharArray()) {
expandedRow += String.valueOf(c).repeat(k); // 각 문자 k번 반복
}
// 확장된 행을 k번 반복해서 result에 저장
for (int j = 0; j < k; j++) {
answer[i * k + j] = expandedRow; // i * k + j는 각 확장된 행의 인덱스
}
}
return answer;
}
}
문제 설명
정수 배열 arr와 자연수 k가 주어집니다.
만약 k가 홀수라면 arr의 모든 원소에 k를 곱하고, k가 짝수라면 arr의 모든 원소에 k를 더합니다.
이러한 변환을 마친 후의 arr를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ arr의 길이 ≤ 1,000,000
- 1 ≤ arr의 원소의 값 ≤ 100
- 1 ≤ k ≤ 100
입출력 예
arr | k | result |
[1, 2, 3, 100, 99, 98] |
3 | [3, 6, 9, 300, 297, 294] |
[1, 2, 3, 100, 99, 98] | 2 | [3, 4, 5, 102, 101, 100] |
입출력 예 설명
입출력 예 #1
- 주어진 k인 3은 홀수이므로, 전체 배열에 3을 곱합니다. 따라서 [3, 6, 9, 300, 297, 294]을 return 합니다.
입출력 예 #2
- 주어진 k인 2는 짝수이므로, 전체 배열에 2를 더합니다. 따라서 [3, 4, 5, 102, 101, 100]을 return 합니다.
class Solution {
public int[] solution(int[] arr, int k) {
int[] answer = new int[arr.length];
if (k % 2 == 1) { // k가 홀수라면
for (int i = 0; i < arr.length; i++) {
answer[i] = arr[i] * k;
}
} else { // k가 짝수라면
for (int i = 0; i < arr.length; i++) {
answer[i] = arr[i] + k;
}
}
return answer;
}
}
문제 설명
알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ myString ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열입니다.
입출력 예
myString | result |
"abcdevwxyz" |
"lllllvwxyz" |
"jjnnllkkmm" | "llnnllllmm" |
입출력 예 #1
- 0 ~ 4번 인덱스의 문자 "a","b","c","d","e"는 각각 "l"보다 앞서는 문자입니다. 따라서 "l"로 고쳐줍니다.
- 그 외의 문자는 모두 "l"보다 앞서지 않는 문자입니다. 따라서 바꾸지 않습니다.
- 따라서 "lllllvwxyz"을 return 합니다.
입출력 예 #2
- 0번, 1번, 6번, 7번 인덱스의 문자 "j","j","k","k"는 각각 "l"보다 앞서는 문자입니다. 따라서 "l"로 고쳐줍니다.
- 그 외의 문자는 모두 "l"보다 앞서지 않는 문자입니다. 따라서 바꾸지 않습니다.
- 따라서 "llnnllllmm"을 return 합니다.
class Solution {
public String solution(String myString) {
StringBuilder answer = new StringBuilder();
for (char c : myString.toCharArray()) {
if (c < 'l') {
answer.append('l'); // 'l'보다 작은 문자는 'l'로 변경
} else {
answer.append(c); // 'l' 이상인 문자는 그대로 추가
}
}
return answer.toString();
}
}
문제 설명
정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
제한사항
- 1 ≤ n ≤ 100
입출력 예
n | result |
3 | [[1, 0, 0], [0, 1, 0], [0, 0, 1]] |
6 | [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]] |
1 | [[1]] |
입출력 예 설명
입출력 예 #1
- 예제 1번의 n의 값은 3으로 다음과 같이 2차원 배열을 채울 수 있습니다.
i \ j | 0 | 1 | 2 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
2 | 0 | 0 | 1 |
따라서 [[1, 0, 0], [0, 1, 0], [0, 0, 1]]을 return 합니다.
입출력 예 #2
- 예제 2번의 n의 값은 6으로 다음과 같이 2차원 배열을 채울 수 있습니다.
i \ j | 0 | 1 | 2 | 3 | 4 | 5 |
0 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 1 | 0 | 0 |
4 | 0 | 0 | 0 | 0 | 1 | 0 |
5 | 0 | 0 | 0 | 0 | 0 | 1 |
따라서 [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]]을 return 합니다.
입출력 예 #3
- 예제 1번의 n의 값은 1이고 다음과 같이 2차원 배열을 채울 수 있습니다.
i \ j | 0 |
0 | 1 |
따라서 [[1]]을 return 합니다.
class Solution {
public int[][] solution(int n) {
// n × n 크기의 배열을 생성
int[][] answer = new int[n][n];
// 이차원 배열을 순회하면서 주대각선에 1을 할당
for (int i = 0; i < n; i++) {
answer[i][i] = 1; // 주대각선에 1 할당
}
return answer;
}
}