시스템 관리

# 시스템 업데이트
sudo apt update            # 패키지 목록 업데이트
sudo apt upgrade           # 설치된 패키지 업그레이드
sudo apt full-upgrade      # 의존성을 고려한 완전한 업그레이드

# 패키지 관리
sudo apt install [패키지명]   # 패키지 설치
sudo apt remove [패키지명]    # 패키지 제거
sudo apt autoremove         # 불필요한 패키지 자동 제거
apt search [검색어]          # 패키지 검색

# 시스템 정보
uname -a                    # 커널 정보 표시
lsb_release -a              # Ubuntu 버전 정보
free -m                     # 메모리 사용량 확인
df -h                       # 디스크 사용량 확인
top -bn1                    # CPU 사용량 확인

# 프로세스 관리
ps aux                      # 실행 중인 프로세스 목록
top                         # 시스템 및 프로세스 모니터링
kill [PID]                  # 프로세스 종료
killall [프로세스명]           # 특정 이름의 모든 프로세스 종료

# 서비스 관리
sudo systemctl start [서비스명]   # 서비스 시작
sudo systemctl stop [서비스명]    # 서비스 중지
sudo systemctl restart [서비스명] # 서비스 재시작
sudo systemctl status [서비스명]  # 서비스 상태 확인

파일 및 디렉토리 관리

ls                          # 디렉토리 내용 나열
ls -l                       # 자세한 목록 보기
ls -a                       # 숨김 파일 포함 모든 파일 보기
cd [디렉토리]                 # 디렉토리 변경
pwd                         # 현재 작업 디렉토리 표시
mkdir [디렉토리명]             # 디렉토리 생성
rmdir [디렉토리명]             # 빈 디렉토리 삭제
rm [파일명]                   # 파일 삭제
rm -r [디렉토리명]             # 디렉토리와 그 내용 삭제
cp [원본] [대상]              # 파일 또는 디렉토리 복사
mv [원본] [대상]              # 파일 또는 디렉토리 이동/이름변경
touch [파일명]               # 빈 파일 생성 또는 타임스탬프 업데이트

파일 내용 보기 및 편집

cat [파일명]                  # 파일 내용 출력
less [파일명]                 # 파일 내용을 페이지 단위로 보기
head [파일명]                 # 파일의 처음 10줄 보기
tail [파일명]                 # 파일의 마지막 10줄 보기
nano [파일명]                 # nano 텍스트 에디터로 파일 열기
vim [파일명]                  # vim 텍스트 에디터로 파일 열기

네트워크

ifconfig                    # 네트워크 인터페이스 정보 표시
ip addr show                # IP 주소 정보 표시
netstat -tuln               # 열린 포트 확인
ping [호스트]                 # 호스트와의 연결 테스트
ssh [사용자]@[호스트]          # SSH 원격 접속

압축 및 아카이브

tar -cvf [파일명.tar] [디렉토리] # tar 아카이브 생성
tar -xvf [파일명.tar]          # tar 아카이브 추출
gzip [파일명]                  # gzip으로 압축
gunzip [파일명.gz]             # gzip 압축 해제

검색

find [경로] -name [파일명]     # 파일 검색
grep [패턴] [파일명]           # 파일 내용에서 패턴 검색
 >> 추가
 > 덮어쓰기

계정 정보 보기

whoami
id
users
groups

리눅스 명령어 도움말 보기

man [명령어]                   # 도움말보기
[명령어] --help                # 간단 도움말 보기
whereis [명령어]               # 도움말 페이지 찾기      

https://www.codetree.ai/missions/4/problems/print-stars-in-square?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

한 번 공부해두면 어려운 개념은 아니다.

컴공 1학년 시절 처음으로 당황시킨 문제로 기억한다.

결국 코드를 통으로 외웠다.

이제는 코딩테스트를 하며 그 개념이 이해가 가 정리해두고자 한다.

11111
11111
11111

위의 코드를 출력하는 방법으로 반복문을 세 번 사용하는 방법이 있다.

