슈뢰딩거의 20학번 3회차

업데이트:

3회차 세부사항

모임 일자

  • 2020-07-07

모임 일시

  • 14:00 ~ 17:00 (3시간)

모임 장소

  • 각자 집

다과사진0

목표 사전 발표

  • 최민우: BOJ 그래프문제 (DFS/BFS) 풀이
  • 노채은: wiset R프로그래밍 1~4강 수강 + BOJ 파이썬으로 2문제 이상 풀기 (DP)
  • 송유찬: 백준 출력문 문제집 15문제 + a
  • 임지은: list, 컨테이너, 반복문, form, 정보처리, 수정구현, 삭제구현 강의 듣고 내용정리 및 코딩실습하기
  • 최수빈: 컴퓨터프로그래밍1 5주차 조건문에 대한 복습 및 키, 몸무게 입력 받아 표준체중과 사용자의 체중 비교 과제 다시 하기

공부사진0

회고

이름 클릭시 해당 회고록 블로그로 이동합니다

최민우

목표 : BOJ 그래프문제 (DFS/BFS) 풀이

최민우0

처음 시작할때에는 2문제 해결을 하려고 했는데 1문제는 완료했지만 남은 하나를 해결하지 못해서 아쉬움이 남는다.

나의 BOJ 진도에서 가장 진도를 나가지 않은 알고리즘 분야가 그래프 유형이였는데

문제를 풀어가면서 그래프 문제들의 유형에 익숙해지면서 다른 문제들보다 재밌다는 생각이 들었다.

아래는 해결한 문제의 소스코드이다 시간복잡도가 적고 로직이 깔끔해서 만들고 나서 뿌듯했다.

5427번 - 불

import sys
from collections import deque

t = int(sys.stdin.readline().rstrip())
dirs = [(1, 0), (-1, 0), (0, 1), (0, -1)]


def bfs(person_start, fire_start, time_table, width, height):
    pQueue = deque(person_start)
    fQueue = deque(fire_start)

    time = 0

    while pQueue:
        time += 1
        while fQueue:
            pos_x, pos_y = fQueue.popleft()
            if time_table[pos_y][pos_x] is not time:
                fQueue.insert(0, (pos_x, pos_y))
                break
            for dx, dy in dirs:
                if 0 <= pos_x + dx < width and 0 <= pos_y + dy < height:
                    if time_table[pos_y + dy][pos_x + dx] == 0:
                        time_table[pos_y + dy][pos_x + dx] = time + 1
                        fQueue.append((pos_x + dx, pos_y + dy))

        while pQueue:
            pos_x, pos_y = pQueue.popleft()
            if time_table[pos_y][pos_x] is not time:
                # 이부분 때문에 한번 더 틀렸다 ㅠㅠ
                pQueue.insert(0, (pos_x, pos_y))
                break
            for dx, dy in dirs:
                if 0 <= pos_x + dx < width and 0 <= pos_y + dy < height:
                    if time_table[pos_y + dy][pos_x + dx] == 0:
                        time_table[pos_y + dy][pos_x + dx] = time + 1
                        pQueue.append((pos_x + dx, pos_y + dy))
                else:
                    return time

    return 'IMPOSSIBLE'


"""
처음 생각은 field 를 챙겨야한다는 점이였지만 초반 빼고 쓰지 않았다.
time_table 을 제작하여 이동경로 확인 + 시간체크의 역할을 해서 시간을 효과적으로 줄였다.
"""

for case in range(t):
    w, h = map(int, sys.stdin.readline().rstrip().split())
    array = [list(sys.stdin.readline().rstrip()) for _ in range(h)]
    times = [[0] * w for _ in range(h)]

    person_init = []
    fire_init = []

    for y in range(h):
        for x in range(w):
            if array[y][x] == '*':
                fire_init.append((x, y))
                times[y][x] = 1
            elif array[y][x] == '@':
                person_init.append((x, y))
                times[y][x] = 1
            elif array[y][x] == '#':
                times[y][x] = 9
                # 어 이거 원래 -1하려다가 잠깐 출력해본다고 9로 했는데 통과됐네

    print(bfs(person_init, fire_init, times, w, h))

노채은

목표 : wiset R프로그래밍 1~4강 수강 + BOJ 파이썬으로 2문제 이상 풀기 (DP)

오늘은 WISET에서 제공하는 R프로그래밍 강의를 수강한 후 직접 실습해 보았다.

빅데이터의 중요성이 커져감에 따라서 데이터를 다루는데 주로 사용하는 R 언어 또한 주목받고 있다.

예전에 책으로 독학한 적도 있어서 실습은 크게 어렵지 않았고, 관심 분야에 주로 사용되는 새로운 언어를 배울 수 있어서 좋았다.

