알고리즘 문제 일괄 수정을 위한 스크립트 - swkim0128/PARA GitHub Wiki


type: Linux archive: false

실행환경 : mac os(해당 명령어는 맥 os에서 유요한 명령어 형식)

1. extends Solution → extends Main 수정

find . -type f -name "*.java" -exec sed -i '' 's/extends Solution/extends Main/g' {} +
  • 목적: 모든 Java 파일에서 extends Solution을 extends Main으로 변경.
  • 확인 방법:
grep -H 'extends Main' $(find . -type f -name "*.java")

이 명령은 모든 변경된 파일을 보여줍니다.

2. solution 메서드 이름을 run으로 변경

find . -type f -name "*.java" -exec sed -i '' 's/solution/run/g' {} +
  • 목적: 모든 Java 파일에서 solution 메서드 이름을 run으로 변경.
  • 확인 방법:
grep -H 'public void run' $(find . -type f -name "*.java")

이 명령은 public void run 메서드가 생성된 모든 파일을 보여줍니다.

3. BufferedReader 코드 추가

find . -type f -name "*.java" -exec sed -i '' '/public void run() throws IOException {/a\
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));' {} +
  • 목적: 모든 Java 파일의 public void run() throws IOException { 라인 바로 아래에 BufferedReader를 추가.
  • 확인 방법:
grep -H 'BufferedReader read' $(find . -type f -name "*.java")

이 명령은 BufferedReader read가 추가된 파일들을 보여줍니다.

4. static 블록 동적 추가

find . -type f -name "*.java" -exec bash -c '
class_name=$(awk "/public class/ {print \$3}" "$1")
sed -i "" -e "/^}$/i\\
    static {\\
        try {\\
            new ${class_name}().run();\\
        } catch (IOException e) {\\
            throw new RuntimeException(e);\\
        }\\
    }" "$1"
' bash {} \;
  • 목적: 모든 Java 파일의 클래스명에 맞게 동적 static 블록을 추가합니다. static 블록은 마지막 중괄호(}) 바로 위에 추가됩니다.
  • 확인 방법:
grep -A 5 'static {' $(find . -type f -name "*.java")

이 명령은 static 블록이 추가된 파일과 그 안의 내용을 확인할 수 있습니다.

5. implements SolutionImpl → extends Main으로 변경

find . -type f -name "*.java" -exec sed -i '' 's/implements SolutionImpl/extends Main/g' {} +

명령어 설명

  1. find . -type f -name "*.java":
    • 현재 디렉터리와 하위 디렉터리에서 모든 .java 파일을 찾습니다.
  2. sed:
    • s/implements SolutionImpl/extends Main/g: implements SolutionImpl을 extends Main으로 모든 파일에서 대체합니다.
    • -i '' (macOS): 백업 없이 파일을 수정합니다.
    • -i (Linux): 백업 없이 수정.

결과 확인

수정된 파일을 확인하려면 아래 명령어를 사용하세요:

grep -H 'extends Main' $(find . -type f -name "*.java")

결과 확인

각 명령어가 제대로 실행되었는지 확인하는 방법을 설명해드렸습니다. 정상적으로 수정되었다면:

  1. extends Main이 모든 Java 파일에 존재.
  2. public void run 메서드가 모든 solution 메서드 이름을 대체.
  3. BufferedReader read 코드가 run 메서드 아래에 추가됨.
  4. static 블록이 각 클래스의 마지막 중괄호(}) 바로 위에 추가됨.
⚠️ **GitHub.com Fallback** ⚠️