티스토리 뷰

TIL - 2022

[TIL 016] 2022032

바랄 희 2022. 3. 26. 02:15

01 | 알고리즘

 

#4칸 중 색칠 된 곳이 3개인 경우.

n,m = map(int,input().split())
arr = [
    [0]*n
    for _ in range(n)
]

dxs = [0,0,-1,1]
dys = [-1,1,0,0]

def in_range(x,y):
    return x<n and y<n and x>=0 and y>=0

def check(x,y):
    cnt=0
    for i in range(4):
        nx = x+dxs[i]
        ny = y+dys[i]
        if in_range(nx,ny) and arr[nx][ny]==1:
            cnt+=1
    return cnt


for i in range(m):
    x,y = map(int,input().split())
    x-=1
    y-=1
    arr[x][y]=1
    if check(x,y)==3:
        print(1)
    else:
        print(0)
n = int(input())

arr = [
    input()
    for _ in range(n)
]

start = int(input())

#시작하는 곳의 인덱스를 찾음.
def start_point(start):
    if start<=n:
        return 0, start-1,0
    elif start <=n*2:
        return start-1-n, n-1,1
    elif start <= n*3:
        return n-1, n*3-start,2
    else:
        return n*4-start, 0,3


mapper = {
    "D":0,
    "L":1,
    "U":2,
    "R":3
}

def in_range(x,y):
    return x<n and y<n and x>=0 and y>=0


# 거울이 /라면 (dir_num-3+4)%4 거울이 \ 라면..? (dir_num-1+4)%4
#x,y는 start_point의 결과값

dxs = [1,0,-1,0]
dys = [0,-1,0,1]

cnt = 1

def simulate(x,y,dir_num):
    global cnt
    while True:
        if arr[x][y]=="/":
            dir_num = dir_num ^ 1 
        else:
            dir_num = 3 - dir_num
        nx = x+dxs[dir_num]
        ny = y+dys[dir_num]
        if in_range(nx,ny):
            x = nx
            y = ny
            cnt+=1
        else:
            break

x,y,dir_num = start_point(start)
simulate(x,y,dir_num)
print(cnt)

두번째 문제는 거울에 반사되는 횟수를 구하는 것이라서 좀.. 어려웠는데 이전에 활용했던 dx dy 테크닉을 차근차근 적용해보니 생각보다 쉽게 풀었다!

 

02 | 장고 이메일 인증 구현

따로 게시했다

03 | 스프링부트

DI Dependency Injection 에 대해서 배웠다.

추가적으로 자바 문법을 공부해야 할 필요성을 느꼈다..

04 | 알고리즘 - 분할정복 구현

def merge_two_sorted_list(A,p,q):
    print(p,q)
    m = (p+q)//2
    i,j = p,m+1
    B = []
    while i<=m and j<=q:
        if A[i]<A[j]:
            B.append(A[i])
            i+=1
        elif A[i]>A[j]:
            B.append(A[j])
            j+=1
        else:
            B.append(A[i])
            i+=1
            j+=1
    while i<=m:
        B.append(A[i])
        i+=1
    while j<=q:
        B.append(A[j])
        j+=1
    print(B)
    for i in range(p,q+1):
        A[i] = B[i-p]

def merge_sort(A,p,q):
    if p>=q:
        return
    merge_sort(A,p,(p+q)//2)
    merge_sort(A,(p+q)//2+1,q)
    merge_two_sorted_list(A,p,q)
    
A = [37, 10, 22, 30, 35, 13, 25, 24]
merge_sort(A,0,7)
print(A)

 

05 | 헷갈렸던 자바 문법들..

#배열 선언 방법
int[] orders = {1,2,3,4}; 

#이전에 봤던 배열 방법이 모두 아래와 같아서 위와 같은 방법이 있던 것을 몰랐다.
int [] orders = new orders[4]; 

#맵 (딕셔너리와 비슷)
HashMap <String,String> map = new HashMap<>();
map.put("people","사람");

#객체 선언 방법
Animal cat = new Animal();

#this 는 선언된 객체를 지칭함.
class Animal {
    String name;

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

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        cat.setName("boby");  // 메소드 호출
        System.out.println(cat.name);
    }
}

오버라이딩은 덮어쓰기 (입력항목 같음)

오버로딩은 입력항목이 다른 같은 이름의 메소드

 

생성자 객체변수에 값을 설정해야지만 객체가 생성되도록 강제

class HouseDog extends Dog {
    HouseDog(String name) {
        this.setName(name);
        
    //생성자가 아니라면 그냥
   	String name;
    }
    

//생성 시에는
public class Sample {
    public static void main(String[] args) {
        HouseDog dog = new HouseDog("happy"); // 반드시 name 객체변수에 값을 할당해주어야 한다.
        System.out.println(dog.name);
    }
}

 

'TIL - 2022' 카테고리의 다른 글

[TIL 018] 20220326  (0) 2022.03.27
[TIL 017] 스프링부트 - 회원 서비스 개발과 테스트  (0) 2022.03.27
[TIL 015] 장고로 이메일 보내기  (0) 2022.03.25
[TIL 014] 20220323  (0) 2022.03.24
[TIL 013] 20220320  (0) 2022.03.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함