백준 알고리즘에서는 DP 문제들을 풀었는데 갑자기 확 난이도가 상승해서 어려웠다… DP는 수학적 사고 또한 수반되어야 해결할 수 있어서 알고리즘을 구상하는데 오랜 시간이 걸리는 것 같다.

노채은-DP

일단 DP를 마스터하고 나머지 문제들도 차근차근 해결하여 알고리즘 해결 능력을 증진시키는 것이 목표인만큼, 오랜 시간이 걸려도 성실하게 문제를 풀어야겠다는 다짐을 새로이 할 수 있었다!

송유찬

목표 : 백준 출력문 문제집 15문제 + a

송유찬

사실 출력은 조금 쉽다고 생각하여 가볍게 임했는데 계산하는 문제도 많았고 출력 뿐 아니라 다른 개념들도 필요한 문제들이 많아서 시간이 오래걸렸다.

하지만 그 속에서도 내가 몰랐던 내용들을 공부하고 알고리즘을 익히니 대충 어떻게 문제를 풀어야할지 감이 생겨 문제를 풀면 풀수록 더 쉽게 풀 수 있었다.

비록 지금은 실력이 많이 뒤쳐지지만 앞으로 더 열심히 해야겠다는 각오도 생기고 어려운 문제를 보니 괜히 승부욕도 생겨 모각코 활동을 하는 것 자체가 의미 있다고 느꼈다.

임지은

목표 : list, 컨테이너, 반복문, form, 정보처리, 수정구현, 삭제구현 강의 듣고 내용정리 및 코딩실습하기

생활코딩에서 web2 강의를 듣다가 18강 부터 개념을 배우고 나서 활용을 web을 통해서 한다는 것을 강의를 들으면서 깨달았다.

python에 대한 것을 배우는 강의라서 web1 강의를 듣지 않아도 배우는 것에 상관이 없을거라고 생각했지만 배운 내용 실습을 web으로 활용하는 수업임을 이번 회차에서 깨달았다.

그래서 뒤늦게나마 web1 강의를 학습하고 web2 python을 수강하면서 파이썬과 web을 함께 공부하기로 결정하였고, web1을 수강하기 위한 준비를 마쳤다.

2020 하계 모각코를 하면서 python의 개념만 공부하기에는 부족하다고 생각했는데 web에 대한 공부도 하게 되어서 더욱 알찬 활동을 할 수 있을 것 같다.

최수빈

목표 : 컴퓨터프로그래밍1 5주차 조건문에 대한 복습 및 키, 몸무게 입력 받아 표준체중과 사용자의 체중 비교 과제 다시 하기

해당 주차 강의에서 형변환에 대한 것은 자세하게 다루지 않았어서 실수와 정수를 (int) 또는 (double)을 통해 변환하는 것 이외에는 잘 모르고 있었는데 이번에 형변환에 대해 더 찾아보면서 다른 자료형은 어떻게 변환을 하는지 배울 수 있었다.

5주차 과제: 사용자의 키와 몸무게를 입력받아 저체중, 표준, 과체중 판단
표준체중 = (키-100) * 0.9, 표준체중의 ± 10%인 경우 정상이고 그 이상이나 이하이면 과체중 또는 저체중

import java.util.Scanner;

public class WEEK5 {
	public static void main(String[] args) {
		int height =0;
		int weight;
		
		Scanner input = new Scanner(System.in);
		System.out.print("키를 입력하세요 : ");
		height = input.nextInt();
		
		System.out.print("몸무게를 입력하세요 : ");
		weight = input.nextInt();
		
		double standard = (height-100)*0.9;
		
		if ((weight>standard*(0.9))&&(weight<standard*(1.1)))
			System.out.print("당신은 표준체중입니다.");
		else if (weight<=standard*(0.9))
			System.out.print("당신은 저체중입니다.");
		else if (weight>=standard*(1.1))
			System.out.print("당신은 과체중입니다.");
		
	}
}

과제를 다시 할 때에는 지난번에 했던 과제를 비교하는 과정에서 전에는 찾지 못했던 오류를 발견할 수 있었다.

작은 오류였지만 이번에 발견하지 못했더라면 어쩌면 계속 몰랐을 것이고 어쩌면 다음에 같은 실수를 했을지도 모른다는 생각을 하니 조금 아찔했다.

어렵고 많은 내용을 하고 있는 것은 아니지만 회차를 거듭할수록 이렇게 사소한 것들을 조금 더 알게 되고 수정할 수 있게 된다는 것도 꽤나 의의가 있는 것 같다는 생각이 든다.

카테고리:

업데이트: