티스토리 뷰
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 |
댓글