알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
https://www.acmicpc.net/problem/2002
2002번: 추월
입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이
www.acmicpc.net
Think🤔
실버 1
첫 번째 줄에 차가 몇 대인지 주어진다.
먼저, 소문난 명콤비의 대근이는 차가 들어가는 순서대로
소문난 명콤비의 2인자 영식이는 차가 나오는 순서대로 적었다.
터널을 나왔을 때, 몇개의 차가 추월했는지 계산하는 문제이다.
차번호는 영어 대문자 , 숫자로 주어지고 6~8글자 이내이다.
규칙을 찾아보자..
ZG50 1
PU30 2
RI60 3
ZG20 4
ZG23 5
PU30 1
ZG23 2
ZG20 3
ZG50 4
RI60 5
들어간 대근이가 적은 차 번호의 값이 더 컸을 때, 추월한 차량을 구할 수 있다.
반복문을 돌리고 맨 마지막 차량 번호에 들어간 인덱스 값을 넣는다.
해쉬값으로 번호를 줘도 된다.
그리고 같은 value값을 비교해서 대근이의 key가 높으면 반환시키면 된다.
package back22y03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
public class overTake {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int carCnt = Integer.parseInt(bf.readLine());
HashMap<String, Integer> inputCar = new HashMap();
HashMap<String, Integer> outputCar = new HashMap();
//대근이와 영식이 값 넣어주기
for(int i=0; i<carCnt; i++) {
String carNum = bf.readLine();
inputCar.put(carNum, i+1);
}
for(int i=0; i<carCnt; i++) {
String carNum = bf.readLine();
outputCar.put(carNum, i+1);
}
int answer = 0; // 정답
for(Entry<String, Integer> entry : inputCar.entrySet()) {
entry.getValue();
System.out.println(entry.getValue());
}
}
}
코드를 다 작성하지 못했지만, 2중 for문으로 entry set해서 받으면 받을 수 있다..
Solution✍
package back22y03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
public class overTake {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int carCnt = Integer.parseInt(bf.readLine());
int answer = 0; // 정답
HashMap<String, Integer> map = new HashMap();
for(int i=0; i<carCnt; i++) {
String inputCar = bf.readLine();
map.put(inputCar, i);
}
int[] outputCar = new int[carCnt];
for(int i=0; i<carCnt; i++) {
String input = bf.readLine();
outputCar[i] = map.get(input); //들어갔던 차, 몇번째 들어갔는지 outputCar에 담아준다
}
System.out.println(map);
System.out.println(Arrays.toString(outputCar));
for(int i=0; i<carCnt; i++) {
for(int j=i+1; j<carCnt; j++) { // 이미 나간 차 비교 할 필요 없음
if(outputCar[i] > outputCar[j]) { //들어갔던차가 먼저 들어간 차 보다 빨리 나왔으면
answer++; // 증가시키고
break; // 끝내고 다음 차 비교한다.
}
}
}
System.out.println(answer);
}
}
Review🤩
Set으로 밸류값 두개 다 받아서 같은 키값의 value를 비교해서 먼저 들어간 차의 value가 높으면 구할 수 있는 방법
HashMap을 두개 안쓰더라도 get을 이용해서 같은 차가 들어간 순위를 배열을 이용해서 넣어줘서 구할 수 있는 문제..
구글 답안 참조...!!
'Algorithm' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (0) | 2022.03.16 |
---|---|
[프로그래머스] 나머지가 1이 되는 수 찾기 , 같은 숫자는 (0) | 2022.03.09 |
[백준] 연속부분최대곱 (0) | 2022.03.01 |
[백준] 설탕 배달 (0) | 2022.02.28 |
[백준] 숫자의 합 (0) | 2022.02.28 |