for(int i=0;i<5;i++){
	System.out.print(1);
}
System.out.println();
for(int i=0;i<5;i++){
	System.out.print(1);
}
System.out.println();
for(int i=0;i<5;i++){
	System.out.print(1);
}
System.out.println();

중첩 반복문을 이용하여 위 반복문을 세 번 반복하면 된다.

for(int j=0; j<3; j++){
	for(int i=0;i<5;i++){
	System.out.print(1);
	}
	System.out.println();
}

 

'자바 문법' 카테고리의 다른 글

자바 문법 1까지 나누기  (0) 2024.04.16
자바 문법 1의 자리가 5인 경우  (0) 2024.04.14
자바 완전수 판별기  (0) 2024.04.12
자바 추상 클래스와 인터페이스  (0) 2024.04.09
자바 메소드 오버라이딩  (0) 2024.04.09

https://www.codetree.ai/missions/4/problems/divide-by-1?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=n;
        int i;
        for(i=1; i<=n; i++){
            m=m/(int)i;
            if(m<=1){
                break;
            }    
        }System.out.print(i);
    }
}

문제의 키는

1) '나누었을 때 1 이하가 되는 순간 까지' 라는 조건을 잘 이해하고 어떻게 표현하는가

2) '단, 나눗셈 진행시 각 나눗셈 연산에서 몫을 저장합니다' 라는 조건을 어떻게 이행하는가... 문제에 답이 있다.

3) 연산 중간 'System.out.print();'를 끼워 넣어 연산 결과를 확인하는 것, 그리고 손으로 한 연산과 비교해 보는 것

https://www.codetree.ai/missions/4/problems/print-onjeonsu?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

/1의 자리가 5인 경우는 5의 배수이나 10의 배수는 아닌 경우이다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();

        for(int i=0; i<=n; i++){
            if((i%2==0)||((i%5==0)&&(i%10!=0))||((i%3==0)&&(i%9!=0))){
                continue;
            }
            System.out.print(i+" ");
        }
    }
}

'자바 문법' 카테고리의 다른 글

자바 문법 별 그리기 다중 반복  (0) 2024.04.23
자바 문법 1까지 나누기  (0) 2024.04.16
자바 완전수 판별기  (0) 2024.04.12
자바 추상 클래스와 인터페이스  (0) 2024.04.09
자바 메소드 오버라이딩  (0) 2024.04.09

https://www.codetree.ai/missions/4/problems/perfect-number-discriminator?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 완전수는 자기 자신을 제외한 양의 약수를 더했을 때 자기 자신이 되는 양의 정수이다.

6에서 자기 자신을 제외한 양의 약수를 더하면 1+2+3 으로, 완전수이다.

또는 모든 양 약수를 더했을 때 자기 자신의 2배가 되는 수를 말하기도 한다.  

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // 여기에 코드를 작성해주세요.
        Scanner sc=new Scanner(System.in);
        int sum=0;
        int n=sc.nextInt();
        for(int i=1; i<n; i++){
            if(n%i==0){
                sum+=i;
            }
        }
        if(sum==n){
            System.out.print("P");
        }else{
            System.out.print("N");
        }
        
    }
}

//주어진 부터 1씩 감소하여 1까지 나누었을 때
//나머지가 0인 경우 그 수는 주어진 수의 약수이다.
//그러므로 약수의 총합이 주어진 수가 되면 그 수 n은 완전수이다.

 

추상 클래스는 상속에서 슈퍼 클래스로 사용된다.

추상 메소드

추상 메소드란 선언은 되어 있으나 코드가 구현되어 있지 않은, 즉 껍데기만 있는 메소드이다. 추상 메소드를 작성하려면 abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다. 다음은 추상 메소드를 선언한 예이다.

public abstract String getName();
public abstract void setName(String s);

추상 클래스(abstract class)

추상 클래스는 객체를 생성할 수 없다.

추상클래스를 단순히 상속받는 서브클래스는 추상 클래스가 된다. 추상 클래스의 추상 메소드를 그대로 상속받기 때문이다. 그러므로 서브 클래스에 abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 나지 않는다.

