• 약수의 합
def solution(n):
    answer = 0
    for i in range(1,n+1):
        if n%i==0:
            answer+=i
        
    return answer

<남의 풀이: 람다식>

def sumDivisor(num):
    return sum(filter(lambda x: num % x == 0, range(1, num + 1)))

 

 

 

  • 문자열 내 p와 y의 개수
    def solution(s):
        answer = True
        p=0
        y=0
        for i in s:
            if(i=="p" or i == "P"):
                p+=1
            elif(i=="y" or i=="Y"):
                y+=1
        if(p!= y):
            answer =False
        return answer​

<남의 풀이 : 집계함수 > --모두 다 소문자로 바꾼다. 함수를 잘쓰자.

def solution(s):
    # 함수를 완성하세요
    return s.lower().count('p') == s.lower().count('y')

 

'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

 

 

 

  • 같은 숫자는 싫어
    def solution(arr):
        answer = [arr[0]]
        
        for i in range(1,len(arr)):
            if arr[i] !=arr[i-1]:
                answer.append(arr[i])
    
        return answer​

<다름사람풀이: [-1:] 슬라이싱>

def solution(s):
    a = []
    for i in s:
        if a[-1:] == [i]: continue
        a.append(i)
    return a

 

 

  • 가운데글자 가져오기
    def solution(s):
        return s[(len(s)-1)//2:len(s)//2+1]​

 

  • x만큼 간격이 있는 n개의 숫자
    def solution(x, n):
        answer = []
        for i in range(1,n+1):
            answer.append(x*i)
        return answer​
    def solution(x, n):
        # 함수를 완성하세요
        return [i * x + x for i in range(n)]​
def solution(x, n):
    # 함수를 완성하세요
    return [i for i in range(x, x*n+1, x)]

'코드테스트' 카테고리의 다른 글

코딩테스트 lv.1 - 파이썬  (0) 2021.06.18
5.해쉬함수  (0) 2021.06.18
4.진법변환/비트연산  (0) 2021.06.17
3. 깊이우선탐색/ 너비탐색  (0) 2021.06.02
2.완전탐색/ 이분탐색  (0) 2021.05.30

0. oop의 3대특징

다형성, 상속, 캡슐화

 

 

1.생성자(constructor)

-메소드명=클래스명

-리턴자료형이 정의

new 클래스명(입력항목,,,);

 

 

public class HouseDog extends Dog {
    public HouseDog(String name) {
        this.setName(name);
    } 

    public static void main(String[] args) {
        HouseDog dog = new HouseDog("happy");
        System.out.println(dog.name);
    }
}

출력>> happy

 

 

:입력항목이 다른 생성자 여러개 생성자(overloading)이라고 한다. 

public static void main(String[] args) {
        HouseDog happy = new HouseDog("happy"); //클래스명 HouseDog을 받았다. 생성자 (string) 
        HouseDog yorkshire = new HouseDog(1); //클래스명 HouseDong 생성자(int)

 

 

 

:메소드 오버로딩( feed라는 메소드에서 입력값 자료형타입 다름)

public class ZooKeeper {
    public void feed(Tiger tiger) {
        System.out.println("feed apple");
    }

    public void feed(Lion lion) {
        System.out.println("feed banana");
    }

    public static void main(String[] args) {
        ZooKeeper zooKeeper = new ZooKeeper();
        Tiger tiger = new Tiger();
        Lion lion = new Lion();
        zooKeeper.feed(tiger);
        zooKeeper.feed(lion);
    }
}

 

인터페이스: implements라는 키워드 사용. 반복이 귀찮을때 사용.

 

 

 

 

 

출처:https://wikidocs.net/281

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

docker

1.static vs non static

static 어느 클래스에서도 접근가능하고, 같은 변수를 공유 : 여러번 호출시 값이 누적되어 변경

non-static: 이름이 같더라도 별개의 변수: 여러번 호출시에도 처음 그대로

 

 

2.접근제한자

public:

protected : 다른 패키지 같은 클래스 상속 

default:  같은 패키지 내에서만

private:  같은 클래스내에서만 

 

 

3.상속

A extends B: A클래스는 B클래스를 상속한다. A(자식)이 사용할 수 있는 범위가 넓다

 

Vehicle.java : Vehicle 클래스에는 name 객체변수가 있다. SetName 메소드에는 입력o 출력x(프린트x) 

package com.test04;

public class Vehicle {
	String name;

	public void SetName(String name) {
		this.name = name;
	}

}

Car.java  //웬만하면 클래스이름은 대문자로 하기!! 객체들랑 헷갈려,,

package com.test04;

public class Car extends Vehicle{ //자식클래스 extends 부모클래스
	

}

 

Car라는 클래스가 Vehicle을 상속받음

public class Car extends Vehicle { // 자식클래스 extends 부모클래스
	public static void main(String[] args) {
		Car car = new Car();
		car.SetName("BMW");  //객체.메소드(인수)
		System.out.println(car.name); //print(객체.객체변수)

	}

}

출력값 : BMW

 

public class Car extends Vehicle { // 자식클래스 extends 부모클래스

	public void Drive() { // Drive 메소드 입력x 출력x(프린트만 한다)
		System.out.println(this.name + " vroom vromm-");
	}

	public static void main(String[] args) { // main 메소드
		Car car = new Car();
		car.SetName("BMW");
		System.out.println(car.name); // Vehicle메소드는 프린트함수가 없음
		car.Drive(); // 객체.메소드

	}

}

출력값:

BMW

BMW vroom vroom-

 

Vehicle car=new Car(); //Car의 새로운 객체는, Vehicle 자료형이다.

 

반대는 안된다. Vehicle> Car 이므로, =new 자식클래스가 오른쪽에 위치한것만 가능

 

 

기본적으로 모든 클래스는 Object 클래스를 상속받고 있다.

그래서 아래와 같은 형태도 가능하다.

Object vehicle=new Vehicle();
Object car=new Car();

 

 

4.메소드 오버라이딩

public class Deutsch extends Car { // Vehicle> Car> Deutsch순서로 상속
	public static void main(String[] args) {
		Deutsch deutsch = new Deutsch();
		deutsch.SetName("E_CLASS");// Vehicle의 SetName 메소드
		deutsch.Drive();
	}

}

출력값: E_CLASS vroom vroom-

 

public class Deutsch extends Car { // Vehicle> Car> Deutsch 순서로 상속
	public void Drive() { //Car의 Drive 메소드와 같음
		System.out.println(this.name+" vroom vroom- in Deutsch");
		
	}
	
	public static void main(String[] args) {
		Deutsch deutsch = new Deutsch();
		deutsch.SetName("E_CLASS");// Vehicle의 SetName 메소드
		deutsch.Drive();
	}

}

E_CLASS vroom vroom- in Deutsch

자식클래스의 메소드가 더 높은순위를 가진다. 부모클래스의 메소드를 덮어쓴다. 

 

5.메소드 오버로딩( 변경x 추가o )

같은 클래스에 입력값만추가(자료형 변수);

 

6.다중상속

자바는 다중상속 지원안해.

class C extends A, B { //이런게 안 된단 소리
    public void static main(String[] args) {

 

 

출처:https://wikidocs.net/280

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

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

자바3. 생성자, 인터페이스  (0) 2021.06.28
자바1. 자료형, equals vs ==, 클래스, 메소드  (0) 2021.06.26

 

1.자료형 (byte) 

boolean(1)

char(2)

int(4)

long (8)

float(4)

double(8)

 

 

2.문자열 비교

문자열의 값을 비교할때는 equals 를 사용해야 함.

String a = "hi";
String b = new String("hi"); 
System.out.println(a.equals(b)); 
System.out.println(a==b);

문자열 a와 b는 문자열  "hi"

equals => true

== 연산자 =>false.  :a와 b는 같은값이지만 서로 다른 객체이기 때문. 자료형이 동일한 객체인지를 판별할 때 ==사용

 

 

 

3.객체지향 프로그래밍: oop //자바는 oop

-클래스,객체, 인스턴스

-상속

-인터페이스

-다형성

-추상화

 

 

4.클래스

클래스는 객체(object)를 생성한다. 

public class Vehicle{
	Vehicle bike= new Vehicle();
}

:객체(object) vs 인스턴스(instance) 

bike만을 지칭할때 객체:  bike는 객체 

bike과 vehicle과의 상관관계를 설명할때 인스턴스:  bike는 vehicle의 인스턴스

(클래스는 붕어빵틀, 객체는 붕어빵)

 

:필드와 객체는 뭐가 다른가?

 

 

public class Vehicle{
		String name;  //name은 객체변수, 인스턴스 변수,멤버 변수, 속성

	public static void main(String[] args){
	    Vehicle bike= new Vehicle();
	      System.out.println(bike.name); //bike 객체, name 객체변수
	    }
	}

결과값: null

아직 name 선언만 하고 대입을 안함 (대입하는 가장 보편적인 방법: 메소드)

 

public class Vehicle {
	String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성

	public void Setname(String name) {
		this.name = name;
	}

	public static void main(String[] args) {
		Vehicle bike = new Vehicle();
		System.out.println(bike.name); // bike 객체, name 객체변수
	}
}

public static은 어디에 있는가.??

이건 입력은 String name이 있는데 출력은 없는(void만 있다). 메소드

이클립스에서 컨트롤+쉬프트+F 누르면 알아서 정렬된다.

 

public class Vehicle {
	String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성

	public void SetName(String name) {
		this.name = name;
	}

	public static void main(String[] args) {
		Vehicle bike = new Vehicle();
		bike.SetName("boby"); //대입해줌. 객체.메소드
		System.out.println(bike.name); // bike 객체, name 객체변수
	}
}

bike.SetName("body")

this.name=name;에서

this.name="body";로 변경

SetName 메소드에서 사용된 this는 Vechicle 클래스에 의해 생성된 객체를 지칭한다(bike)

bike.SetNmae("body")에서 bike객체에 의해 SetName 메소드를 호출하면, SetNname 메소드의 this는 bike를 가리키게 된다. 

bike.name="body";로 변경

그럼 Vehicle 클래스를 실행하면 body가 출력되는 것을 볼수있다. 

 

 

public class Vehicle {
	String name; // name은 객체변수, 인스턴스 변수,멤버 변수, 속성

	public void SetName(String name) { // 메소드 (void)
		this.name = name;
	}

	public static void main(String[] args) {
		Vehicle bike = new Vehicle();
		bike.SetName("boby");

		Vehicle board = new Vehicle(); // 객체만들기. 메인에서만 되나?
		board.SetName("happy"); // 객체.메소드

		System.out.println(bike.name); // bike 객체, name 객체변수
		System.out.println(board.name);
	}
}

bike이외에 board  추가하기. 

출력값

body

happy

이클립스에 반드시 컨트롤+s로 저장하고 run하도록 하자.

 

 

 

5.메소드 

public 리턴자료형 메소드형( 입력자료형1 입력변수1, 입력자료형2 입력변수2) {
 return 리턴값; //리턴자료형이 void이면 return문이 없다.
}

 

메소드의 입출력유무에 따른 4가지 분류

-입력ㅇ 출력ㅇ : 가장 common

pulblic int sum(int a, int b){
	return a+b;
}
Test myTest=new Test(); //Test 클래스. 객체 myTest
int c= myTest.sum(a,b); //리턴값받을 변수=객체.메소드명(입력인수1,입력인수2);

-입력 x  출력o :리턴값이 있어서 메인메소드에서 지정해줘야한다.

public String say(){
	return "Hi";
}
Test myTest=new Test(); //클래스 객체
String a=myTest.say(); //데이터타입 변수= 객체.메소드명()
System.out.println(a); //변수 그대로 대입

 

-입력 o  출력 x (void는 리턴값이 없는경우)

public void sum(int a, int b){
	System.out.println(a+"과" +b+"의 합은" +(a+b)+"입니다."); //return값이 없다. void가 잇다.
}
Test myTest=new Test();
myTest.sum(3,4); //객체.메소드(인수1,인수2);

>>3과 4의 합은 7입니다.출력

 

sysout은 메소드 내에서만 사용되는 문장이고, 돌려주는 값이 없다.

문자열을 출력한다 != 리턴값이 있다.

return만 돌려주는값이 있다. 

 

-입력 x  출력 x

public void say(){
	System.out.println("HI");
}

void: 입력값이 없다.

Test myTest=new Test(); //클래스명 객체지정
myTest.say(); //객체.메소드명();

이렇게 한가지 방법으로만 사용된다. 객체. 메소드명();

 

-리턴의 또다른 사용법

public void say_nick(String nick) {
    if ("fool".equals(nick)) {
        return;
    }
    System.out.println("나의 별명은 "+nick+" 입니다.");
}

: say_nick이라는 메소드는 nick이란 객체변수를 받아서 문자열만 출력하는 메소드. 리턴값 없음.

if 조건문에서 입력값이 fool일 경우, true값이 되어 문자열 출력없이 메소드를 빠져나간다. 

특정조건에서 메소드를 탈출하고 싶은경우 return문을 이용한다. (void형인 경우만 가능. 리턴자료형 명시안된)

 

class Test {
    public void vartest(int a) { //vartest라는 메소드. return이 없는 void이므로 입력o 출력x 메소드
        a++;
    }

    public static void main(String[] args) {
        int a = 1;	//객체변수 a
        Test myTest = new Test(); //객체
        myTest.vartest(a); //객체.메소드명(인수);
        System.out.println(a);
    }
}
1

메소드 안의 변수는 메소드 안에서만 쓰인다.

그래서 vartest 메소드 안의 a++는 vartest안에서만 유효함.

class Test {
	public void vartest(int b) {
    b++;
}
    public static void main(String[] args) {
        int a = 1;
        Test myTest = new Test();
        myTest.vartest(a);
        System.out.println(a);
    }
}

그래서 이렇게 vartest 변수를 b로 바꾼것과 완전히 동일하다.

메소드 내에서만 쓰는 변수를 '로컬변수'라고 함.

 

public int vartest(int a) {  //void가 int로 바뀜
    a++;
    return a;		//return a가 생김
}

public static void main(String[] args) {
    int a = 1;
    Test myTest = new Test();
    a = myTest.vartest(a); //객체변수 a를 새로 지정함
    System.out.println(a);
}

만약에 메인에서 a++을 쓰고 싶다면 이렇게 return을 설정해주면 된다. 

2

 

비교>>

public class Test {

    int a;  // 클래스의 객체변수 a (원래는 메인에서 선언)

    public void vartest(Test test) { //Test 클래스의 객체를 입력받아 객체변수a를 증가. 
   		test.a++;				//vartest메소드의 입력 파라미터가 값이(value) 아닌 Test클래스의 객체
   }							//myTest 객체의 객체변수 a의 값이 증가

    public static void main(String[] args) {
        Test myTest = new Test();
        myTest.a = 1;
        myTest.vartest(myTest); //Test클래스의 객체인 myTest를 메소드에 전달
        System.out.println(myTest.a);
    }
}
public class Test {

    int a;  // 객체변수 a

    public void vartest() {//this로 접근할 수 있으므로 객체변수도 필요없다. Test test
        this.a++;
    }

    public static void main(String[] args) {
        Test myTest = new Test();
        myTest.a = 1;	//객체.객체변수
        myTest.vartest(); //객체.메소드명();
        System.out.println(myTest.a);
    }
}

 

https://myblog.opendocs.co.kr/archives/1702

 

[문제해결] Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. | Opendocs

1. 문제상황 > 개발중 비정상적인 was 종료로 인해 다음과 같은 에러와 함께 재시작 되지 않는다. 실 운영환경에서도 이런경우가 있다. Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost ar

myblog.opendocs.co.kr

 

프로그래머스 서울에서 김서방찾기.

 

프로그래머스 두 정수 사이의 합

 

https://dev-note-97.tistory.com/53

 

[프로그래머스] 두 정수 사이의 합 / Python

문제주소 :programmers.co.kr/learn/courses/30/lessons/12912 <문제 설명> 더보기 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어..

dev-note-97.tistory.com

혼공파: switch  --best

min, max 쓰기

 

 

 

프로그래머스 수박수박수박수?

 

엄청 빠르다,,, 짧고 직관적

 

 

 

 

프로그래머스 가운데글자 가져오기

짝수일 경우, we를 가져와야함. [ : ]슬라이싱으로 가져올것

 

(len(s)-1)  //2: 중요! 

'코드테스트' 카테고리의 다른 글

lv.1- 프로그래머스 (파이썬)  (0) 2021.07.25
5.해쉬함수  (0) 2021.06.18
4.진법변환/비트연산  (0) 2021.06.17
3. 깊이우선탐색/ 너비탐색  (0) 2021.06.02
2.완전탐색/ 이분탐색  (0) 2021.05.30

해쉬함수: 검색과 저장이 용이함, key - value,  인덱스로 찾아야함. 

 

hash(1)= 'melon'

hash.pop(1)= 'melon'

del hash[1]

 

 

 

 

프로그래머스- 파이썬, 전화번호 목록

sort해서 비교하기

startswith 함수: startswith(찾을거, 시작점, 끝점)

 

'코드테스트' 카테고리의 다른 글

lv.1- 프로그래머스 (파이썬)  (0) 2021.07.25
코딩테스트 lv.1 - 파이썬  (0) 2021.06.18
4.진법변환/비트연산  (0) 2021.06.17
3. 깊이우선탐색/ 너비탐색  (0) 2021.06.02
2.완전탐색/ 이분탐색  (0) 2021.05.30

+ Recent posts