문제
문제 설명
주어진 Input에 따라 '계곡'(Valley)의 갯수를 체크해야 하는 문제이다.
처음에는 '계곡'에 대한 설명이 명확하지가 않아서 '\'과 '/'를 이루는 갯수의 합 즉 '\/'이 몇개인지를 체크하는 문제인줄 알고 풀었는데 테스트를 통과하지 못해 조금 더 자세히 문제를 분석했다.
최종적으로 이 문제가 원하는 답은 해수면에 해당하는 '- -' 밑으로 내려가서 해수면 밖으로 나오는 횟수를 체크하라는 말이었다.
위 Explanation에 나온 예시로 보자면 시작점과 끝점인 -- 를 기준점으로 삼고 그 기준점을 몇번이나 내려간 후 올라오는지 체크해야 한다.
코드 작성 시간 보다 문제를 다시 읽어보고 체크하는 시간이 오래 걸렸는데 이런 문제는 조금 더 명확하게 설명을 해주면 좋겠다는 생각을 했다.
해당 코드
1번 풀이
public static int countingValleys(int steps, string path)
{
int countValley = 0; // 계곡의 횟수 체크
int count = 0; // 현재 층수가 몇층인지 체크, 지하 확인용
bool flag = false; // 지하에 내려간 상태면 true로 바꾸기 위한 bool
for(int i = 0; i < path.Length; i ++)
{
if(path[i] == 'U')
{
count++;
}
else if(path[i] == 'D')
{
count--;
}
if(count < 0 && flag == false)
{
flag = true;
}
if(count == 0 && flag == true)
{
countValley++;
flag = false;
}
}
return countValley;
}
2번 풀이
public static int countingValleys(int steps, string path)
{
int countValley = 0;
int count = 0;
for (int i = 0; i < steps; i++)
{
if (path[i] == 'U')
{
count++;
if (count == 0)
{
countValley++;
}
}
else if (path[i] == 'D')
{
count--;
}
}
return countValley;
}
풀이 방법
1번 풀이는 조건문을 반복적으로 나오는 감이 있어 코드를 조금 더 간결하게 작성했다.
처음에 만든 체크용 bool값은 문제가 제약사항이 더 많은 경우라면 효과적으로 작동하겠지만 현재 문제에서는 계곡을 세면서 count가 0보다 낮은 상태, 즉 해수면 아래에 있는 상태인지만 체크하면 되기 때문에 제외시켰다.
countValley 변수를 이용해 몇 개의 계곡을 최종적으로 지나왔는지 체크하고, count 변수는 현재의 수심이 어디인지 체크하는 변수로 작동한다.
반복문은 매개변수로 들어온 steps만큼 돌리던 path.Length만큼 돌리던 같은 횟수로 반복되고, 해당 반복문을 돌면서 입력값이
'U'인지 'D'인지 체크 후 count 변수를 +와 - 해준다.
만약 반복문 도중 'U'를 만나 올라오는 상황에서 count가 0인 경우에는 해수면에 도달한 것이므로 countValley를 하나 증가시켜 준다.
최종적으로 countValley가 몇개인지 return하면 간단하게 마무리 된다.
'코딩테스트' 카테고리의 다른 글
C# [HackerRank] Algorithm(Data Structures) - Equal Stacks (0) | 2024.10.14 |
---|---|
C# [프로그래머스] Lv.2 괄호 회전하기 (0) | 2024.09.16 |
C# [HackerRank] Algorithm(String) - Strong Password (0) | 2024.09.06 |
C# [프로그래머스] Lv.3 입국심사 (0) | 2024.09.05 |
C# [프로그래머스] Lv.2 JadenCase 문자열 만들기 (0) | 2024.09.05 |