오늘은 간단히 프로그래머스 문제를 하나 풀고 자려고 한다. 오늘 풀 문제는 "모의고사" 이다. 문제 자체는 완전탐색으로 풀 수 있는 문제이다. 특별한 자료구조를 요구하지는 않지만 코드를 얼마나 깔끔하고 가독성 있게 짜는 것에 따라 코드 줄 수가 많이 차이날 듯 하다.
프로그래머스 - 모의고사 - 완전탐색 문제
문제는 위와 같다.
요약하면 입력되는 긴 배열이 3개의 패턴에 얼마나 일치하는지 체크한 후, 제일 많이 일치하는 번호를 오름차순으로 출력하는 것이다. 나는 자바 자료구조에 약하기도 하고 배열만 쓰는 사람이라 일단 막 풀어보았다.
정답 카운트 하는건 포문으로 간단히 해결 가능하지만, 최고점자를 출력하는 부분에서 코드의 깔끔함이 갈릴 것 같다.
우선은 1,2,3번의 정답수를 answer1,2,3에 저장했다. 간단한 for문이다. 완전탐색으로 풀어야 하기 때문에 여기서 더 복잡도를 줄일 수는 없다. 코드를 짜는 건 스타일에 따라 갈릴 것 같다.
다음으로 가독성이 무척 떨어지는 나의 코드..
1,2,3번의 정답 중 최대값을 구하면서 동시에 동점자도 구해서 한번에 배열을 선언하고 할당까지 했다. 머릿속으로는 list로 하면 더 깔끔할거라고 생각했는데 문법을 구글링하기 귀찮았다.. 또 max함수 같은것도 찾아보면 좋았을 것 같다. 우선은 귀찮으니까..
모든 테스트를 통과했고, 속도는 최대 0.85가 나왔다. 다른 사람들의 풀이 속도를 보니 더 빠른 코드도 많은 것 같다.
프로그래머스 "모의고사" 문제를 풀고 점수가 1078점이 됐다. 언능 올려야지.
다른사람의 코드 중 제일 깔끔해보이는 것을 가져와 보았다.
정답을 구하는 것은 큰 차이가 없으나, Math.max함수를 사용해서 최대값을 저장했다.
import java.util.*
int a = 1, b = 2, c = 3;
int max = Math.max(a, b, c)
이런식으로 파라미터 중 최대값을 리턴하는 java.util.Math의 함수이다. 리턴된 max값을 가지고 max인 학생번호를 list에 넣었다. 1번부터 순서대로 넣기 때문에 자연스럽게 오름차순으로 정렬된다.
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
ArrayList도 위 처럼 쉽게 사용가능하니 종종 사용해야겠다. 그 다음 리스트 사이즈 크기의 배열을 만들어 값을 넣고 정답을 리턴한다.
이제 약 10여개의 프로그래머스 문제를 푼 것 같은데, 거의 난이도 1이고 2가 조금 섞여있다. 더 열심히 풀어서 2단계 까지는 마스터하고 여러 자료구조를 활용 할 정도의 실력을 갖춰야겠다. 끝 :)
'IT' 카테고리의 다른 글
Springboot #3 간단한 컨트롤러 작성, Path Variable (0) | 2022.03.27 |
---|---|
Springboot #2 시작하기(feat. 인텔리제이) (0) | 2022.03.27 |
Spring Boot #1 스프링부트 개요 (0) | 2022.03.25 |
웹 서비스 그리고 웹 어플리케이션, RESTful (0) | 2022.03.25 |
웹서버와 WAS(Web Application Server)의 차이점 (0) | 2021.02.14 |