SWEA 1230 암호문3 (Java, Python)

sua_ahn·2023년 1월 19일
0

알고리즘 문제풀이

목록 보기
8/14
post-thumbnail

해당 문제는 최적화 되지 않은 문제라고 봄

  • 문제 설명 난해
  • 예시 case 복잡
  • 'A' 맨 뒤 추가 기능 구현하지 않아도 Pass 가능

LikedList, StringTokenizer 사용

  • Java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
 
class Solution {
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        for(int test_case = 1; test_case <= 10; test_case++) {
            br.readLine();    						// 원본 암호문의 길이 날리기
            LinkedList<String> password = new LinkedList<>();   // 암호문
            StringTokenizer original = new StringTokenizer(br.readLine());
            while(original.hasMoreTokens()) {
                password.add(original.nextToken());	// 원본 암호문 LinkedList에 저장
            }
            br.readLine();    						// 명령어의 개수 날리기
            // 명령어
            StringTokenizer command = new StringTokenizer(br.readLine());
            while(command.hasMoreTokens()) {
                String func = command.nextToken();	// 기능
                if(func.equals("I")) {
                    int x = Integer.parseInt(command.nextToken());  // 삽입 위치
                    int y = Integer.parseInt(command.nextToken());  // 삽입 개수
                    for (int i = 0; i < y; i++) {
                        password.add(x + i, command.nextToken());   // 암호문에 삽입
                    }
                } else if(func.equals("A")){
                    int x = password.size();  						// 삽입 위치 맨 뒤
                    int y = Integer.parseInt(command.nextToken());  // 삽입 개수
                    for (int i = 0; i < y; i++) {
                        password.add(x + i, command.nextToken());   // 암호문에 삽입
                    }
                } else {
                    int x = Integer.parseInt(command.nextToken());  // 삭제 위치
                    int y = Integer.parseInt(command.nextToken());  // 삭제 개수
                    for (int i = 0; i < y; i++) {
                        password.remove(x + i);		// 삭제
                    }
                }                
            } // end while
            // 출력
            System.out.print("#" + test_case);
            for (int i = 0; i < 10; i++) {
                System.out.print(" " + password.get(i));
            } System.out.println();
        }
    }
}

 

list 사용

  • Python
for test_case in range(1, 11):
    input()		                    # 원본 암호문의 길이 날리기
    original = input().split()		# 원본 암호문
    input()		                    # 명령어의 개수 날리기
    cmd = input().split()			# 명령어
    for idx in range(len(cmd)):
        if cmd[idx] == 'A':			# 맨 뒤 추가
            y = int(cmd[idx + 1])
            for i in range(y):
                original.append(cmd[idx + i + 2])
        elif cmd[idx] == 'I':		# 삽입
            x = int(cmd[idx + 1])
            y = int(cmd[idx + 2])
            for i in range(y):
                original.insert(x + i, cmd[idx + i + 3])
        elif cmd[idx] == 'D':		# 삭제
            x = int(cmd[idx + 1])
            y = int(cmd[idx + 2])
            for i in range(y):
                original.pop(x + i)
    # 출력
    print("#", test_case, sep="", end="")
    for i in range(10):
        print(" ", original[i], sep="", end="")
    print()
profile
해보자구

0개의 댓글