4/4솔, 걸린시간 1시간 내외
졸려서 다음 날 풀어보려했는데 잘못 눌렀더니 시작되버려서 부랴부랴 풀었다.
전 주차보다 어렵다기보다는 귀찮은 문제들이 많았다.
2주차라서 문제에 난이도가 🔥x2 였는데 어렵진 않았고
좌표값 문제인데 좌표값으로 풀려다가 꼼수 부려서 5분만에 끝냈다.
오히려 3번 문제가 헷갈려서 오래걸렸다.
아 그리고 챌린지 해설을 보니 언어가 파이썬이 주된 듯 하다.(C++도 있기는 하지만)
난이도도 파이썬에 맞춰진 느낌 + 자바로 푸는 나로써는 정답 제공이 없어서 아쉬움...
그리고 내가 풀었었던 코드는 못보는 것 같다.
코드를 올리고 싶은데 전에 풀었던 코드를 다시 못보는 것 같아 다시 풀기는 귀찮고...(다시 풀었다 결국)
1번 : 시험 개수만큼 반복문 돌려서 인원, 점수를 입력 받고 평균을 구한 다음 문제에 맞게 출력. 형 변환과 출력만 신경쓰면 되는 쉬운 문제.
2번 : 분리된 집합을 구하는 문제인데.. 앞에 글자랑 뒤에 글자랑 달라질 때 카운트를 1 증가시키면 된다.
3번 : 난이도가 1 치고는 어려운 문제. 2는 됐어야 할 듯
4번보다 어렵고 귀찮다.
다중 조건 정렬이라 자바에서 Compare를 Override 해줘서 비교해줘야 한다. 더 쉬운 방법이 있는지는 모르겠다.
소수점 둘째자리까지 보여야하므로 포매팅도 해줘야한다.
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
List<People> list = new ArrayList<>();
for(int i=0; i<N; i++){
st = new StringTokenizer(bf.readLine());
list.add(new People(st.nextToken(),Double.parseDouble(st.nextToken())));
}
Collections.sort(list, (p1, p2) -> {
if(p1.name.equals(p2.name)) {
if(p1.height > p2.height){
return 1;
}else{
return -1;
}
}else {
return p1.name.compareTo(p2.name);
}
});
System.out.println(list.get(k-1).answer());
}
}
class People {
String name;
double height;
public People(String name, double height) {
this.name = name;
this.height = height;
}
public String answer() {
return name + " " + String.format("%.2f", height);
}
}
4번 : 2차원 배열을 선언하고 좌표값 자기자신이랑 상하좌우 값을 더해 주는 것 같은데 복잡하게 하기 싫어서 상하좌우 벽만 없으면 각 방향당 1씩 카운트를 더해주면 되니
좌표값이 1이거나 n일 때 조건만 걸고 카운트를 더해주었다.
/* MondayChallenge_week2_Q4 */
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int cnt = 0;
// n이 1이면 한 칸이라 방향이 없으니 폭탄 터지는 수 만큼 반환
if(n==1) {
System.out.println(k);
return;
}
//n이 1이 아닐 때
for(int i=0; i<k; i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
if(x==1 || x==n) cnt += 2; //좌우 벽이 막혔을 때
else cnt +=3; //자기 자신과 좌우 카운트 증가
if(y==1 || y==n) cnt += 1; //상하 벽이 막혔을 때
else cnt +=2; //상하 카운트 증가
}
System.out.println(cnt);
}
}