ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1/13기록 - 백준 2309
    Algorithm 2022. 1. 13. 10:52
    728x90

    오늘은 브론즈 2 티어 백준 2309번 문제 일곱 난쟁이 문제를 풀어보았다.

     

     

     

    문제는 정말 간단하다. 그냥 일곱 난쟁이였는데, 쁘락치 2명이 들어왔으니 7명 난쟁이 키의 합이 100이라는 조건으로 쁘락치 2명을 찾아내면된다. 이렇게 단순한 문제인데 7중 for문을 쓰는 말도 안 되는 짓은 일단 아닌거 같아서 배제하고, 어제 풀었던 없는 수 찾기 문제의 방식이 떠올라 전체에서 빼는 여사건 방식을 생각해 보았다.

    9-2 = 7이니 두명의 쁘락치를 찾아서 전체 합에서 빼주면 될 것 같다. 그럼 2중 for문으로 돌리면서 if문으로 조건을 걸어주면 된다.

     

    알고리즘 생각

    1. BufferedReader와 크기 9짜리 height 배열을 선언하고 for문을 통해 9명의 키를 입력 받는다.

    2. for문 안에서 sum 변수에 9명의 키를 모두 더해서 넣어준다.

    3. 2중 for문을 통해서 돌려 주면서 if문으로 제한을 걸어주고 2명을 찾으면 그 때 break로 멈춰준다.

    4. 다시 for문을 이용해서 순차적으로 가다가 쁘락치 일때는 continue로 넘어가주고 아닐 때는 출력시켜준다.

    5. 오름차순 출력이므로 Arrays.sort()를 써줘야 한다.

     

     

     

     

    알고리즘 대로 풀었는데, 여기서 주의 할 점이 두가지가 있었다. 

     

    1. 이중 for문 안의 if 조건문에서 wrongdwarf 변수 안에는 배열 전체를 넣으면 안 되고, 해당 인덱스 값을 넣어주어야 한다. -> 배열 height[i] 와 같이 입력시킬 경우 배열 전체가 입력되어서 마지막 출력에 9명의 난쟁이가 모두 나와버린다.

     

    2. Arrays.sort() 메소드를 초반에 사용해서 미리 정렬을 시키고 for문을 돌려야 한다. 처음엔 마지막 출력에만 오름차순이 되어야 된다고 생각하고 이중 for문 이후에 사용했더니 이상한 답이 나와버린다. -> 솔직히 이건 왜 그런지는 모르겠다.... 여기서의 교훈은 출력 때 정렬을 시켜야 한다면 처음부터 배열 정렬을 시켜 놓고 알고리즘을 구현하고 출력시키는 방식을 택하라는 것.

     

    답을 맞췄다 ㅎㅎ 다하고 다른 풀이를 보니 여사건 풀이 방식이 브루트포스(?) 방식이라고 한다. 이름 참 거창한듯...

     

    1/13 오늘의 기록 끝!!!!!!!!

    728x90
Designed by Tistory.