
내가 생각했을때 문제에서 원하는부분
영진이는 약속장소에 가기 위해 버스를 타려고 합니다. 버스에는 좌석이 총 seat개만큼 있습니다. 영진이는 버스 좌석에 앉아서 갈 수 있을지 궁금해합니다.
기점에서 출발한 버스가 영진이가 기다리는 정거장에 도착하기 전에 방문하는 각 정거장에서 승/하차한 승객 정보가 주어질 때, 영진이가 버스에 탄 순간 빈 좌석은 몇 개인지 구해주세요.
영진이가 기다리는 정거장에서는 영진이가 제일 먼저 버스에 탑승하며, 이전 정거장에서 버스에 탑승한 승객들은 남는 좌석이 있다면 항상 앉는다고 가정합니다.
또, 기점에서 출발하는 버스에는 승객이 0명 타고 있습니다.
예를 들어 다음은 좌석이 5개인 버스에 각 정거장에서 승/하차한 승객 정보를 나타냅니다.
영진이는 4번 정거장에서 기다리고 있으며, "On"은 승차한 승객, "Off"는 하차한 승객을 의미합니다.
- 1번 정거장 : ["On", "On", "On"] (3명 승차, 0명 하차)
- 2번 정거장 : ["Off", "On", "-"] (1명 승차, 1명 하차)
- 3번 정거장 : ["Off", "-", "-"] (0명 승차, 1명 하차)
위와 같은 경우, 1번 정거장에서 3명이 승차하고, 2번 정거장에서 1명 승차 1명 하차, 3번 정거장에서 1명이 하차했으므로 4번 정거장에 도착한 버스에는 2명이 타고 있습니다.
4번 정거장에서는 영진이가 가장 먼저 탑승하므로, 남아있는 좌석 수는 3개입니다.
주어진 solution함수는 버스의 좌석 개수 seat, 기점에서 출발한 버스가 순서대로 방문한 정거장에서 승객이 승/하차한 정보를 담은 2차원 문자열 리스트 passengers가 주어질 때, 버스에 남아있는 좌석의 개수를 return 하는 함수입니다.
solution 함수가 올바르게 작동하도록 빈칸을 채워 solution함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
main은 예제 입력을 만들고 solution을 호출하여 결과를 출력한다.
solution은 정거장 배열을 순회하며 각 정거장에서 승차자 수를 더하고 하차자 수를 빼서 누적 탑승자 수를 계산한다.
최종적으로 남은 좌석 수는 seat에서 누적 탑승자 수를 뺀 값이며, 음수이면 0으로 보정하여 반환한다.
func4(String[] station)는 해당 정거장에서 "On" 문자열의 개수를 세어 반환한다.
func3(String[] station)는 해당 정거장에서 "Off" 문자열의 개수를 세어 반환한다.
func1(int num)는 입력값이 음수이면 0을 반환하고, 음수가 아니면 그대로 반환하여 남은 좌석을 보정한다.
func2(int num)는 본 구현에서는 사용되지 않는 보조 함수이다.
예제1: seat=5, 누적 탑승자 2 → 남은 좌석 3 반환한다.
예제2: seat=10, 누적 탑승자 12 → seat - 12 = -2 → 보정되어 0 반환한다.
코드로 구현
class Solution {
public int solution(int seat, String[][] passengers) {
int num_passenger = 0;
for(int i=0; i<passengers.length; i++){
num_passenger += func4(passengers[i]);
num_passenger -= func3(passengers[i]);
}
int answer = func1(seat - num_passenger);
return answer;
}
public int func1(int num){
if(0 > num){
return 0;
}
else{
return num;
}
}
public int func2(int num){
if(num > 0){
return 0;
}
else{
return num;
}
}
public int func3(String[] station){
int num = 0;
for(int i=0; i<station.length; i++){
if(station[i].equals("Off")){
num += 1;
}
}
return num;
}
public int func4(String[] station){
int num = 0;
for(int i=0; i<station.length; i++){
if(station[i].equals("On")){
num += 1;
}
}
return num;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 7번 버스
public class Main7 {
public static void main(String[] args) {
Solution sol = new Solution();
// 예제 1
String[][] passengers1 = {
{"On", "On", "On"},
{"Off", "On", "-"},
{"Off", "-", "-"}
};
System.out.println("예제1 결과 (기대값 3): " + sol.solution(5, passengers1));
// 예제 2
String[][] passengers2 = {
{"On","On","On","On","On","On","On","On","-","-"},
{"On","On","Off","Off","Off","On","On","-","-","-"},
{"On","On","On","Off","On","On","On","Off","Off","Off"},
{"On","On","Off","-","-","-","-","-","-","-"}
};
System.out.println("예제2 결과 (기대값 0): " + sol.solution(10, passengers2));
}
}
class Solution {
public int solution(int seat, String[][] passengers) {
int num_passenger = 0;
for (int i = 0; i < passengers.length; i++) {
num_passenger += func4(passengers[i]); // 해당 정거장의 승차자 수 더함
num_passenger -= func3(passengers[i]); // 해당 정거장의 하차자 수 뺌
}
int answer = func1(seat - num_passenger); // 남은 좌석 수: 음수면 0으로 보정
return answer;
}
public int func1(int num) {
if (0 > num) {
return 0;
} else {
return num;
}
}
// func2는 원래 제공된 함수이나 본 풀이에서는 사용되지 않습니다.
public int func2(int num) {
if (num > 0) {
return 0;
} else {
return num;
}
}
// 해당 정거장에서 하차("Off")한 사람 수를 센다
public int func3(String[] station) {
int num = 0;
for (int i = 0; i < station.length; i++) {
if (station[i].equals("Off")) {
num += 1;
}
}
return num;
}
// 해당 정거장에서 승차("On")한 사람 수를 센다
public int func4(String[] station) {
int num = 0;
for (int i = 0; i < station.length; i++) {
if (station[i].equals("On")) {
num += 1;
}
}
return num;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.