いがくせいのひとりごと

医学生の独り言を記録していきます。詳細は「#1自己紹介とブログの紹介」の記事を参照していただけると幸いです。

研究をやめることについて

今回の記事では、私がめでたく研究室を辞めることに成功したので、その内容について書こうと思います。エイプリルフールに投稿してますけど、嘘じゃないですよ!!!

学部医学生が研究室に通う必要性について自分なりに考え決断した結果ですので、私のように悩んでる方がいれば参考にしてもらえればと思います。

研究なんてやめちゃってもいいんだよ!!!死になんてしないし、世の中の大半の人は研究なんてしてないんですからね〜笑

1.研究を始めた理由

まずは私が研究を始めた理由と、研究をしていた時期の生活についてです。

研究の内容についてはあまり言えませんが、私は医工学系の研究室に所属していました。入ったきっかけとしては、もともとPythonを趣味で使えたため、それを有効活用したいという単純なものでした。

お世話になっていた研究室は教授が比較的若く、先進的な研究をしていた研究室であったこともあってかなり自由の利く環境でした。MTGにさえ出れば個人のペースで研究をさせてもらえるので、他の研究室のような大変さはなかったように思います。当時の私は、研究室の仕事はもちろん、部活、サークル、バイト、恋人や家族、友人との時間を両立する目まぐるしい生活を送っていました。

2.研究をやめた理由

そんな充実した生活の中、どうして私が研究室をやめるに至ったのでしょうか。

当時私がやっていた研究内容が、結果が出るかどうかわからないテーマであったことも理由の1つに挙げられますが、1番の理由は身の回りまわりのことを両立できなくなっていたからです。いくらがむしゃらにやっても研究結果が出ず、人間関係にも悩んでいました。研究内容は嫌いではなかったですが、正直研究によって精神をかなり削られていたため、研究室が私の不調の原因であることは明らかでした。

他の学部にもいるでしょうが、医学部には医学の膨大なタスクをこなしながら研究までやってのける猛者が一定数います。そういった人たちは大体、研究が好きか、一般人にとって大変なことを苦にも思わない人たちです。一般人の私がバイトもしながら、好きでもない研究を続けられるわけもなかったのです。

てか結局将来医者やるわけだし、のんびり臨床やりながら生きていくとしたら、この研究要らなくね??専門医取れればいいじゃーーーんという考えが自分を後押ししてくれたような気がします。

3.研究をやめたことの意義

研究室を辞めたことによって生活にゆとりができ、余裕のある生活を送れるようになりました。成績もあがり、マッチングには申し分ないCBTの成績を取れましたし、資産運用に回せる時間が増えたのが良かったと思います。ジムに行く時間も増え、楽しみでもあるバイトや趣味の時間をより充実させることができました。

研究が楽しくてしょうがないという人、修士博士をとらなくちゃいけない人はそのまま研究を続けた方がいいかもしれませんが、私は結果辞めて良かったと思います。

4.研究をやめた時間でできるようになったこと

先にも書きましたが、ジム、資産運用、バイト、趣味、周りの人との時間、資格の勉強の時間がやはり増えました。医師でも、将来的にキャリアを積むために研究をする時期はあると思います。ただ、学生時代に向いていない研究を真面目にやって、医学以外のことに多く時間を割ける貴重な時間を浪費するのは自分に合わないようだったので、今は満足しています。

5.まとめ

最初はプログラミングもできる、研究もできる医者ってかっこよくね??と思ってましたが、正直ハイパーな生活は自分には合いませんでした。研究なんてやってなくても、いざというときにちゃんと公衆衛生と基本的な医学知識があれば全く問題ないと今は思っています。

それよりも周りともっと時間を過ごして、いろんな情報を吸収して、自分の好きな分野で人脈増やしておけばいいかなって!感じです笑

また研究したくなったら戻れるわけだし、国試とマッチングまで今は医学以外のことに集中する時期にすることにします!

JOI 2013 予選 4 - 暑い日々 動的計画法

またDPの基本的な問題を解いてみました!

JOI 2013 予選 4 - 暑い日々

atcoder.jp

dp[i][n]:i日目に服nを着た時のスコアの最大値

~
#!/usr/bin/env python3

import sys
from itertools import accumulate,permutations,combinations,product
from collections import deque,defaultdict,Counter
from math import factorial,gcd
from functools import reduce
from operator import add
from operator import sub
from operator import mul
from bisect import bisect_left,bisect_right
from heapq import heappop, heappush
from functools import lru_cache

def I(): return int(input())
#def I(): return input()
def LI(): return list(map(int,input().split()))

def _main():
    #input = sys.stdin.readline().rstrip()
    d,n = map(int,input().split())
    tem = [0]*(d+1)
    hade = [0]*(n+1)
    for _ in range(d):
        a,b = map(int,input().split())
        tem[a-1] = b
    for i in range(n):
        a,b,c = map(int,input().split())
        hade[i]=[c,a,b]
    

    dp = [[-1] * (d+1) for _ in range(n)]
    for i in range(d):
        for j in range(n):
            if i == 0:
                dp[i+1][j] = 0
                continue
            a,b,c = hade[j]
            if a<=d[i]<=b:
                for m in range(n):
                    #前日との比較
                    dp[i+1][j] = max(dp[i+1][m]+abs(hade[j]-hade[m]),dp[i+1][m])

    print(max(dp[-1]))

    
