왔다 갔던 구역 2
40XP보통
정답률 39% · 제출 3,017회 · 예상 소요 시간 68분
34아쉬워요
1 StarEmpty내 리스트에 추가
위치 0에서 시작하여 n번의 명령에 걸쳐 움직인 뒤, 2번 이상 지나간 영역의 크기를 출력하는 프로그램을 작성해보세요. 단 명령은 “x L“, “x R” 형태로만 주어집니다. "x L" 의 경우 왼쪽으로 x만큼 이동해야 함을, "x R"의 경우 오른쪽으로 x만큼 이동해야 함을 뜻합니다.
입력 형식
첫 번째 줄에는 n이 주어집니다.
두 번째 줄 부터는 n개의 줄에 걸쳐 명령이 주어집니다. 형태는 “x L” 혹은 “x R” 입니다.
- 1 ≤ n ≤ 100
- 1 ≤ x ≤ 10
출력 형식
첫 번째 줄에 명령을 주어진 순서대로 수행했을 때, 2번 이상 지나간 영역의 크기를 출력합니다.
입출력 예제
예제1
입력:
6
2 R
6 L
1 R
8 L
1 R
2 R
출력:
6
import java.util.*;
public class Main {
public static void main(String[] args) {
// 여기에 코드를 작성해주세요.
Scanner sc = new Scanner(System.in);
int offset = 100; //오프셋은 넉넉잡았음
int a = 0; //좌표 초기값
int [] arr = new int [201];
int n = sc.nextInt();
for(int i =0; i<n; i++){
int x = sc.nextInt();
char dir = sc.next().charAt(0);
if(dir == 'R'){
for(int j = a; j<a+x; j++ ){ //겹치는 "구간"이니까 for문은 x1부터 x2-1까지
arr[j+offset]++; //겹치는 구간 칠하기
}
a += x; //위치 갱신
}
else{
for(int j = a-1; j>=a-x; j-- ){
//범위 주의 : 좌표와 배열 인덱스 번호를 묶어 생각하지 않기
arr[j+offset]++;//offset을 j 범위에 더해주는게 아니라 배열 번호에 더해줘야했음..
}
a -= x; //위치 갱신
}
}
int cnt = 0; //겹치는 구간 수
for(int k =0; k<201; k++){
if(arr[k]>=2){
cnt++;
}
}
System.out.println(cnt);
}
}
L R 관련 if 문에서
a의 범위를 잘 생각해야됨!!
왜 + - 1 해주는지 이해가 안되면 두 코드 비교해서 보기
import java.util.*;
public class Main {
public static void main(String[] args) {
// 여기에 코드를 작성해주세요.
Scanner sc = new Scanner(System.in);
int offset = 100; //오프셋은 넉넉잡았음
int a = 0; //좌표 초기값
int [] arr = new int [201];
int n = sc.nextInt();
for(int i =0; i<n; i++){
int x = sc.nextInt();
char dir = sc.next().charAt(0);
if(dir == 'R'){
for(int j = a+1; j<=a+x; j++ ){ //겹치는 "구간"이니까 for문은 x1부터 x2-1까지
arr[j+offset]++; //겹치는 구간 칠하기
}
a += x; //위치 갱신
}
else{
for(int j = a; j>a-x; j-- ){ //offset을 j 범위에 더해주는게 아니라 배열 번호에 더해줘야했음..
arr[j+offset]++;
}
a -= x; //위치 갱신
}
}
int cnt = 0; //겹치는 구간 수
for(int k =0; k<201; k++){
if(arr[k]>=2){
cnt++;
}
}
System.out.println(cnt);
}
}
'알고리즘 > 코드트리' 카테고리의 다른 글
코드트리 | 객체/폭탄해제 [자바 java] (0) | 2024.08.09 |
---|---|
코드트리 | 객체 / 코드네임 [자바 java] (0) | 2024.08.05 |
코드트리 dx dy 테크닉/ 문자에 따른 명령2 (0) | 2024.08.02 |
코드트리/ 999 또는 -999 [자바 java] (1) | 2024.07.30 |
코드트리/ 최대로 겹치는 구간, 지점 (1) | 2024.07.25 |