컴공댕이 공부일지

230327 EC.crew 4기 3주차 정모 (★2579 계단 오르기) 본문

기록/EC.crew 정기 모임 정리

230327 EC.crew 4기 3주차 정모 (★2579 계단 오르기)

은솜솜솜 2023. 3. 27. 19:38
728x90

 

#1. 2941 크로아티아 알파벳 

실버 5

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

 

풀이 설명 :

for반복문으로 문자열 쭉 훑다가, 조건문으로 해당 문자가 있는지 확인 들어오면 카운트 늘리고, 인덱스를 글자 길이에 맞게 적절하게 옮기고, continue 사용해서 아래는 무시하고, 다음 반복문으로 진행하도록!!

 

정답코드 

import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		
		int count = 0;
		
		String str = s.nextLine();
		
		
		for(int i=0; i<str.length(); i++) {
			
			if(i<str.length()-1) {
				if(str.charAt(i)=='c') {
					if(str.charAt(i+1)=='=') {
						count++;
						i++;
						continue;
					} else if(str.charAt(i+1)=='-') {
						count++;
						i++;
						continue;
					} 
				}

				if(str.charAt(i)=='d') {
					if(i<str.length()-2) {
						if(str.charAt(i+1)=='z' && str.charAt(i+2)=='=') {
							count++;
							i+=2;
							continue;
						}
					}
					
					if(str.charAt(i+1)=='-') {
						count++;
						i++;
						continue;
					} 
				}
				
				if(str.charAt(i)=='l' && str.charAt(i+1)=='j') { 
					count++;
					i++;
					continue;
				}
				
				if(str.charAt(i)=='n' && str.charAt(i+1)=='j') { 
					count++;
					i++;
					continue;
				}
				
				if(str.charAt(i)=='s' && str.charAt(i+1)=='=') { 
					count++;
					i++;
					continue;
				}
				
				if(str.charAt(i)=='z' && str.charAt(i+1)=='=') { 
					count++;
					i++;
					continue;
				}
			}
			
			
			count++;
		}
		
		
		System.out.println(count);
	}
}

 

 

 

#2. 5622 다이얼 

브론즈 2

 

https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

정답코드

import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		
		String str = s.nextLine();
		
		int time = 0;
		for(int i=0; i<str.length(); i++) {
			switch(str.charAt(i)) { 
			case 'A':
			case 'B':
			case 'C':
				time+=3;
				break;
			case 'D':
			case 'E':
			case 'F':
				time+=4;
				break;
			case 'G':
			case 'H':
			case 'I':
				time+=5;
				break;
			case 'J':
			case 'K':
			case 'L':
				time+=6;
				break;
			case 'M':
			case 'N':
			case 'O':
				time+=7;
				break;
			case 'P':
			case 'Q':
			case 'R':
			case 'S':
				time+=8;
				break;
			case 'T':
			case 'U':
			case 'V':
				time+=9;
				break;
			case 'W':
			case 'X':
			case 'Y':
			case 'Z':
				time+=10;
				break;
			}
		}
		
		
		System.out.println(time);
	}
}

 

 

 

#3. 10811 바구니 뒤집기 

브론즈 2

 

https://www.acmicpc.net/problem/10811

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

 

정답 코드

import java.util.Scanner;


public class Main {
	public static void main(String[] args) {
		
		Scanner s = new Scanner(System.in);
		
		int n = s.nextInt();
		int m = s.nextInt();
		int [] arr = new int[n];
		
		for(int i=0; i<n; i++) {
			arr[i]=i+1;
		}
		
		while(m>0) {
			int i=s.nextInt()-1; //-1해줘서 인덱스로 변환!
			int j=s.nextInt()-1;
			
			int count = 0;
			
			if((j-i)%2==0) { //바꾸는 횟수 count
				count=(j-i)/2;
			} else {
				count=((j-i)+1)/2;
			}
			
			int temp=0;
			for(int k=0; k<count; k++) {
				temp=arr[i+k];
				arr[i+k]=arr[j-k];
				arr[j-k]=temp;
			}
			
			m--;
		}
		
		for(int k=0; k<n; k++) {
			System.out.print(arr[k]+" ");
		}
	}
}

 

 

사담 ) 카드 역배치 문제랑 비슷한 문제인데! 다 풀고 그 코드를 보니 살짝 다른 풀이에 신기했다.

과거의 나와는 살짝 다른 코드를, 전보다 더 수월하게 빨리 풀었다! 히히. 카드 역배치 문제는 똑같이 구간 내의 배열을 뒤집는건데 한참 풀었었거든요! 암튼 오늘 뭔가 문제가 술술 풀린다! 쉬운 문제들이지만 .. ><ㅎ.. 

 

 

 

#4. 2579 계단 오르기★ 

미해결

실버 3

https://www.acmicpc.net/problem/2579

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

 

 

728x90
Comments