if __name__ == '__main__':
    _main()

~

DPL_1_C - ナップザック問題

動的計画法について、基本的な問題(ナップザック問題)をPythonで解いてみました!

前回の記事とほとんど同じコードで解くことができます。 dp[i+1][w]の求め方が少し違います。

dp[n][w]は「n番目までの商品を、重さwを超えないで選んだ時の最大値」です。

DPL_1_C - ナップザック問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_1_C&lang=ja

~
#入力データの処理
N,W = map(int,input().split())
vwl = []
for _ in range(N):
    v,w = map(int,input().split())
    vwl.append((v,w))

#動的計画法の準備
dp = [[0]*(W+1) for _ in range(N+1)]

#動的計画法の実行
for i in range(N):
    vi,wi = vwl[i]
    for w in range(W+1):
        if w-wi>=0:#dp[i][w-wi]が二次元配列の外に行かないか判定
            #次行変更箇所
            dp[i+1][w] = max(dp[i+1][w-wi]+vi,dp[i][w])#重さwiのものを取るべきか判定
        else:
            dp[i+1][w] = dp[i][w]
print(dp[N][W])
~

DPL_1_B - 0,1ナップザック問題 動的計画法

動的計画法について、基本的な問題(ナップザック問題)をPythonで解いてみました!

dp[n][w]は「n番目までの商品を、重さwを超えないで選んだ時の最大値」です。

DPL_1_B - 0,1ナップザック問題 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_1_B&lang=ja

~
#入力データの処理
N,W = map(int,input().split())
vwl = []
for _ in range(N):
    v,w = map(int,input().split())
    vwl.append((v,w))

#動的計画法の準備
dp = [[0]*(W+1) for _ in range(N+1)]

#動的計画法の実行
for i in range(N):
    vi,wi = vwl[i]
    for w in range(W+1):
        if w-wi>=0:#dp[i][w-wi]が二次元配列の外に行かないか判定
            dp[i+1][w] = max(dp[i][w-wi]+vi,dp[i][w])#重さwiのものを取るべきか判定
        else:
            dp[i+1][w] = dp[i][w]
print(dp[N][W])
~

JOI 2011 予選 5 - チーズ を解きました!(BFS 幅優先探索)

問題はこちらです!拙いコードですがご意見などございましたらお願いします!

atcoder.jp

~
#!/usr/bin/env python3

import sys
from itertools import accumulate,permutations,combinations,product
from collections import deque,defaultdict,Counter
from math import factorial,gcd
from functools import reduce
from operator import add
from operator import sub
from operator import mul
from bisect import bisect_left,bisect_right
from heapq import heappop, heappush
from functools import lru_cache
import queue

def I(): return int(input())
#def I(): return input()
def LI(): return list(map(int,input().split()))

def _main():
    input = sys.stdin.readline
    sys.setrecursionlimit(int(1e+7))
    h,w,n = map(int,input().split())
    matrix = []
    factory = [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]
    for i in range(h):
        x = input()
        matrix.append(x)
        if 'S' in x:
            sy = i
            sx = x.index("S")
        if '1' in x:
            factory[0][0] = x.index('1')
            factory[0][1] = i 
        if '2' in x:
            factory[1][0] = x.index('2')
            factory[1][1] = i 
        if '3' in x:
            factory[2][0] = x.index('3')
            factory[2][1] = i 
        if '4' in x:
            factory[3][0] = x.index('4')
            factory[3][1] = i 
        if '5' in x:
            factory[4][0] = x.index('5')
            factory[4][1] = i 
        if '6' in x:
            factory[5][0] = x.index('6')
            factory[5][1] = i 
        if '7' in x:
            factory[6][0] = x.index('7')
            factory[6][1] = i
        if '8' in x:
            factory[7][0] = x.index('8')
            factory[7][1] = i 
        if '9' in x:
            factory[8][0] = x.index('9')
            factory[8][1] = i

    q = deque()
    dex,dey = factory[0][0],factory[0][1]
    visited = [[0]*w for _ in range(h)]
    q.append((sy,sx,0))
    ans =0
    dydx = ((1,0),(0,1),(-1,0),(0,-1))
    destinationindex = 0
    while q:
        y,x,d = q.popleft()

        if (y,x)==(dey,dex):
            ans+=d

            if y == factory[n-1][1] and x == factory[n-1][0]:
                break

            destinationindex += 1
            dex,dey = factory[destinationindex]
            q = deque()
            q.append((y,x,0))
            visited = [[0]*w for _ in range(h)]
            continue
        
        if visited[y][x]:
            continue
        else:
            visited[y][x] = 1
            for dy,dx in dydx:
                if 0<=y+dy<h and 0<=x+dx<w:
                    if matrix[y+dy][x+dx] != "X" and not visited[y+dy][x+dx]:
                        q.append((y+dy,x+dx,d+1))
    print(ans)

if __name__ == '__main__':
    _main()
~