추상 클래스는 추상 메소드를 통해 서브 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스의 역할을 하고, 서브 클래스는 추상 메소드를 목적에 맞게 구현하는 다형성을 실현할 수 있다. 

추상클래스를 상속받은 서브 클래스는 개발자에 따라 다양하게 구현된다. 추상 클래스를 책의 목차에 비유하면, 서브 클래스는 목차에 따라 작성된 책과 같다. 책을 쓸 때도 목차를 잡아놓고 책을 쓰면 훨씬 쉽고 빠르며 방향이 흐트러지지 않는 것처럼 추상 클래스를 이용하면 응용프로그램의 설계와 구현을 분리할 수 있다. 추상 클래스로 기본 방향을 잡아놓고 서브 클래스에서 구현하면 구현 작업이 쉬워진다. 또한 추상 클래스는 계층적 상속 관계를 가지는 클래스들의 구조를 만들 때 적합하다. 

추상 클래스 구현 연습

package GoodCalc;

abstract class Calculator{
	public abstract int add(int a, int b); //두 정수의 합을 구하여 리턴
	public abstract int subtract(int a, int b); // 두 정수의 차를 구하여 리턴
	public abstract double average(int[] a); //배열에 저장된 정수의 평균 리턴
}

public class GoodCalc extends Calculator{
	@Override
	public int add(int a,int b) { //추상 메소드 구현
		return a+b;
	}
	@Override
	public int subtract(int a,int b) { //추상 메소드 구현
		return a-b;	
	}
	@Override
	public double average(int[] a) {//추상 메소드 구현
		double sum=0;
		for(int i=0; i<a.length; i++) {
			sum+=a[i];
		}
		return sum/a.length;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GoodCalc c=new GoodCalc();
		System.out.println(c.add(2, 3));
		System.out.println(c.subtract(2, 3));
		System.out.println(c.average(new int[] {2,3,4}));
	}
	
}

 

인터페이스

인터페이스(interface)는 규격을 의미한다.

자바의 인터페이스는 interface 키워드를 사용하여 클래스를 선언하듯이 선언한다. 

interface PhoneInterface{//인터페이스 선언
	public static final int TIMEOUT=10000; //상수 필드, public static final 생략 가능
    public abstract void sendCall(); //추상 메소드, public abstract 생략 가능
    public abstract void reveiveCall(); //추상 메소드, public abstract 생략 가능
    public default void printLogo(){ //default 메소드, public 생략 가능
		System.out.println("**Phone**");
    };// 디폴트 메소드
}

java 10 까지 인터페이스는 상수, 추상메소드(public abstract), default 메소드, private 메소드, static 메소드 총 5가지 종류의 멤버로 구성되며, 필드(멤버변수)를 만들 수 없다.

인터페이스는 객체를 생성할 수 없다. 인터페이스에 구현되지 않은 추상 메소드를 가질 수 있기 때문에 객체를 생성할 수 없다.

인터페이스 타입의 레퍼런스 변수는 선언 가능하다. PhoneInterface galaxy;

클래스는 인터페이스를 상속받을 수 없고, 인터페이스끼리만 상속이 가능하다. 인터페이스의 상속은 extends 라는 키워드를 이용한다. 자바는 인터페이스의 다중 상속을 허용한다. 

인터페이스를 상속 받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현하여야 한다. 

인터페이스 구현이란 implements 라는 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현한 클래스를 작성하는 것을 말한다. 

인터페이스와 추상 클래스의 비교

추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브 클래스에서 구현할 수밖에 없는 기능만을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적

인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적

인터페이스는 필드는 포함하지 않는다. 그리고 다중 상속을 지원한다.

'자바 문법' 카테고리의 다른 글

자바 문법 1의 자리가 5인 경우  (0) 2024.04.14
자바 완전수 판별기  (0) 2024.04.12
자바 메소드 오버라이딩  (0) 2024.04.09
자바 업캐스팅과 instanceof 연산자  (0) 2024.04.09
자바 상속 super( )  (0) 2024.04.09

+ Recent posts