본문 바로가기
개발자로 나아가는 나의 언어들/JAVA

[JAVA/Softeer] 연탄 배달의 시작

by 승싱생숭 2024. 9. 23.
728x90

 

연탄 배달의 시작

 

문제

 

일직선 상의 좌표값들 중 산타가 방문할 위치의 수를 찾는 문제이다.

풀이

 

input값을 공백 단위로 분리하여 배열에 담은 후 값을 비교해 주었다.

 

처음 정거장과 다음 정거장의 차이값을 기준으로 잡고 순서대로 비교해 나아가면 될 것이라고 생각하였다.

 

간격값이 이전 비교 값과 같다면 카운트만 증가시켜주고 이전 비교값보다 크다면 아무 조치도 하지않고 넘겨준다.

그리고 간격값이 이전 비교값보다 작게 나온경우에만 값을 업데이트 해주고 카운트값을 1로 초기화 시키면 된다.

 

순차탐색 문제가 아닐까? 싶었다..

 

아래는 이번 문제를 풀때 종이에 풀이해보았던 방식이다.

 

쉬운문제라 머리로만 생각할 수도 있지만 추후 어려운 문제를 직면했을때를 위해 종이에 적어 풀이하는 연습을 하는것이 중요하다고 생각한다.

	public static void main(String[] args)  throws Exception {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine()); //3
		String[] InputArr = (br.readLine()).split(" "); //정거장 담는 변수
		int diff = Integer.parseInt(InputArr[1])-Integer.parseInt(InputArr[0]); // 초기 차이값
		int count = 1; // 카운트
		
		for(int i = 2 ; i < T ; i++) {
			
			int compare = Integer.parseInt(InputArr[i]) - Integer.parseInt(InputArr[i-1]); // 초기 차이값 + 1 정류장부터
			System.out.println("diff : " + diff + " count : " + count + " compare : " + compare );
			
			if(compare==diff){ // 간격값이 같은 경우 카운트 +
				count++;
			}else if(compare>diff){ // 현재 간격값보다 큰 경우 pass
				
			}else{ // 간격값이 작은 경우 카운트 초기화
				diff = compare;
				count = 1;
			}
			
		}
		
		System.out.println(count);
		
	}

 

 

결과

 

 


 

처음 문제를 풀 때에는 중간에 값이 큰 경우 pass 로직을 넣지않아 값이 이상하게 나왔다.

그런 경우에는 sysout을 통해 내가 짜놓은 코드의 값이 흐르는 흐름을 눈으로 직접보는게 좋다.

그래서 중간에 정답 외의 sysout 값을 출력하도록 하는 라인을 남겨두었다.

 

무언가 해답이 보이지 않을 때에는 한줄 한줄 나의 코드를 들여다보는 습관을 들이면 나중에 큰 도움이 될때가 있다.

나는 컴퓨터도 천재도 아니기 때문에..

 

728x90